Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

SHELL condition

tlep, le samedi 19 mai 2007 à 00:34:30
Bonjour,

comment imbriquer des conditions en shell ?
Je m'explique:
if [ "$fichier" != "" -a [ ! -f "$fichier" -o ! -d "$fichier" ]];then echo "Arguments incorrects: monscript FICHIER." && exit 1;fi
J'obtiens invariablement:
bash: [: missing `]

Merci ;-)
Configuration: Linux Debian
Mozilla 1.8.1.3
Répondre à tlep  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lami20j, le samedi 19 mai 2007 à 08:59:13
Salut,

if [ test1 ] && ([ test2 ] || [ test3 ])
sinon tu peux utiliser la syntaxe
if condition1
then
  commande1
elif condition2
then
  commande3
else
   commande4
fi
lami20j
Répondre à lami20j

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le samedi 19 mai 2007 à 10:52:12
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é.
Répondre à jipicy

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tlep, le samedi 19 mai 2007 à 12:59:00
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 ?
Répondre à tlep

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le samedi 19 mai 2007 à 13:25:02
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é.
Répondre à jipicy

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tlep, le samedi 19 mai 2007 à 13:28:42
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 !!!
Répondre à tlep

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le samedi 19 mai 2007 à 13:36:42
Enlève les parenthèses, elles servent à rien.
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tlep, le samedi 19 mai 2007 à 14:00:59
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 !!!!
Répondre à tlep

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le samedi 19 mai 2007 à 14:09:44
Ben c'est normal.

La commande qui suit "||" n'est exécutée que SI la commande la précédant a renvoyé un code retour différent de "0" (zéro), autrement dit une erreur.
Et là ce n'est précisément pas le cas, étant donné que la commande "ls" a été trouvée... donc on passe au ET (&&).

;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
Répondre à jipicy

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
bipod, le samedi 19 mai 2007 à 15:11:18
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
Répondre à bipod

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
tlep, le dimanche 20 mai 2007 à 01:05:01
Merci pour tes explications !!

Les accolades fonctionnent effectivement mieux en lieu et place des parenthèses.

En revanche, ce que je ne comprends pas, c'est pourquoi (et surtout quand ??) il faut utiliser des accolades et non des parenthèses ?

Si je mets :
which prog 1>/dev/null || { echo "Vous devez préalablement installer prog." && echo "Fin du script" && exit 1; }
Ca fonctionne.
Et quand je mets :
which prog 1>/dev/null || ( echo "Vous devez préalablement installer prog." && echo "Fin du script" && exit 1; )
on tombe dans un "fork", c.a.d une sorte de "sous-programme" (si j'ai bien compris ?) dont la dernière instruction "exit" ne concerne pas le programme principal ?
Répondre à tlep

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
jipicy, le dimanche 20 mai 2007 à 10:46:19
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épondre à jipicy

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 tlep, le dimanche 20 mai 2007 à 14:36:53
Merci, c'est très clair ;-)
Répondre à tlep

Résultats pour SHELL condition

Problème condition shell imbriqué (Résolu) Bonjour, Je vais vous indiquer mon code et vous dire le message d'erreur que j'ai. #!/bin/bash HOST=`hostname` echo "1- tutu" echo "2- toto" echo "3- tata" echo "4- titi" read -p "veuillez choisir le nom de la personne : " CHOICE if [... www.commentcamarche.net/forum/affich-8134367-probleme-condition-shell-imbrique
[Script Shell] Utilisation du FOR (Résolu) Bonjour à tous, J'ai créé un shell qui a pour but d'effectuer un traitement autant de fois qu'il y a la chaine bcp dans le fichier passé en paramètre. Une condition est ajoutée afin de savoir si dans la ligne trouvée avec le mot... www.commentcamarche.net/forum/affich-2960705-script-shell-utilisation-du-for
[KSH] test argument expected (Résolu) Bonjour, l'interpréteur de shell mentionne que j'ai cette erreur... test argument expected...sauf que mes conditions sont seulement par groupe de deux variables.... mon code est à la page suivante ....... www.commentcamarche.net/forum/affich-1449441-ksh-test-argument-expected

Résultats pour SHELL condition

Guide d'utilisation du Shell pour débutantSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface... www.commentcamarche.net/faq/sujet-4801-guide-d-utilisation-du-shell-pour-debutant
[Excel] Colorer des cellules sur conditionsIl existe dans Excel des fonctions très pratiques mais peu connues et peu utilisées. Exemple : vous souhaitez qu'une cellule se colore automatiquement en rouge (ou autre mise en forme de police, de bordure, de trame) selon une condition : un... www.commentcamarche.net/faq/sujet-3975-excel-colorer-des-cellules-sur-conditions
[Shell] Tester une variable numériqueTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à... www.commentcamarche.net/faq/sujet-4605-shell-tester-une-variable-numerique

Résultats pour SHELL condition

Programmation php (Résolu)Bonjour, je debute en php j'explique mon problème , je recupere le login de la session windows par : $login=shell_exec("echo %username%"); cette commande me renvoie bien le username mais lorsque je fais une condition à l'aide d'un if... www.commentcamarche.net/forum/affich-7064995-programmation-php
Skin CS condition zero (Résolu)Salut ! J'ai telecharger quelqeus skin d'arme pour CS condition zero. Je les ai instalés ds le repertoir suivant : C:/Program Files/Steam/SteamApps/mon Pseudo/counter-strike/czero/models Voila normalement tout devrait etre normal. Seulement... www.commentcamarche.net/forum/affich-1731810-skin-cs-condition-zero
[VBA] conditions dans une cellule d'Excel (Résolu)Bonjour, j'ai un souci avec Excel et Visual Basic. Je souhaite ecrire dans la cellule d'Excel (1,1) une condition, par exemple, =9. J'ai mis la cellule en format texte pour que le = reste affiché. Je souhaiterai ensuite comparer les... www.commentcamarche.net/forum/affich-2724913-vba-conditions-dans-une-cellule-d-excel

Résultats pour SHELL condition

Télécharger SSH Secure ShellSSH secure shell for workstations est un client SSH flexible permettant de se connecter de façon sécurisée à des applications distantes. www.commentcamarche.net/telecharger/telecharger-71-ssh-secure-shell
Télécharger ShellEnhancer ShellEnchancer est un programme d'amélioration des fonctions de base de Windows. Il rend les interfaces plus stables et plus performantes. ShelleEnchancer permet notamment d'améliorer les fonctions de Alt+Tab avec TaskSwitcher. Cette fonctionnalité... www.commentcamarche.net/telecharger/telecharger-34055814-shellenhancer

Résultats pour SHELL condition

Les structures conditionnelles avec PhpQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1... www.commentcamarche.net/contents/php/phpcond.php3
Javascript - Les structures conditionnellesQu'est-ce qu'une structure conditionnelle? On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non, ce qui permet notamment de donner de l'interactivité à vos scripts. L'instruction... www.commentcamarche.net/contents/javascript/jscond.php3
Langage C - Les structures conditionnellesQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent... www.commentcamarche.net/contents/c/ccond.php3