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.

Andrew K
la source
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
Laurence Gonsalves
la source
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
VIPIN KUMAR
la source
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

HaSnen Tai
la source