Genau wie jeder andere einfache Befehl [ ... ]oder testerfordert 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 -gedurch 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 -1als Rückgabewert zu verwenden, also könnte ich es genauso gut richtig machen.
-1Obwohl von Bash als Argument akzeptiert, exitist dies nicht explizit dokumentiert und kann nicht als allgemeiner Vorschlag verwendet werden. 64ist auch der formalste Wert, da er in sysexits.hmit definiert ist #define EX_USAGE 64 /* command line usage error */. Die meisten Tools geben lsauch 2ungültige Argumente zurück. Ich habe auch 2in meinen Skripten zurückgegeben, aber in letzter Zeit habe ich mich nicht mehr wirklich darum gekümmert und einfach bei 1allen Fehlern verwendet. Aber lassen Sie uns einfach 2hier 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.