Vérification du nombre correct d'arguments


148

Comment puis-je vérifier le nombre correct d'arguments (un argument). Si quelqu'un essaie d'appeler le script sans passer le nombre correct d'arguments, et en vérifiant que l'argument de ligne de commande existe réellement et qu'il s'agit d'un répertoire.


5
@Daniel shellthat means/bin/sh
Ruel

Réponses:


216
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi

Traduction: Si le nombre d'arguments n'est pas (numériquement) égal à 1 ou si le premier argument n'est pas un répertoire, affichez l'utilisation vers stderr et quittez avec un code d'état d'échec.

Rapport d'erreurs plus convivial:

#!/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

1
@Andrew K: sur quelle ligne rapporte-t-il cela? Si c'est la ligne «si», essayez de supprimer l'une des deux clauses qui en font l'un if [ "$#" -ne 1 ] ; thenou l' autre ou if ! [ -d "$1" ]; thenpour voir quelle clause cause le problème.
Laurence Gonsalves

Je l'ai compris merci. Et si le nom du fichier n'existe pas?
Andrew K

N'existe pas == pas un réalisateur en ce qui le -dconcerne. Si vous souhaitez ajouter une vérification distincte, vous pouvez utiliser -epour vérifier l'existence.
Laurence Gonsalves

if [-e "$ 1"] then echo "$ 1: No such directory" exit 1 fi
Andrew K

@Andrew K: vous souhaitez inverser le chèque. -erenvoie true si le fichier existe. J'ai ajouté un rapport d'erreur plus convivial à la réponse.
Laurence Gonsalves

22

chat 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

exécutez-le comme ci-dessous -

./script.sh directory1 directory2

La sortie sera comme -

directory1 exit
directory2 Does not exists

14

Vous pouvez vérifier le nombre total d'arguments qui sont passés en ligne de commande avec " $#" Dites par exemple mon nom de script shell esthello.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 sortie sera hello-world

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.