So wählen Sie mehrere Ausgänge aus

So wählen Sie mehrere Ausgänge aus

Ich habe keine Erfahrung mit Bash-Skripten und verstehe nicht, was mit diesem bestimmten Teil meines Skripts nicht stimmt. Ich versuche, alle Ausgänge auszuwählen, die mein Skript enthält, und versuche, die Bedingung zu erfüllen, dass das Skript ungültig ist, wenn alle diese Bedingungen nicht erfüllt sind, andernfalls aber gültig.

if [[ `echo $?` -ne {0..4} ]]
then
         echo "Its a Valid Date."
 else
         echo " Not valid date."
fi

Wenn ich es ausführe, erhalte ich:

kpatel138@matrix:~/Lab2> ./cal2 1994 5 4
./cal2: line 40: unexpected argument `(' to conditional binary operator
./cal2: line 40: syntax error near `(0'
./cal2: line 40: `if [[ `echo $?` -ne (0..4) ]]'

Antwort1

`echo $?`ist eine komplizierte Schreibweise $?. Machen Sie die Dinge nicht kompliziert, wenn es einen offensichtlich einfacheren Weg gibt.

Ich denke, Sie möchten testen, ob $?einer der Werte 0, 1, 2, 3 oder 4 ist. Die von Ihnen verwendete Syntax ergibt keinen Sinn. Sie können alle fünf Gleichheitsfälle testen:

if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …

Aber das ist zu ausführlich. Da Sie den Bereich 0–4 zulassen möchten, testen Sie, ob dieser $?größer als der Mindestwert und kleiner als der Höchstwert ist.

if [[ $? -ge 0 && $? -le 4 ]]; then …

$?ist nie negativ, daher $? -ge 0ist der Test überflüssig. Daher:

if [[ $? -le 4 ]]; then …

Dies kann auch mit einem arithmetischen Ausdruck geschrieben werden. Beachten Sie, dass der Operator anders ist: Bedingungskonstrukte in Klammern verwenden -eq, -ne, -le, -ge, -ltund -gtzum Vergleichen ganzer Zahlen, während arithmetische Ausdrücke eine C-ähnliche Syntax haben.

if (($? <= 4)); then …

verwandte Informationen