Comprobar la existencia del argumento de entrada en un script de shell Bash
Necesito comprobar 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?
Es:
if [ $# -eq 0 ]
then
echo "No arguments supplied"
fi
La $#
variable le indicará la cantidad de argumentos de entrada que se pasó al script.
O puedes comprobar si un argumento es una cadena vacía o no como:
if [ -z "$1" ]
then
echo "No argument supplied"
fi
El -z
conmutador probará si la expansión de "$1"
es una cadena nula o no. Si es una cadena nula, entonces se ejecuta el cuerpo.
Es mejor demostrarlo así.
if [[ $# -eq 0 ]] ; then
echo 'some message'
exit 1
fi
Normalmente necesitarás salir si tienes muy pocos argumentos.
En algunos casos, es necesario comprobar si el usuario pasó un argumento al script y, en caso contrario, recurrir a un valor predeterminado. Como en el siguiente guión:
scale=${2:-1}
emulator @$1 -scale $scale
Aquí, si el usuario no ha pasado scale
como segundo parámetro, inicio el emulador de Android de forma -scale 1
predeterminada. ${varname:-word}
es un operador de expansión. También existen otros operadores de expansión:
${varname:=word}
que establece el indefinidovarname
en lugar de devolver elword
valor;${varname:?message}
que devuelvevarname
si está definido y no es nulo o imprimemessage
y aborta el script (como en el primer ejemplo);${varname:+word}
que devuelveword
sólo sivarname
está definido y no es nulo; devuelve nulo en caso contrario.