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

Resuelto user775187 asked hace 13 años • 12 respuestas

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?

user775187 avatar Jun 26 '11 12:06 user775187
Aceptado

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 -zconmutador probará si la expansión de "$1"es una cadena nula o no. Si es una cadena nula, entonces se ejecuta el cuerpo.

phoxis avatar Jun 26 '2011 05:06 phoxis

Es mejor demostrarlo así.

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

Normalmente necesitarás salir si tienes muy pocos argumentos.

Val avatar Nov 13 '2013 19:11 Val

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 scalecomo segundo parámetro, inicio el emulador de Android de forma -scale 1predeterminada. ${varname:-word}es un operador de expansión. También existen otros operadores de expansión:

  • ${varname:=word}que establece el indefinido varnameen lugar de devolver el wordvalor;
  • ${varname:?message}que devuelve varnamesi está definido y no es nulo o imprime messagey aborta el script (como en el primer ejemplo);
  • ${varname:+word}que devuelve wordsólo si varnameestá definido y no es nulo; devuelve nulo en caso contrario.
Aleks N. avatar Jul 31 '2014 18:07 Aleks N.