973 Stimmen

Überprüfen Sie die Anzahl der Argumente, die an ein Bash-Skript übergeben wurden

Ich möchte, dass mein Bash-Skript eine Fehlermeldung ausgibt, wenn die erforderliche Argumentanzahl nicht erreicht wird.

Ich habe den folgenden Code ausprobiert:

#!/bin/bash
echo Skriptname: $0
echo Anzahl der Argumente: $#
if [$# -ne 1]; 
    then echo "ungültige Anzahl von Parametern"
fi

Aus irgendeinem unbekannten Grund habe ich den folgenden Fehler erhalten:

test: Zeile 4: [2: Befehl nicht gefunden

Was mache ich falsch?

12voto

jenkizenki Punkte 722

Schau dir dieses Bash-Cheat-Sheet an, es kann sehr hilfreich sein.

Um die Länge der übergebenen Argumente zu überprüfen, benutzt man "$#"

Um das Array der übergebenen Argumente zu verwenden, benutzt man "$@"

Ein Beispiel zum Überprüfen der Länge und zum Iterieren wäre:

myFunc() {
  if [[ "$#" -gt 0 ]]; then
    for arg in "$@"; do
      echo $arg
    done
  fi
}

myFunc "$@"

Dieser Artikel hat mir geholfen, aber es fehlten mir ein paar Dinge für meine Situation. Hoffentlich hilft es jemand anderem.

3voto

panticz Punkte 1799

Hier sind einfache Einzeiler, um zu überprüfen, ob nur ein Parameter angegeben ist, ansonsten das Skript beenden:

[ "$#" -ne 1 ] && echo "VERWENDUNG $0 " && exit

1voto

ngenetzky Punkte 111

Es gibt viele gute Informationen hier, aber ich wollte ein einfaches Snippet hinzufügen, das ich nützlich finde.

Wie unterscheidet es sich von einigen oben?

  • Druckt die Verwendung auf stderr, was ordentlicher ist als das Drucken auf stdout
  • Gibt mit dem in dieser anderen Antwort erwähnten Exit-Code zurück
  • Macht es nicht zu einer Einzeiler...

    _usage(){ _echoerr "Verwendung: $0 " }

    _echoerr(){ echo "$*" >&2 }

    if [ "$#" -eq 0 ]; then # HINWEIS: Möglicherweise müssen Sie diese Bedingung anpassen _usage exit 2 fi main "$@"

1voto

Rukmangathan Punkte 40
#!/bin/bash

Hilfe() {
  echo "$0 --opt1|-opt1  --opt2|-opt2 "
}

OPTIONEN=($@)
GESAMT_OPTIONEN=$#
INT=0

if [ $GESAMT_OPTIONEN -gt 4 ]
then
        echo "Ungültige Anzahl von Argumenten"
        Hilfe
        exit 1
fi

while [ $GESAMT_OPTIONEN -gt $INT ]
do
        case ${OPTIONEN[$INT]} in

                --opt1 | -opt1)
                        INT=`expr $INT + 1`
                        opt1_wert=${OPTIONEN[$INT]}
                        echo "OPT1 = $opt1_wert"
                        ;;

                --opt2 | -opt2)
                        INT=`expr $INT + 1`
                        opt2_wert=${OPTIONEN[$INT]}
                        echo "OPT2 = $opt2_wert"
                        ;;

                --hilfe | -hilfe | -h)
                        Hilfe
                        exit 0
                        ;;

                *)
                        echo "Ungültige Option - ${OPTIONEN[$INT]}"
                        exit 1
                        ;;

        esac
        INT=`expr $INT + 1`
done

So verwende ich es und es funktioniert ohne Probleme

[root@localhost ~]# ./cla.sh -opt1 test --opt2 test2
OPT1 = test
OPT2 = test2

0voto

IsaacE Punkte 305

Wenn Sie auf der sicheren Seite sein wollen, empfehle ich die Verwendung von getopts.

Hier ist ein kleines Beispiel:

    while getopts "x:c" opt; do
      case $opt in
        c)
          echo "-$opt wurde ausgelöst, Bereitstellung auf CI-Konto" >&2
          DEPLOY_CI_ACCT="true"
          ;;
            x)
              echo "-$opt wurde ausgelöst, Parameter: $OPTARG" >&2 
              CMD_TO_EXEC=${OPTARG}
              ;;
            \?)
              echo "Ungültige Option: -$OPTARG" >&2 
              Verwendung
              exit 1
              ;;
            :)
              echo "Option -$OPTARG erfordert ein Argument." >&2 
              Verwendung
              exit 1
              ;;
          esac
        done

Weitere Details finden Sie hier, zum Beispiel unter http://wiki.bash-hackers.org/howto/getopts_tutorial

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X