Ich kann anscheinend nicht herausfinden, was das Problem mit der folgenden if
Aussage in Bezug auf das elif
und ist then
. Denken Sie daran, dass sich das printf
noch in der Entwicklung befindet. Ich konnte es in der Erklärung noch nicht testen. Es ist also höchstwahrscheinlich falsch.
Der Fehler, den ich bekomme, 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
bash
if-statement
StuStirling
quelle
quelle
then
if
elif
else
Antworten:
Zwischen
elif
und fehlt ein Leerzeichen[
:sollte sein
Da ich sehe, dass diese Frage viele Ansichten erhält, ist es wichtig anzugeben, dass die folgende Syntax lautet:
Dies bedeutet, dass um die Klammern Leerzeichen benötigt werden . Sonst funktioniert es nicht. Dies liegt daran ,
[
selbst ist ein Befehl.Der Grund , warum Sie nicht wie etwas zu sehen
elif[: command not found
(oder ähnlich) ist , dass nach dem Besuchif
undthen
wird die Schale entweder suchenelif
,else
oderfi
. Es findet jedoch eine anderethen
(nach der falsch formatiertenelif[
). Erst nachdem die Anweisung analysiert haben würde (und eine Fehlermeldung wie ausgeführtelif[: command not found
Ausgabe wäre).quelle
$ man [
if test "$seconds" -eq 0; then ... fi
ist äquivalent zuif [ "$seconds" -eq 0 ];then ... fi ]
. @LeiYangman test
ist das, wonach Sie tatsächlich suchenSie haben einige Syntaxprobleme mit Ihrem Skript. Hier ist eine feste Version:
quelle
bash
"Wenn-Dann-Sonst" -Konstrukt, das ich bei Stackexchange leicht gefunden habe ... danke.#!/bin/sh
.#!/bin/sh
, muss es aber nicht.sh
es stattdessen für eine höhere Kompatibilität verwendet werden kann (nicht alle * nix-Distributionen haben Bash als Standard-Shell (einige haben ksh oder ash, aber die meisten hängen vom Standard ab, umsh
zu funktionieren)[
ist ein Befehl (oder ein in einigen Shells eingebauter Befehl). Es muss durch Leerzeichen von der vorhergehenden Anweisung getrennt werden:quelle
type -a [
, um das zu sehen.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 eingeben, interpretiert das System elif [ als einen bestimmten Befehl, der zu diesem Zeitpunkt definitiv nicht das ist, was Sie möchten.
Verwendungszweck:
Kurz gesagt, bearbeiten Sie Ihr Codesegment wie folgt:
Sie würden ohne Kompilierungsfehler in Ordnung sein. Ihr endgültiges Codesegment sollte folgendermaßen aussehen:
quelle
Fehlender Platz zwischen
elif
und[
Pause Ihres Programms ist korrekt. Sie müssen es korrigieren und auschecken. Hier ist festes Programm:nützlicher Link zu dieser bash if else-Anweisung
quelle