#1 Le 13/09/2016, à 03:28
- Compte anonymisé
[Résolu]Mode d'écriture de la condition if
Bonjour ,
Ce code pose probleme mais je comprend pas pourquoi ?
if [ "$answer" == 'y' ]; then echo ok;
elif [ "$answer" == 'o' ]; then echo ok;
fi
sh: 7: [: unexpected operator
sh: 8: [: unexpected operator
Dernière modification par Compte anonymisé (Le 05/10/2016, à 21:42)
#2 Le 13/09/2016, à 04:10
- pingouinux
Re : [Résolu]Mode d'écriture de la condition if
Bonjour,
C'est une syntaxe bash. Si tu veux exécuter la séquence en sh :
if [ "$answer" = 'y' ]; then echo ok;
elif [ "$answer" = 'o' ]; then echo ok;
fi
Hors ligne
#3 Le 13/09/2016, à 19:43
- Compte anonymisé
Re : [Résolu]Mode d'écriture de la condition if
Le script est pourtant de type bash .
La commande s'éxécute correctement dans le terminal .
master@sparkylinux:~$ answer=y
master@sparkylinux:~$ if [ "$answer" == 'y' ]; then echo ok; fi
ok
master@sparkylinux:~$
??
--
Si tu veux exécuter la séquence en sh
"sh" c'est l'abréviation de shell , ce qui revient par défaut au bash non ?
#4 Le 13/09/2016, à 19:55
- pingouinux
Re : [Résolu]Mode d'écriture de la condition if
"sh" c'est l'abréviation de shell , ce qui revient par défaut au bash non ?
Non.
bash = Bourne-Again SHell
Dans le terminal, tu es sans doute en bash. Quelle est la première ligne de ton script, et comment le lances-tu ?
Hors ligne
#5 Le 13/09/2016, à 20:15
- Compte anonymisé
Re : [Résolu]Mode d'écriture de la condition if
Je voulais dire que lorsque l'on éxécute un script avec " #!/bin/sh" , cela fait appel au shell par défault = bash ?
#!/bin/bash
{ printf "do-release-upgrade ? [y/n]";
read answer
}
if [ "$answer" == 'y' ]; then echo ok;
elif [ "$answer" == 'o' ]; then echo ok;
fi
master@sparkylinux:~$ sh Bureau/Finalize_ubuntu-12.sh
do-release-upgrade ? [y/n]
Bureau/Finalize_ubuntu-12.sh: 7: [: unexpected operator
Bureau/Finalize_ubuntu-12.sh: 8: [: unexpected operator
master@sparkylinux:~$
Ça marche avec " bash Bureau/Finalize_ubuntu-12.sh "
Dernière modification par Compte anonymisé (Le 13/09/2016, à 20:17)
#6 Le 13/09/2016, à 20:39
- Compte anonymisé
Re : [Résolu]Mode d'écriture de la condition if
Mais pourquoi ça ne marche pas avec "sh" a l'éxécution ?
#7 Le 13/09/2016, à 21:33
- pingouinux
Re : [Résolu]Mode d'écriture de la condition if
Mais pourquoi ça ne marche pas avec "sh" a l'éxécution ?
Parce que, comme je te l'ai dit en #2, tu utilises une syntaxe bash qui n'est pas compatible avec sh.
Hors ligne
#8 Le 13/09/2016, à 22:36
- Watael
Re : [Résolu]Mode d'écriture de la condition if
voilà une bonne raison de pas utiliser le double signe égal en dehors des crochets doubles !
pour savoir ce vers quoi pointe /bin/sh :
readlink -f $(which sh)
d'après ce que je vois, ça pointe vers /bin/dash, qui est, si je me souviens bien, une adaptation pour/par Debian de l'Almquist Shell,lui-même une réécriture du Bourne Shell (à ne pas confondre avec le Bourne Again Shell !)*.
* oui, je sais : le neveu du mari de la belle-mère de la cousine germaine... les histoires de famille !
Dernière modification par Watael (Le 14/09/2016, à 02:25)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 05/10/2016, à 21:41
- Compte anonymisé
Re : [Résolu]Mode d'écriture de la condition if
La syntaxe du bash est plutôt compliqué par rapport à celle de dash , donc .
Merci .
#10 Le 05/10/2016, à 22:04
- Watael
Re : [Résolu]Mode d'écriture de la condition if
je ne dirais pas « plus compliqué », car c'est la même : les deux sont conformes à la norme POSIX, qui définit le minimum de ce qu'un shell doit fournir.
Bash comporte des fonctionnalités supplémentaires.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne