Ich versuche eine einfache Zustandsprüfung durchzuführen, aber es scheint nicht zu funktionieren.
Wenn $#
gleich 0
oder größer als ist, 1
dann sag hallo.
Ich habe die folgende Syntax ohne Erfolg ausprobiert:
if [ "$#" == 0 -o "$#" > 1 ] ; then
echo "hello"
fi
if [ "$#" == 0 ] || [ "$#" > 1 ] ; then
echo "hello"
fi
bash
unix
if-statement
sh
Erdbeere
quelle
quelle
>
ist die Ausgabeumleitung in sh / bash. Jetzt haben Sie wahrscheinlich eine Datei mit dem Namen1
.Antworten:
Das sollte funktionieren:
Ich bin nicht sicher, ob dies in anderen Shells anders ist, aber wenn Sie <,> verwenden möchten, müssen Sie sie wie folgt in doppelte Klammern setzen:
quelle
Dieser Code funktioniert für mich:
Ich glaube nicht, dass sh "==" unterstützt. Verwenden Sie "=", um Zeichenfolgen zu vergleichen, und -eq, um Ints zu vergleichen.
für mehr Details.
quelle
-gt
für größer sein als. Oder ersetzen Sie einfach alles durch[ $# -ne 1 ]
.Wenn Sie den Bash-Exit-Code Status $ verwenden? Als Variable ist es besser, dies zu tun:
Denn wenn Sie dies tun:
Der linke Teil des OP verändert das $? variabel, also hat der rechte Teil des OP nicht das ursprüngliche $? Wert.
quelle
Manchmal müssen Sie doppelte Klammern verwenden, andernfalls erhalten Sie einen Fehler wie zu viele Argumente
quelle
Wenn ein Bash-Skript
quelle
Haben Sie so etwas versucht:
quelle
echo
hallo, auch wenn ich ein einziges Argument habe.$#
könnte der Rückgabewert des ersten Tests sein?Aus dem Bash-Referenzhandbuch → 3.4.2 Spezielle Parameter
Daher
$#
wird immer entweder 0 oder eine größere Ganzzahl sein.Wenn Sie also etwas tun möchten, wenn
$#
0 oder größer als 1 ist, müssen Sie nur überprüfen, ob dies der Fall$#
ist oder nicht1
:Dies verwendet die Syntax:
quelle
[[ -n $A ]] && echo 1 || echo 2
Und in Bash
ODER in Bash
quelle