Som v rozpakoch, prečo to spôsobuje chybu syntaxe. Máte nejaké myšlienky?
#!/bin/bash
if [ `date +%H` -lt 11 ] ; then exit 0;
fi
if [ `date +%H` -gt 14 ] ; then
if[ `date +%H` -lt 20 ] ; then # <--- this line is the culprit, it seems
exit 0;
fi
fi
Po spustení dostanem:
./get.sh: line 7: syntax error near unexpected token `then"
./get.sh: line 7: ` if[ `date +%H` -lt 20 ] ; then "
odpovede:
4 pre odpoveď č. 1Dôvod, že ide o syntaktickú chybu, je ten [
nie je súčasťou syntaxe shellu; je to vlastne príkaz. Pôvodne to bol iba symbolický odkaz na test
príkaz. Stále je, ale je to aj zabudovaný príkaz v bashe a iných mušliach odvodených od Bourneovej.
if
je kľúčové slovo shellu, ale shell vidí if[
, nie if
. Pretože to nebolo vidieť if
, nevie, čo má robiť, keď vidí then
. (Vlastne presne vie, čo má robiť: vytlačiť chybové hlásenie o syntaxi.)
...
Trochu experimentovania ukazuje, že to nie je také jednoduché, ako som si myslel. Skúšal som vytvoriť príkaz s názvom if[
a vložením do adresára v mojom $PATH
. Keď píšem len if[
po výzve shell požiada o viac informácií. Vlastne neviem, čo hľadá, ale zjavne [
znak je špeciálne upravený škrupinou. Škrupina sa jednoducho nerozdelí if[
do if
kľúčové slovo a [
príkaz (ako môžete rozumne očakávať na základe toho, ako fungujú iné jazyky). (Ak by som naozaj chcel vykonať tento príkaz, mohol by som napísať if[
alebo "if["
- alebo mu v prvom rade dať rozumné meno.
V každom prípade táto posledná časť pravdepodobne nevadí; pridaním medzery sa problém vyrieši.
1 pre odpoveď č. 2
Predtým pridajte medzeru [
if [ `date +%H` -lt 20 ]
1 pre odpoveď č. 3
if[ `date +%H` -lt 20 ] ;
po ňom musíte umiestniť medzeru if
if [ `date +%H` -lt 20 ] ;