Genau wie jeder andere einfache Befehl [ ... ]
oder test
erfordert Leerzeichen zwischen seinen Argumenten.
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
Oder
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
Vorschläge
Wenn Sie in Bash sind, bevorzugen Sie [[ ]]
stattdessen die Verwendung, da keine Wortaufteilung und Pfadnamenerweiterung für die Variablen durchgeführt wird. Ein Anführungszeichen ist möglicherweise nur erforderlich, wenn es Teil eines Ausdrucks ist.
[[ $# -ne 1 ]]
Es hat auch einige andere Funktionen wie nicht zitierte Bedingungsgruppierung, Musterabgleich (erweiterter Musterabgleich mit extglob
) und Regex-Abgleich.
Im folgenden Beispiel wird überprüft, ob Argumente gültig sind. Es erlaubt ein oder zwei Argumente.
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
Für reine arithmetische Ausdrücke verwenden (( ))
kann noch besser zu einigen, aber sie sind immer noch möglich , in [[ ]]
mit arithmetischen Operatoren wie -eq
, -ne
, -lt
, -le
, -gt
, oder -ge
durch den Ausdruck als ein einzelnes Zeichenfolge Argument setzen:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
Dies sollte hilfreich sein, wenn Sie es auch mit anderen Funktionen von kombinieren müssen [[ ]]
.
Beenden des Skripts
Es ist auch logisch, das Skript zu beenden, wenn ungültige Parameter an das Skript übergeben werden. Dies wurde bereits in den Kommentaren von ekangas vorgeschlagen, aber jemand hat diese Antwort bearbeitet, um sie -1
als Rückgabewert zu verwenden, also könnte ich es genauso gut richtig machen.
-1
Obwohl von Bash als Argument akzeptiert, exit
ist dies nicht explizit dokumentiert und kann nicht als allgemeiner Vorschlag verwendet werden. 64
ist auch der formalste Wert, da er in sysexits.h
mit definiert ist #define EX_USAGE 64 /* command line usage error */
. Die meisten Tools geben ls
auch 2
ungültige Argumente zurück. Ich habe auch 2
in meinen Skripten zurückgegeben, aber in letzter Zeit habe ich mich nicht mehr wirklich darum gekümmert und einfach bei 1
allen Fehlern verwendet. Aber lassen Sie uns einfach 2
hier platzieren, da es am häufigsten und wahrscheinlich nicht betriebssystemspezifisch ist.
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
Verweise
test
. Das ist der Name eines Standard-Unix-Befehls, den Sie nicht beschatten möchten.