Anzahl der an ein Bash-Skript übergebenen Argumente prüfen
Ich möchte, dass mein Bash-Skript eine Fehlermeldung ausgibt, wenn die erforderliche Anzahl von Argumenten nicht erfüllt ist.
Ich habe den folgenden Code ausprobiert:
#!/bin/bash
echo Script name: $0
echo $# arguments
if [$# -ne 1];
then echo "illegal number of parameters"
fi
Aus irgendeinem unbekannten Grund habe ich den folgenden Fehler erhalten:
test: line 4: [2: command not found
Was mache ich falsch?
659
3
Genau wie jeder andere einfache Befehl erfordert
[ ... ]
odertest
Leerzeichen zwischen seinen Argumenten.Oder
Vorschläge
Verwenden Sie in der Bash stattdessen lieber
[[ ]]
, da sie keine Worttrennung und Pfadnamen-Expansion für ihre Variablen vornimmt, so dass eine Quotierung nicht unbedingt notwendig ist, es sei denn, sie ist Teil eines Ausdrucks.Es hat auch einige andere Funktionen wie unquoted condition grouping, pattern matching (extended pattern matching mit
extglob
) und regex matching.Das folgende Beispiel prüft, ob die Argumente gültig sind. Es erlaubt ein einzelnes Argument oder zwei.
Für rein arithmetische Ausdrücke mag die Verwendung von
(( ))
für einige immer noch besser sein, aber sie sind auch in[[ ]]
mit seinen arithmetischen Operatoren wie-eq
,-ne
,-lt
,-le
,-gt
oder-ge
möglich, indem der Ausdruck als einzelnes String-Argument gesetzt wird:Das sollte hilfreich sein, wenn man es auch mit anderen Funktionen von
[[ ]]
kombinieren möchte.Beenden des Skripts
Es ist auch logisch, das Skript zu beenden, wenn ungültige Parameter an es übergeben werden. Dies wurde bereits in den [comments] (https://stackoverflow.com/questions/18568706/check-number-of-arguments-passed-to-a-bash-script#comment50847987_18568706) von [ekangas] (https://stackoverflow.com/users/1102730/ekangas) vorgeschlagen, aber jemand hat diese Antwort bearbeitet, um sie mit
-1
als Rückgabewert zu versehen, also kann ich es auch gleich richtig machen.Obwohl
-1
von der Bash als Argument fürexit
akzeptiert wird, ist es nicht explizit dokumentiert und sollte nicht als allgemeiner Vorschlag verwendet werden.64
ist auch der formalste Wert, da er insysexits.h
mit#define EX_USAGE 64 /* command line usage error */
definiert ist. Die meisten Werkzeuge wiels
geben bei ungültigen Argumenten ebenfalls2
zurück. Ich habe in meinen Skripten auch2
zurückgegeben, aber in letzter Zeit habe ich mich nicht mehr darum gekümmert und einfach1
in allen Fehlern verwendet. Aber lassen Sie uns einfach2
hier einfügen, da es am häufigsten vorkommt und wahrscheinlich nicht OS-spezifisch ist.Referenzen
Es könnte eine gute Idee sein, arithmetische Ausdrücke zu verwenden, wenn Sie mit Zahlen zu tun haben.
Auf []: !=, =, == ... sind String-Vergleichsoperatoren und -eq, -gt ... sind arithmetische binäre Operatoren.
Ich würde verwenden:
Oder: