# if true ; then ; fi syntax error...

# if true ; then ; fi
-sh: syntax error near unexpected token `;'

Rajtam kívül mindenki tudta, hogy a then és a fi között muszáj valaminek lennie, különben syntax error lesz? :)
Most ezért nem futott egy ideje egy cron job, mert kikommenteltem az egyetlen parancsot a then és a fi között, mert már nem kellett, de mégse akartam az egészet if-et kitörölni...

Hozzászólások

kell bizony :)
sokak a `:` "parancsot" szokták placeholdernek használni, de látom te már ismered a `true` áldásait - én is azt alkalmazom placeholdernek.

~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack

Hát maga a "then fi" 2 hibát is tartalmaz. Ebből az egyik, hogy a fi az "parancs", tehát újsor, vagy ; vagy egyéb utasításlezáró mögé írandó. És csak a második hiba, hogy a then és a fi parancsok közé kell egy harmadik parancs. Amúgy ha nem egy sorban van ez az egész, akkor ez a harmadik parancs simán lehet egy megjegyzés is. Azaz ez jó:

if parancs1
then
# parancs2
fi

Ez viszont természetesen nem jó:

if parancs1 ; then # parancs2 ; fi

Nyilván ha az utóbbi (egysorba írt) formát használod, akkor a legkönnyebb az egészet kikommentelni helyette:

# if parancs1 ; then parancs2 ; fi

vagy kicsit trükkösen használni a fent általatok is taglalt : parancsot:

if parancs1 ; then : parancs2 ; fi

(Megjegyzem az utóbbiért egy értelmes gyakvezér/projektvezető kivág a francba, annyira áttekinthetetlen lesz a kód.)
Valamint további megjegyzés, hogy ha egy if-feltétel összesen csak egy egyparancsos then ágat tartalmaz, akkor szerintem sokal olvashatóbb a

parancs1 && parancs2

forma - más kérdés, hogy volt olyan főnököm, aki ezt a rövidített formát kifejezetten ellenjavallotta.

Nem "if true ; then fi" volt az eredeti kódban, ez csak egy leegyszerűsítés a lényeg miatt.
Az eredetiben nem egy sorban volt az egész. És valóban, "helyesen" így lenne: "if true ; then ; fi".

Így már tényleg csak az a hiba, ami miatt eredetileg írtam.

Az eredeti kódban pont, hogy egy komment volt a then és a fi között. Írtam is, hogy kikommenteltem azt az egy sort, ami ott volt. Tehát abban viszont nincs igazad, hogy elég egy megjegyzés a then és a fi közé:

$ if true
> then
> # fsdfsdfs
> fi
bash: szintaktikai hiba „fi” váratlan token közelében