Não sei por que isso está dando um erro de sintaxe. Alguma ideia?
#!/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
Quando corro, recebo:
./get.sh: line 7: syntax error near unexpected token `then"
./get.sh: line 7: ` if[ `date +%H` -lt 20 ] ; then "
Respostas:
4 para resposta № 1A razão pela qual este é um erro de sintaxe é que [
não é parte da sintaxe do shell; na verdade, é um comando. Originalmente, era apenas um link simbólico para o test
comando. Ainda é, mas também é um comando embutido no bash e em outros shells derivados de Bourne.
if
é uma palavra-chave shell, mas o shell vê if[
, não if
. Porque não vi um if
, ele não sabe o que fazer quando vê then
. (Na verdade, ele sabe exatamente o que fazer: imprimir uma mensagem de erro de sintaxe.)
...
Um pouco de experimentação mostra que não é tão simples quanto eu pensava. Tentei criar um comando chamado if[
e colocá-lo em um diretório no meu $PATH
. Quando eu digito apenas if[
no prompt, o shell pede mais entrada. Na verdade, não sei o que ele está procurando, mas aparentemente o [
personagem é especialmente tratado pelo shell. A casca simplesmente não se divide if[
no if
palavra-chave e o [
(como você pode razoavelmente esperar com base em como outras linguagens funcionam). (Se eu realmente quisesse executar esse comando, poderia digitar if[
ou "if["
- ou dê a ele um nome lógico em primeiro lugar.
Em qualquer caso, essa última parte provavelmente não importa; adicionar um caractere de espaço resolverá o problema.
1 para resposta № 2
Adicione espaço antes [
if [ `date +%H` -lt 20 ]
1 para resposta № 3
if[ `date +%H` -lt 20 ] ;
você precisa colocar um espaço depois if
if [ `date +%H` -lt 20 ] ;