Je cherche à tester si le retour d'un grep est vide, je fait ça comme suit :
#!/bin/sh
test=`cat vm-state | grep on`
if [ -z "$test" ] || [ $test = " " ] || [ $test = "" ]
then
echo "la chaine est vide"
else
echo "la chaine n'est pas vide : $test"
fi
Dans le cas ou rien n'est retourné par le grep ça fonctionne, par contre, dans le cas ou le grep trouve des correspondances, j'obtiens deux messages d'erreur ( [: too many arguments )
Je m'y prends mal ?
# en fait non ..
Posté par Aka . Évalué à 1.
if [ -z "$test" ]
Etrange, il me semblais que ça ne marchais pas auparavant ..
[^] # Re: en fait non ..
Posté par mrlem (site web personnel) . Évalué à 1.
[^] # Re: en fait non ..
Posté par mrlem (site web personnel) . Évalué à 2.
[^] # Re: en fait non .. => Pour info
Posté par Steve Azriel . Évalué à 1.
L'opérateur "-z" est le bon :-)
Mais si dans le résultat de ta commande tu as des caractères de type "[[:blank:]]" (espace, tabulation, ...) ou saut(s) de ligne, il te faudrait aussi les retirer, par exemple en amont avec un | egrep -v '^$|^[[:blank:]]+$' (ou tout autre expression egrep :P).
Pour info, je crois que les erreurs de tes premières expériences viennent des autres tests:
En effet, quand le contenu de "test" n'est pas vide, il peut être formé de plusieurs "mots" (au sens plusieurs chaînes de caractères séparées par des caractères type [[:blank:]] ou saut(s) de ligne).
Qui dit "mots" non "quotés" dit arguments d'appel de la commande (et oui '[' est une commande :P), d'où le "too many arguments".
Un petit conseil: utiliser une option de debug (sous Bash & co, c'est "-x" ce qui donne bash -x script.sh à l'appel).
C'est verbeux, mais quand on s'y habitue (surtout à la manière dont disparaisse les fameux "quotes" à l'affichage :P), c'est pratique.
Et voilà !
Cdlt,
PS: Dernière truc, encore plus sioux, utiliser egrep pour le test.
C'est gourmand, c'est ce que l'on veut, mais ça le fait aussi :D
[^] # Re: en fait non .. => Pour info
Posté par Aka . Évalué à 1.
Sinon, je ne pensais pas à tester les '[[:blank:]]" et autres joyeusetées, je le saurais pour la suite !
Merci d'avoir pris du temps pour m'expliquer tout ca !
[^] # Re: en fait non ..
Posté par totof2000 . Évalué à 3.
Sous Solaris 8:
EXIT STATUS
The following exit values are returned:
0 One or more matches were found.
1 No matches were found.
2 Syntax errors or inaccessible files (even if matches
were found).
# argument -q (quiet) de grep
Posté par omnikron . Évalué à 4.
grep -q on vm-state
if [ $? == 0 ]
then
echo "ligne trouvee"
else
echo "ligne non trouvee"
fi
[^] # Re: argument -q (quiet) de grep
Posté par Aka . Évalué à 2.
J'avais pas été faire un tour par le manpage de grep, ya tout plein d'options interessantes, c'est super pratique !
[^] # Re: argument -q (quiet) de grep
Posté par Aka . Évalué à 1.
Quelque chose dans ce style (mais évidement pas comme ca ..):
if [ `grep -q $1 vm-state` == 0 ]
then
echo "ligne trouvée"
else
echo "ligne non trouvée"
fi
[^] # Re: argument -q (quiet) de grep
Posté par omnikron . Évalué à 1.
if [ `grep -c on $1` == 0 ]
then
echo "ligne non trouvee"
else
echo "ligne trouvee"
fi
Soit tu fais qqchose comme ça :
trouve() {
echo "trouvee"
}
nontrouve() {
echo "non trouvee"
}
grep -q on $1 || nontrouve
grep -q on $1 && trouve
Les fonctions doivent être définies avant les appels.
[^] # Re: argument -q (quiet) de grep
Posté par Pascal Terjan (site web personnel) . Évalué à 5.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.