Überprüfen Sie die richtige Anzahl von Argumenten

147

Wie überprüfe ich die richtige Anzahl von Argumenten (ein Argument)? Wenn jemand versucht, das Skript aufzurufen, ohne die richtige Anzahl von Argumenten zu übergeben, und überprüft, ob das Befehlszeilenargument tatsächlich vorhanden ist und ein Verzeichnis ist.

Andrew K.
quelle
5
@ Daniel shelldas bedeutet/bin/sh
Ruel

Antworten:

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

Übersetzung: Wenn die Anzahl der Argumente nicht (numerisch) gleich 1 ist oder das erste Argument kein Verzeichnis ist, geben Sie die Verwendung an stderr aus und beenden Sie sie mit einem Fehlerstatuscode.

Freundlichere Fehlerberichterstattung:

#!/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
quelle
1
@ Andrew K: Auf welcher Leitung wird dies gemeldet? Wenn es sich um die "if" -Zeile handelt, versuchen Sie, eine der beiden Klauseln auszuschneiden, um sie zu erstellen, if [ "$#" -ne 1 ] ; thenoder if ! [ -d "$1" ]; thenum festzustellen, welche Klausel das Problem verursacht.
Laurence Gonsalves
Ich habe es herausgefunden, danke. Wie wäre es, wenn der Dateiname nicht existiert?
Andrew K
Existiert nicht == kein Regisseur, soweit -des betrifft. Wenn Sie einen separaten Scheck hinzufügen möchten, können Sie ihn -eauf Existenz prüfen.
Laurence Gonsalves
Wenn [-e "$ 1"], dann Echo "$ 1: Kein solches Verzeichnis", beenden Sie 1 fi
Andrew K
@ Andrew K: Sie möchten den Scheck umkehren. -eGibt true zurück, wenn die Datei vorhanden ist. Ich habe der Antwort eine freundlichere Fehlerberichterstattung hinzugefügt.
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

Führen Sie es wie folgt aus -

./script.sh directory1 directory2

Die Ausgabe wird wie folgt sein:

directory1 exit
directory2 Does not exists
VIPIN KUMAR
quelle
14

Sie können die Gesamtzahl der Argumente, die in der Befehlszeile übergeben werden, mit " $#" überprüfen. Beispiel: Mein Shell-Skriptname lautethello.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

Ausgabe wird sein hello-world

HaSnen Tai
quelle