Verifique la existencia del argumento de entrada en un script de shell Bash


Answers

Es mejor demostrarlo de esta manera

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
fi

Normalmente necesita salir si tiene muy pocos argumentos.

Question

Necesito verificar la existencia de un argumento de entrada. Tengo el siguiente script:

if [ "$1" -gt "-1" ]
  then echo hi
fi

yo obtengo

[: : integer expression expected

¿Cómo verifico primero el argumento de entrada1 para ver si existe?




Si desea verificar si el argumento existe, puede verificar si el número de argumentos es mayor o igual que su número de argumento objetivo.

La siguiente secuencia de comandos demuestra cómo funciona esto

test.sh

#!/usr/bin/env bash

if [ $# -ge 3 ]
then
  echo script has at least 3 arguments
fi

produce la siguiente salida

$ ./test.sh
~
$ ./test.sh 1
~
$ ./test.sh 1 2
~
$ ./test.sh 1 2 3
script has at least 3 arguments
$ ./test.sh 1 2 3 4
script has at least 3 arguments



Como pequeño recordatorio, los operadores de prueba numérica en Bash solo trabajan en enteros ( -eq , -lt , -ge , etc.)

Me gusta asegurar que mis $ vars son ints por

var=$(( var + 0 ))

antes de probarlos, solo para defenderme del error "[: integer arg required".




Otra forma de detectar si los argumentos se pasaron al script:

((!$#)) && echo No arguments supplied!

Tenga en cuenta que (( expr )) hace que la expresión se evalúe según las reglas de Shell Arithmetic .

Para salir en ausencia de cualquier argumento, uno puede decir:

((!$#)) && echo No arguments supplied! && exit 1

Otra forma (análoga) de decir lo anterior sería:

let $# || echo No arguments supplied

let $# || { echo No arguments supplied; exit 1; }  # Exit if no arguments!

help let dice:

let: let arg [arg ...]

  Evaluate arithmetic expressions.

  ...

  Exit Status:
  If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.