it-swarm.com.de

if, Elif, else-Anweisung in Bash

Ich kann nicht scheinen, herauszufinden, was das Problem mit der folgenden if -Anweisung in Bezug auf Elif und then ist. Denken Sie daran, dass sich printf noch in der Entwicklung befindet. Ich habe es in der Anweisung nur noch nicht testen können. Es ist also mehr als wahrscheinlich, dass es falsch ist.

Der Fehler, den ich erhalte, ist:

./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'

Und die Aussage ist so.

if [ "$seconds" -eq 0 ];then
   $timezone_string="Z"
Elif[ "$seconds" -gt 0 ]
then
   $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
else
   echo "Unknown parameter"
fi
310
StuStirling

Zwischen Elif und [ fehlt ein Leerzeichen:

Elif[ "$seconds" -gt 0 ]

sollte sein

Elif [ "$seconds" -gt 0 ]

Da ich sehe, dass diese Frage viele Aufrufe erhält, ist es wichtig, darauf hinzuweisen, dass die folgende Syntax verwendet wird:

if [ conditions ]
# ^ ^          ^

was bedeutet, dass Leerzeichen sind um die Klammern erforderlich. Andernfalls funktioniert es nicht. Dies liegt daran, dass [ selbst ein Befehl ist .

Der Grund, warum Sie so etwas wie Elif[: command not found (oder ähnliches) nicht sehen, ist, dass die Shell nach if und then, Elif oder else sucht, nachdem sie fi gesehen hat. Es wird jedoch ein anderer then gefunden (nach dem falsch formatierten Elif[). Nur nachdem die Anweisung analysiert hat, wird sie ausgeführt (und eine Fehlermeldung wie Elif[: command not found wird ausgegeben).

393
fedorqui

Sie haben einige Syntaxprobleme mit Ihrem Skript. Hier ist eine feste Version:

#!/bin/bash

if [ "$seconds" -eq 0 ]; then
   timezone_string="Z"
Elif [ "$seconds" -gt 0 ]; then
   timezone_string=$(printf "%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
   echo "Unknown parameter"
fi
253
anubhava

[ ist ein Befehl. Es muss durch Leerzeichen von der vorhergehenden Anweisung getrennt werden:

Elif [
22
choroba

Ich würde Ihnen empfehlen, sich die Grundlagen der Konditionierung in bash anzuschauen.

Das Symbol "[" ist ein Befehl und muss ein Leerzeichen enthalten. Wenn Sie nach Ihrem Elif kein Leerzeichen setzen, interpretiert das System Elif [ als einen bestimmten Befehl, der zu diesem Zeitpunkt definitiv nicht das ist, was Sie wollen.

Verwendung:

Elif(A COMPULSORY WHITESPACE WITHOUT PARENTHESIS)[(A WHITE SPACE WITHOUT PARENTHESIS)conditions(A WHITESPACE WITHOUT PARENTHESIS)]

Kurz gesagt, bearbeiten Sie Ihr Codesegment wie folgt:

Elif [ "$seconds" -gt 0 ]

Ohne Kompilierungsfehler wäre alles in Ordnung. Das endgültige Codesegment sollte folgendermaßen aussehen:

#!/bin/sh    
if [ "$seconds" -eq 0 ];then
       $timezone_string="Z"
    Elif [ "$seconds" -gt 0 ]
    then
       $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
    else
       echo "Unknown parameter"
    fi
4
Mr. Weirdo