|
|
|
|
Configuration: Linux Debian Mozilla 1.8.1.3
Salut,
if [ test1 ] && ([ test2 ] || [ test3 ])sinon tu peux utiliser la syntaxe if condition1 then commande1 elif condition2 then commande3 else commande4 filami20j |
Salut, $ a=0;b=5;if [ "$a" = 0 -a "b" = 2 -o "$b" = 5 ]; then echo ok;else echo pas ok;fi ok $ a=0;b=5;if [ "$a" = 0 -a "b" = 2 -o "$b" = 3 ]; then echo ok;else echo pas ok;fi pas ok [jp@MDK tmpfs]$:-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Salut, et merci;
Je ne comprends pas du tout ta syntaxe jipicy: a=0;b=5;if [ "$a" = 0 -a "b" = 2 -o "$b" = 3 ]; then echo ok;else echo pas ok;fi "b" est toujours égal à "b" non ? |
Oups :-((((
Ereur dans la ligne, il faut lire : if [ "$a" = 0 -a "$b" = 5 -o "$b" = 3 ]Sorry ;-) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
J'ai un autre souci avec les OU et les ET :
En ligne de commande, si j'exécute : which monprog 1>/dev/null || (echo "Vous devez préalablement installer monprog." && echo "Fin du script" && exit 1) Ca marche: j'obtiens Vous devez préalablement installer monprog. Fin du script En revanche dans un shell : #!/bin/bash which monprog 1>/dev/null || (echo "Vous devez préalablement installer monprog." && echo "Fin du script" && exit 1) echo "Suite du script" Là, les messqges s'affichent mais le script n'exit pas: Suite du script ! Je ne comprends vraiment pas !!! |
Enlève les parenthèses, elles servent à rien.
Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
J'y ai bien pensé, mais dans ce cas (sur la commande ls, installée) :
which ls 1>/dev/null || echo "Vous devez préalablement installer ls." && echo "Fin du script" && exit 1 Dans le script, çà donne : Fin du script Bref, il saute le OU, passe au ET, et exit !!!!
|
dans
cmd1 || ( cmd2 && exit ) cmd2 et l'exit sont exécutés dans un shell fils (fork) du fait des parenthèses => l'exit ne fait que sortir du processus fils qui de toute façon s'achève avec la parenthèse fermante. Sans les ( ) l'enchainement est bien celui décrit par jipicy essaye cmd1 || { cmd2 cmd3 exit } cmd4
|
Re-
Les accolades et les parenthèses permettent le regroupement de commandes. Comme expliqué par "bipod", avec des accolades, les commandes sont exécutées par le shell courant, alors qu'avec les parenthèses elles sont exécutées par un shell fils (fork). Le regroupement de commandes sert principalement à : - rediriger un ensemble de commandes vers (ou depuis) un même fichier - exécuter un ensemble de commandes en arrière-plan - conditionner l'exécution d'un ensemble de commandes Voilà un exemple qui j'espère t'aidera à mieux cerner l'emploi des accolades et des parenthèses : #! /bin/bash
echo -e "#############################"
echo -e "# Utilisation des accolades #"
echo -e "#############################"
echo -e "\nRépertoire courant : \c"
pwd
echo -e "Initialisation de la variable \"v\" :\nv=\"abc\""
v="abc"
echo -e "\nDébut de l'environnement avec accolades...\n"
{
echo -e "Réaffectation de la variable \"v\" :\nv=\"123\""
v="123"
echo -e "\nAffichage de la variable \"v\" : \c"
echo -e "$v"
echo -e "\nChangement de répertoire : "
echo -e "cd /tmp"
cd /tmp
echo -e "\nRépertoire courant : \c"
pwd
}
echo -e "\nFin de l'environnement avec accolades...\n"
echo -e "\nRépertoire courant : \c"
pwd
echo -e "\nAffichage de la variable \"v\" : \c"
echo -e "$v"
echo
unset v
cd $HOME
echo -e "Appuyez sur une touche pour continuer..."
read touche
echo -e "###############################"
echo -e "# Utilisation des parenthèses #"
echo -e "###############################"
echo -e "\nRépertoire courant : \c"
pwd
echo -e "Initialisation de la variable \"v\" :\nv=\"abc\""
v="abc"
echo -e "\nDébut de l'environnement avec parenthèses...\n"
(
echo -e "Réaffectation de la variable \"v\" :\nv=\"123\""
v="123"
echo -e "\nAffichage de la variable \"v\" : \c"
echo -e "$v"
echo -e "\nChangement de répertoire : "
echo -e "cd /tmp"
cd /tmp
echo -e "\nRépertoire courant : \c"
pwd
)
echo -e "\nFin de l'environnement avec parenthèses...\n"
echo -e "\nRépertoire courant : \c"
pwd
echo -e "\nAffichage de la variable \"v\" : \c"
echo -e "$v"
echo
exit
;-))
Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé.
|
Résultats pour SHELL condition
Résultats pour SHELL condition
Résultats pour SHELL condition
Résultats pour SHELL condition
Résultats pour SHELL condition
Résultats pour SHELL condition