Je ne comprends pas pourquoi cela donne une erreur de syntaxe. Des idées?
#!/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
Quand je cours, je reçois:
./get.sh: line 7: syntax error near unexpected token `then"
./get.sh: line 7: ` if[ `date +%H` -lt 20 ] ; then "
Réponses:
4 pour la réponse № 1La raison pour laquelle il s’agit d’une erreur de syntaxe est que [
Cela ne fait pas partie de la syntaxe du shell; c’est en fait une commande. À l’origine, c’était juste un lien symbolique vers test
commander. C’est toujours le cas, mais c’est aussi une commande intégrée dans bash et d’autres shells dérivés de Bourne.
if
est un mot-clé shell, mais le shell voit if[
, ne pas if
. Parce qu'il n'a pas vu un if
, il ne sait pas quoi faire quand il voit then
. (En fait, il sait exactement quoi faire: affiche un message d'erreur de syntaxe.)
...
Un peu d’expérimentation montre que ce n’est pas aussi simple que je le pensais. J'ai essayé de créer une commande if[
et le mettre dans un répertoire dans mon $PATH
. Quand je tape juste if[
à l'invite, le shell demande plus d'informations. En fait, je ne sais pas ce qu’il cherche, mais apparemment le [
le caractère est spécialement traité par la coquille. Le shell ne se divise pas if[
dans le if
mot clé et le [
commande (comme vous pouvez raisonnablement vous attendre en fonction du fonctionnement des autres langues) (Si je voulais vraiment exécuter cette commande, je pourrais taper if[
ou "if["
- ou lui donner un nom sain d'esprit en premier lieu.
Dans tous les cas, cette dernière partie n’a probablement pas d’importance; l’ajout d’un espace permettra de résoudre le problème.
1 pour la réponse № 2
Ajouter de l'espace avant [
if [ `date +%H` -lt 20 ]
1 pour la réponse № 3
if[ `date +%H` -lt 20 ] ;
vous devez placer un espace après if
if [ `date +%H` -lt 20 ] ;