Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/09/2016, à 04: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, à 22:42)

#2 Le 13/09/2016, à 05: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, à 20: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:~$

??
--

pingouinux a écrit :

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, à 20: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, à 21: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, à 21:17)

#6 Le 13/09/2016, à 21: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, à 22: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, à 23: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, à 03:25)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 05/10/2016, à 22: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, à 23: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