Nie mogę ustalić, na czym if
polega problem z poniższym stwierdzeniem w odniesieniu do elif
i then
. Pamiętaj, że printf
wciąż jest w fazie rozwoju. Po prostu nie byłem jeszcze w stanie tego przetestować w oświadczeniu, więc jest to prawdopodobnie błąd.
Występuje błąd:
./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'
I takie jest zdanie.
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
źródło
źródło
then
oświadczenieif
, aelif
jednak nieelse
, a także w ogóle.Odpowiedzi:
Brakuje miejsca między
elif
i[
:Powinien być
Ponieważ widzę, że to pytanie zyskuje wiele wyświetleń, ważne jest, aby wskazać, że następująca składnia to:
co oznacza, że wokół nawiasów potrzebne są spacje . W przeciwnym razie to nie zadziała. Wynika to z faktu
[
, że samo to polecenie.Powodem, dla którego nie widzisz coś podobnego
elif[: command not found
(lub podobny) jest to, że po obejrzeniuif
ithen
, powłoka szuka alboelif
,else
albofi
. Znajduje jednak innąthen
(po źle sformatowanymelif[
). Dopiero po przeanalizowaniu instrukcji zostanie ona wykonana (i zostanie wyświetlony komunikat o błędzie podobny doelif[: command not found
tego).źródło
$ man [
if test "$seconds" -eq 0; then ... fi
jest równoważne zif [ "$seconds" -eq 0 ];then ... fi ]
. @LeiYangman test
jest tym, czego tak naprawdę szukaszMasz kilka problemów ze składnią skryptu. Oto poprawiona wersja:
źródło
bash
„jeśli-to-jeszcze”, który z łatwością znalazłem podczas wymiany stosów ... dzięki.#!/bin/sh
.#!/bin/sh
ale nie musi.sh
można go zamiast tego zastosować dla większej kompatybilności (nie wszystkie dystrybucje * nix mają domyślną powłokę bash (niektóre mają ksh lub ash, ale większość z nich zależy od standardush
działania). Co więcej, jeśli bash jest specyficzny lub w skrypcie nie są używane zaawansowane funkcje, wówczas jako interpreter należy użyć „sh” (jest to jeszcze jeden powód), ponieważ może on sam obsługiwać skrypt[
to polecenie (lub wbudowane w niektóre powłoki). Musi być oddzielony spacją od poprzedniej instrukcji:źródło
type -a [
aby to zobaczyć.Poleciłbym zapoznanie się z podstawami warunkowania w bash.
Symbol „[” jest poleceniem i musi poprzedzać go spacją. Jeśli nie podajesz spacji po elifie, system interpretuje elif [ jako szczególną komendę, która zdecydowanie nie jest tym, czego chciałbyś w tej chwili.
Stosowanie:
Krótko mówiąc, edytuj segment kodu, aby:
Wszystko będzie dobrze bez błędów kompilacji. Twój końcowy segment kodu powinien wyglądać następująco:
źródło
Brak miejsca między programem
elif
a[
resztą jest poprawny. musisz to poprawić i sprawdź. tutaj jest ustalony program:przydatny link związany z tym bashem, jeśli indziej
źródło