Bonjour,
Je ne comprends pas cette manière de comparer avec -z ? On compare avec rien ?????
Merci d'avance pour votre aide éventuelleCode:
1
2
3 verification=$(screen -ls | grep 'Name'); if [ -z "$verification" ] then .......
Version imprimable
Bonjour,
Je ne comprends pas cette manière de comparer avec -z ? On compare avec rien ?????
Merci d'avance pour votre aide éventuelleCode:
1
2
3 verification=$(screen -ls | grep 'Name'); if [ -z "$verification" ] then .......
Citation:
Envoyé par help test | grep -- -z
Si tu avais été chercher dans la documentation de ton shell (man sh|bash|ksh...), tu aurais lu que -z est un opérateur unaire (à un seul opérande) qui retourne vrai si la longueur de la chaîne testée est égale à 0 (chaîne vide).
Bonjour :coucou:
Encore une fois : Les crochets sont un raccourci pour la commande test.
Ta condition est équivalente à:
Nulle comparaison dans ceci.Code:if test -z "$verification"
D'ailleurs, si tu veux mon avis, il faut résumer tout ce bazar (tes 3 lignes de code) par :
Code:
1
2 if screen -ls | grep -q 'Name' then
Oui. Avec la plus-value que, si ton fichier fait 1Go, grep sortira à la première occurrence de 'Name', alors que tout le fichier sera parcouru pour écrire les lignes dans ta variable $verification, avec le procédé du premier message. Gain de temps, d'efficience, et de clarté.
S'il ne trouve pas l'occurence 'Name', le exit que provoque le -q empêchera-t-il d'aller dans le "else" pour sortir ?Citation:
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit
immediately with zero status if any match is found, even if an
error was detected. Also see the -s or --no-messages option.
Code:
1
2
3
4
5
6
7 # VERIFICATION if screen -ls | grep -q 'Name' then echo "je relance..."; else echo "il y a une erreur"; fi
"grep" donne à "if" un code retour. Ici, 0 (trouvé) ou 1 (pas trouvé). Le "if" fait le "then", si 0, et le "else", si 1.
Dans ton cas, si 'Name' n'est pas trouvé, "grep" renvoie 1 à "if" qui exécute la clause "else".Code:
1
2
3
4
5
6 $ ls rip0.txt rip0.txt $ ls |grep -q rip; echo $? 0 $ ls |grep -q tata; echo $? 1
ls étant pris comme exemple d'une commande quelconque (sauf ls) qui affiche des données.
on aurait aussi bien pu faire un simple echo pour passer une sortie à grep.
il faut surtout ne pas reproduire cette pratique !