[Bash] S'arrêter après le 1er test s'il est non rempli ?
Résolu/Fermé
Swiss Knight
Messages postés
1956
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
27 juillet 2016
-
Modifié par Swiss Knight le 20/04/2013 à 13:45
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 - 20 avril 2013 à 14:29
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 - 20 avril 2013 à 14:29
A voir également:
- [Bash] S'arrêter après le 1er test s'il est non rempli ?
- Test performance pc - Guide
- Test composant pc - Guide
- Redmi note 13 5g test - Accueil - Téléphones
- Test performance pc gratuit - Accueil - Utilitaires
- Test hdd - Télécharger - Informations & Diagnostic
4 réponses
mamiemando
Messages postés
33333
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 octobre 2024
7 800
20 avril 2013 à 13:52
20 avril 2013 à 13:52
Au pire tu fais deux if imbriqués. Moi j'aurais écrit :
En effet :
... donne :
Ceci dit, si tu initialises MaVar avec une chaîne qui n'est pas une valeur numérique, ça ne va pas marcher. Mais dans ce cas tu es obligé de faire un test.
https://stackoverflow.com/questions/309745/check-that-a-variable-is-a-number-in-unix-shell
Bonne chance
if [ "${MaVar}" ] && [ "${MaVar}" -gt 20 ] then echo "true" else echo "false" fi
En effet :
if [ "${MaVar}" ] && [ "${MaVar}" -gt 20 ] then echo "1) true" else echo "1) false" fi MaVar=22 if [ "${MaVar}" ] && [ "${MaVar}" -gt 20 ] then echo "2) true" else echo "2) false" fi MaVar=12 if [ "${MaVar}" ] && [ "${MaVar}" -gt 20 ] then echo "3) true" else echo "3) false" fi
... donne :
1) false 2) true 3) false
Ceci dit, si tu initialises MaVar avec une chaîne qui n'est pas une valeur numérique, ça ne va pas marcher. Mais dans ce cas tu es obligé de faire un test.
https://stackoverflow.com/questions/309745/check-that-a-variable-is-a-number-in-unix-shell
Bonne chance
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
20 avril 2013 à 14:05
20 avril 2013 à 14:05
Salut,
Syntaxe : ${var:?'Message Erreur'}
Syntaxe : ${var:?'Message Erreur'}
$ MaVar="22" $ if [ ${MaVar:?'Attention ! Variable non définie.' } -gt 20 ]; then echo "coucou"; else echo "pas coucou"; fi coucou $ MaVar="2" $ if [ ${MaVar:?'Attention ! Variable non définie.' } -gt 20 ]; then echo "coucou"; else echo "pas coucou"; fi pas coucou $ unset MaVar $ if [ ${MaVar:?'Attention ! Variable non définie.' } -gt 20 ]; then echo "coucou"; else echo "pas coucou"; fi bash: MaVar: Attention ! Variable non définie. $
Swiss Knight
Messages postés
1956
Date d'inscription
samedi 22 novembre 2008
Statut
Membre
Dernière intervention
27 juillet 2016
110
Modifié par Swiss Knight le 20/04/2013 à 15:06
Modifié par Swiss Knight le 20/04/2013 à 15:06
Ouais merci, je comprends pas encore tout :
retourne : false
retourne : true
retourne : false
retourne : false
Les guillemets jouent donc un rôle non négligeables mais je ne comprends pas bien pourquoi ; ma variable existe mais est vide. :S
Je me suis trompé avant aussi ; j'ai interverti le comportement entre un et deux signes &
Le double && permet de court-circuiter le test si la première condition n'est pas vérifiée justement, donc moi il me la vérifiait alors que je pensais qu'elle ne l'était pas.
J'utilisais le -n sans les guillemets, donc il me retourne true ci-dessus ! Et pas de bol; c'est la seule des quatre où true est retourné. Les trois autres fonctionnent. Et au passage j'ai découvert l'utilisation des doubles crochets : [[ comme ceci :
qui me retourne : false aussi !
Donc ici, je ne sais pas pourquoi, mais sans les guillemets avec le test -n, ça marche sans erreur tandis que séparés par de simples crochets, ces deux tests me retournent une erreur. Incompréhensible pour moi.
qui me retournait donc : false + l'erreur
Merci !
"Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement." -A. Einsten-
if [ -n "${MaVar}" ]; then echo "true"; else echo "false"; fi
retourne : false
if [ -n ${MaVar} ]; then echo "true"; else echo "false"; fi
retourne : true
if [ "${MaVar}" ]; then echo "true"; else echo "false"; fi
retourne : false
if [ ${MaVar} ]; then echo "true"; else echo "false"; fi
retourne : false
Les guillemets jouent donc un rôle non négligeables mais je ne comprends pas bien pourquoi ; ma variable existe mais est vide. :S
Je me suis trompé avant aussi ; j'ai interverti le comportement entre un et deux signes &
Le double && permet de court-circuiter le test si la première condition n'est pas vérifiée justement, donc moi il me la vérifiait alors que je pensais qu'elle ne l'était pas.
J'utilisais le -n sans les guillemets, donc il me retourne true ci-dessus ! Et pas de bol; c'est la seule des quatre où true est retourné. Les trois autres fonctionnent. Et au passage j'ai découvert l'utilisation des doubles crochets : [[ comme ceci :
if [[ -n ${MaVar} && $ {MaVar} -gt 20 ]]; then echo "true"; else echo "false"; fi;
qui me retourne : false aussi !
Donc ici, je ne sais pas pourquoi, mais sans les guillemets avec le test -n, ça marche sans erreur tandis que séparés par de simples crochets, ces deux tests me retournent une erreur. Incompréhensible pour moi.
if [ -n ${MaVar} ] && [ ${MaVar} -gt 20 ]; then echo "true"; else echo "false"; fi;
qui me retournait donc : false + l'erreur
Merci !
"Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement." -A. Einsten-
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
20 avril 2013 à 14:29
20 avril 2013 à 14:29
hello
séparer le test
séparer le test
[[ -n ${MaVar} ]] && if [ ${MaVar} -gt 20 ]; then echo "coucou"; else echo "pas coucou"; fi;