Respuestas:
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
echo "Usage: $0 DIRECTORY" >&2
exit 1
fi
Traducción: si el número de argumentos no es (numéricamente) igual a 1 o el primer argumento no es un directorio, envíe el uso a stderr y salga con un código de estado de falla.
Informe de errores más amigable:
#!/bin/sh
if [ "$#" -ne 1 ]; then
echo "Usage: $0 DIRECTORY" >&2
exit 1
fi
if ! [ -e "$1" ]; then
echo "$1 not found" >&2
exit 1
fi
if ! [ -d "$1" ]; then
echo "$1 not a directory" >&2
exit 1
fi
if [ "$#" -ne 1 ] ; then
o bien if ! [ -d "$1" ]; then
para ver qué cláusula está causando el problema.
-d
respecta. Si desea agregar un cheque por separado, puede usarlo -e
para verificar la existencia.
-e
devuelve verdadero si el archivo existe. Agregué un informe de error más amigable a la respuesta.
gato script.sh
var1=$1
var2=$2
if [ "$#" -eq 2 ]
then
if [ -d $var1 ]
then
echo directory ${var1} exist
else
echo Directory ${var1} Does not exists
fi
if [ -d $var2 ]
then
echo directory ${var2} exist
else
echo Directory ${var2} Does not exists
fi
else
echo "Arguments are not equals to 2"
exit 1
fi
ejecutarlo como abajo -
./script.sh directory1 directory2
La salida será como:
directory1 exit
directory2 Does not exists
Puede verificar el número total de argumentos que se pasan en la línea de comando con " $#
"
Digamos, por ejemplo, que mi nombre de script de shell eshello.sh
sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument
if [ $# -eq 1 ]
then
echo $1
else
echo "invalid argument please pass only one argument "
fi
La salida será hello-world
shell
eso significa/bin/sh