Verifica del numero corretto di argomenti


148

Come posso verificare il numero corretto di argomenti (un argomento). Se qualcuno tenta di invocare lo script senza passare il numero corretto di argomenti e verificando che l'argomento della riga di comando esista effettivamente e sia una directory.


5
@Daniel shellsignifica/bin/sh
Ruel,

Risposte:


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

Traduzione: Se il numero di argomenti non è (numericamente) uguale a 1 o il primo argomento non è una directory, inviare l'utilizzo a stderr e uscire con un codice di stato di errore.

Segnalazione errori più amichevole:

#!/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: su quale linea sta segnalando questo? Se è la riga "if", prova a ritagliare una delle due clausole rendendola if [ "$#" -ne 1 ] ; theno if ! [ -d "$1" ]; thenper vedere quale clausola sta causando il problema.
Laurence Gonsalves,

L'ho capito grazie. Che ne dici se il nome del file non esiste?
Andrew K,

Non esiste == non è un regista per quanto -driguarda. Se desideri aggiungere un controllo separato, puoi utilizzare -eper verificare l'esistenza.
Laurence Gonsalves,

se [-e "$ 1"] quindi echo "$ 1: nessuna directory di questo tipo" esci 1 fi
Andrew K

@Andrew K: vuoi invertire il controllo. -erestituisce vero se il file esiste. Ho aggiunto un rapporto di errore più amichevole alla risposta.
Laurence Gonsalves,

22

cat 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

eseguilo come di seguito -

./script.sh directory1 directory2

L'output sarà come -

directory1 exit
directory2 Does not exists

14

È possibile verificare il numero totale di argomenti passati nella riga di comando con " $#" Dire ad esempio il nome dello script della shellhello.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

L'output sarà hello-world

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.