#1 Le 24/03/2014, à 19:39
- abelthorne
[résolu] Tests conditionnels sh et bash
Bonjour,
En faisant des tests et en me renseignant, je constate qu'avec bash, je peux faire des tests de ce genre :
if [ -r machin] then...
if [[ `ma commande` == "true" ]] then...
En revanche, si j'utilise sh, le premier test est encore valable mais il ne reconnaît pas l'opérateur [[ et si je mets un seul crochet il attend apparemment une option spécifique, je ne peux pas tester le résultat de la commande comme je le fais avec bash sur le deuxième test.
Comment est-ce que j'adapte mon deuxième test pour qu'il fonctionne avec sh ? Je trouve surtout de la doc sur bash...
Dernière modification par abelthorne (Le 24/03/2014, à 20:08)
Hors ligne
#2 Le 24/03/2014, à 19:54
- pingouinux
Re : [résolu] Tests conditionnels sh et bash
Bonjour,
Pour tester si ma_commande renvoie la chaîne de caractères true
if [ "`ma_commande`" = "true" ]; then...
Pour tester si elle se termine sans erreur
if ma_commande; then...
Dernière modification par pingouinux (Le 24/03/2014, à 19:57)
Hors ligne
#3 Le 24/03/2014, à 20:00
- abelthorne
Re : [résolu] Tests conditionnels sh et bash
Ah, c'est donc les guillemets qu'il me manquait (et un seul égal) ? Je vais tester ça, merci.
EDIT : super, ça marche.
Dernière modification par abelthorne (Le 24/03/2014, à 20:08)
Hors ligne
#4 Le 24/03/2014, à 20:08
- pingouinux
Re : [résolu] Tests conditionnels sh et bash
Les guillemets ne sont utiles que si la commande ne renvoie rien.
= et == sont équivalents.
Il manquait le ";" avant then.
Il faudrait voir le message d'erreur de l'exemple qui ne marchait pas.
Correction : Suite au message de Watael #5
Dernière modification par pingouinux (Le 24/03/2014, à 21:03)
Hors ligne
#5 Le 24/03/2014, à 20:53
- Watael
Re : [résolu] Tests conditionnels sh et bash
salut,
dash n'aime pas du tout ==
$ [ "toto" == "toto" ] && echo ok || echo ko
dash: 1: [: 10: unexpected operator
ko
:(
Dernière modification par Watael (Le 24/03/2014, à 20:53)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 24/03/2014, à 21:02
- pingouinux
Re : [résolu] Tests conditionnels sh et bash
Exact. Je me suis trompé en lançant mon test en bash. Je corrige mon message #4.
Hors ligne
#7 Le 24/03/2014, à 21:34
- abelthorne
Re : [résolu] Tests conditionnels sh et bash
Est-ce que le point-virgule est conseillé sachant que j'avais écrit mon exemple à la va-vite pour qu'il soit plus lisible (vu que mon problème concernait les crochets) ? Habituellement je fais plutôt ma syntaxe sur plusieurs lignes :
if condition
then machin
fi
Pour être plus complet, voici mon test qui marchait avec bash et posait problème avec sh :
if [[ `gsettings get org.gnome.desktop.background show-desktop-icons` == "false" ]]
then gsettings set org.gnome.desktop.background show-desktop-icons true
fi
Comme ça j'avais une erreur à propos de "[[" et si je mettais des guillemets simples, j'avais une autre erreur. Suite à ton message, j'ai remplacé par ça qui a l'air de marcher :
if [ "`gsettings get org.gnome.desktop.background show-desktop-icons`" = "false" ]
then gsettings set org.gnome.desktop.background show-desktop-icons true
fi
Dernière modification par abelthorne (Le 24/03/2014, à 21:40)
Hors ligne
#8 Le 24/03/2014, à 21:44
- pingouinux
Re : [résolu] Tests conditionnels sh et bash
Tu peux faire ceci
if condition
then machin
fi
ou cela
if condition; then machin; fi
Hors ligne
#9 Le 24/03/2014, à 22:16
- abelthorne
Re : [résolu] Tests conditionnels sh et bash
Ok.
Hors ligne
#10 Le 24/03/2014, à 23:55
- Compte supprimé
Re : [résolu] Tests conditionnels sh et bash
Il faut juste considérer les points-virgules comme des sauts de lignes