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 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. smile

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 wink