Expert en Grep\Egrep ?
Résolu/Fermé
A voir également:
- Expert en Grep\Egrep ?
- Grep plusieurs mots ✓ - Forum Linux / Unix
- Expert casino telegram - Forum Vos droits sur internet
- Bernard l'expert ✓ - Forum Vos droits sur internet
- Anagramme expert - Forum Logiciels
- Expert cpu - Télécharger - Informations & Diagnostic
16 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 14:53
5 mars 2009 à 14:53
Salut,
Un truc du genre :
;-))
Un truc du genre :
while read fich do ps -e | grep "$fich" >/dev/null if [ "$?" = 1 ] then echo "$fich n'est pas en service" fi done < ma_liste_de_processusPas testé...
;-))
Salut Jipicy !
Tout d'abord, merci pour ta réponse !
J'ai utilisé ton code dans une boucle FOR (car je suis plus à l'aise), le tout sur une seule ligne (c'est une prérogative). Mais j'ai le message suivant :
ksh: syntax error: `done' unexpected
Vois-tu pourquoi il ne veut pas de mon done ? Voici ma ligne de commande :
for n in xntpd uxpwmgr uxgpw sendmail; do ps -e | grep n >/dev/null; if [ "$?" = 1 ] Then echo "$n n'est pas en service" fi; done;
Merci encore et bonne fin de semaine.
Tout d'abord, merci pour ta réponse !
J'ai utilisé ton code dans une boucle FOR (car je suis plus à l'aise), le tout sur une seule ligne (c'est une prérogative). Mais j'ai le message suivant :
ksh: syntax error: `done' unexpected
Vois-tu pourquoi il ne veut pas de mon done ? Voici ma ligne de commande :
for n in xntpd uxpwmgr uxgpw sendmail; do ps -e | grep n >/dev/null; if [ "$?" = 1 ] Then echo "$n n'est pas en service" fi; done;
Merci encore et bonne fin de semaine.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 16:57
5 mars 2009 à 16:57
Il faut un "point virgule" entre le crochet fermant du test et le then ainsi qu'avant le "fi" ;
if [ "$?" = 1 ] ; Then blablabla ; fi;-))
J'ai mis la ligne suivante mais maintenant j'ai le message :
ksh: syntax error: `fi' unexpected
for n in xntpd uxpwmgr uxgpw uxfx; do ps -e | grep n >/dev/null; if [ "$?" = 1 ] ; Then echo "$n n'est pas en service" ; fi ; done;
Il se fiche de moi non ? :)
Merci encore pour ton aide
ksh: syntax error: `fi' unexpected
for n in xntpd uxpwmgr uxgpw uxfx; do ps -e | grep n >/dev/null; if [ "$?" = 1 ] ; Then echo "$n n'est pas en service" ; fi ; done;
Il se fiche de moi non ? :)
Merci encore pour ton aide
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 17:27
5 mars 2009 à 17:27
Oups... c'est "then" et non pas Then ;-\
Haaan bien vu !
Bon là ça fonctionne !!
Par contre ça me retourne rien, pourtant j'ai mis de tester "toto" comme processus mais il me renvoi le prompt sans me dire que toto n'est pas en service...
$ for n in xntpd uxpwmgr toto uxgpw uxfx; do ps -e | grep n >/dev/null; if [ "$?" = 1 ] ; then echo "$n n'est pas en service" ; fi ; done;
$
Tu vois d'où ça peut venir ? Sinon, elle veut dire quoi la condition du IF ?
Merci beaucoup pour ton aide en tout cas.
Bon là ça fonctionne !!
Par contre ça me retourne rien, pourtant j'ai mis de tester "toto" comme processus mais il me renvoi le prompt sans me dire que toto n'est pas en service...
$ for n in xntpd uxpwmgr toto uxgpw uxfx; do ps -e | grep n >/dev/null; if [ "$?" = 1 ] ; then echo "$n n'est pas en service" ; fi ; done;
$
Tu vois d'où ça peut venir ? Sinon, elle veut dire quoi la condition du IF ?
Merci beaucoup pour ton aide en tout cas.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 17:48
5 mars 2009 à 17:48
Change le "ps -e" par "do echo "$n" | grep 'n' >/dev/null;"
Le if teste la valeur du code de retour (contenu dans la variable "$?") de la dernière commande exécutée, qui doit être égal à "0" (zéro) si la commande a réussi (dans ton cas ça revient à dire que le grep a bien trouvé un "n" dans le nom du processus) ou égal à "1" (un) si la commande a échoué (pas de "n" dans le nom du processus).
Le if teste la valeur du code de retour (contenu dans la variable "$?") de la dernière commande exécutée, qui doit être égal à "0" (zéro) si la commande a réussi (dans ton cas ça revient à dire que le grep a bien trouvé un "n" dans le nom du processus) ou égal à "1" (un) si la commande a échoué (pas de "n" dans le nom du processus).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour l'explication.
Et bien y'a du mieux ! J'ai lancé la commande avec une 15aine de noms et j'ai eu 3 réponses :
uxfw n'est pas en service
syslogd n'est pas en service
toto n'est pas en service
Pourtant quand je test uxfw, il le trouve bien :
$ ps -e | grep uxfw
20215 ? 15:54 uxfw
$ ps -e | grep sendmail
1936 ? 0:00 sendmail
$
C'est bizare quand même
Et bien y'a du mieux ! J'ai lancé la commande avec une 15aine de noms et j'ai eu 3 réponses :
uxfw n'est pas en service
syslogd n'est pas en service
toto n'est pas en service
Pourtant quand je test uxfw, il le trouve bien :
$ ps -e | grep uxfw
20215 ? 15:54 uxfw
$ ps -e | grep sendmail
1936 ? 0:00 sendmail
$
C'est bizare quand même
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 18:14
5 mars 2009 à 18:14
Lance ta ligne de commande en la faisant précéder de "set -xv;" et affiche le résultat...
PS. "set -" pour revenir à la normale
PS. "set -" pour revenir à la normale
Voilà :
$ set -xv ps -e | grep uxfw
set -xv ps -e | grep uxfw
+ grep uxfw
+ set -xv ps -e
$ set -xv ps -e | grep sendmail
set -xv ps -e | grep sendmail
+ grep sendmail
+ set -xv ps -e
$ set -xv ps -e | grep toto
set -xv ps -e | grep toto
+ grep toto
+ set -xv ps -e
$
$ set -xv ps -e | grep uxfw
set -xv ps -e | grep uxfw
+ grep uxfw
+ set -xv ps -e
$ set -xv ps -e | grep sendmail
set -xv ps -e | grep sendmail
+ grep sendmail
+ set -xv ps -e
$ set -xv ps -e | grep toto
set -xv ps -e | grep toto
+ grep toto
+ set -xv ps -e
$
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 18:27
5 mars 2009 à 18:27
Je voulais dire à rajouter devant ta commande avec la boucle et les if...
$ set -xv ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do echo "$n" | grep 'n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
+ grep n
+ echo xntpd
+ 1> /dev/null
+ [ 0 = 1 ]
+ grep n
+ echo uxpwmgr
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxpwmgr
uxpwmgr
+ grep n
+ echo uxgpw
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxgpw
uxgpw
+ grep n
+ echo toto
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo toto
toto
+ grep n
+ echo uxfx
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxfx
uxfx
+ grep n
+ echo sendmail
+ 1> /dev/null
+ [ 0 = 1 ]
$
+ grep n
+ echo xntpd
+ 1> /dev/null
+ [ 0 = 1 ]
+ grep n
+ echo uxpwmgr
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxpwmgr
uxpwmgr
+ grep n
+ echo uxgpw
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxgpw
uxgpw
+ grep n
+ echo toto
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo toto
toto
+ grep n
+ echo uxfx
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxfx
uxfx
+ grep n
+ echo sendmail
+ 1> /dev/null
+ [ 0 = 1 ]
$
Et voici le résultat normal avec cette ligne de commande
$ for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do echo "$n" | grep 'n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
uxpwmgr n'est pas en service
uxgpw n'est pas en service
toto n'est pas en service
uxfx n'est pas en service
$
$ for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do echo "$n" | grep 'n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
uxpwmgr n'est pas en service
uxgpw n'est pas en service
toto n'est pas en service
uxfx n'est pas en service
$
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 18:38
5 mars 2009 à 18:38
grep 'n'
Il manque le signe "$" :
Il manque le signe "$" :
grep '$n'
Franchement merci pour ta patience !
$ set -xv ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do echo "$n" | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
+ grep $n
+ echo xntpd
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo xntpd
xntpd
+ grep $n
+ echo uxpwmgr
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxpwmgr
uxpwmgr
+ grep $n
+ echo uxgpw
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxgpw
uxgpw
+ grep $n
+ echo toto
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo toto
toto
+ grep $n
+ echo uxfx
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxfx
uxfx
+ grep $n
+ echo sendmail
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo sendmail
sendmail
$
et le résultat :
$ for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do echo "$n" | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
xntpd
uxpwmgr
uxgpw
toto
uxfx
sendmail
$ set -xv ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do echo "$n" | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
+ grep $n
+ echo xntpd
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo xntpd
xntpd
+ grep $n
+ echo uxpwmgr
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxpwmgr
uxpwmgr
+ grep $n
+ echo uxgpw
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxgpw
uxgpw
+ grep $n
+ echo toto
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo toto
toto
+ grep $n
+ echo uxfx
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxfx
uxfx
+ grep $n
+ echo sendmail
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo sendmail
sendmail
$
et le résultat :
$ for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do echo "$n" | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
xntpd
uxpwmgr
uxgpw
toto
uxfx
sendmail
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 18:47
5 mars 2009 à 18:47
Change le echo par "ps -e" maintenant...
$ set -xv ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do ps -e | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
set -xv ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do ps -e | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
+ set -xv
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo xntpd
xntpd
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxpwmgr
uxpwmgr
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxgpw
uxgpw
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo toto
toto
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxfx
uxfx
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo sendmail
sendmail
$ set - ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do ps -e | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
set - ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do ps -e | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
xntpd
uxpwmgr
uxgpw
toto
uxfx
sendmail
$
set -xv ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do ps -e | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
+ set -xv
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo xntpd
xntpd
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxpwmgr
uxpwmgr
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxgpw
uxgpw
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo toto
toto
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo uxfx
uxfx
+ grep $n
+ ps -e
+ 1> /dev/null
+ [ 1 = 1 ]
+ echo sendmail
sendmail
$ set - ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do ps -e | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
set - ; for n in xntpd uxpwmgr uxgpw toto uxfx sendmail ; do ps -e | grep '$n' >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done;
xntpd
uxpwmgr
uxgpw
toto
uxfx
sendmail
$
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mars 2009 à 18:57
5 mars 2009 à 18:57
Effectivement y'a un os si tous ces processus tournent ;-((
Bon affiche :
Bon affiche :
ps -e | grep sendmail; echo $? ps -e | grep toto; echo $?
$ ps -e | grep sendmail; echo $?
1936 ? 0:00 sendmail
0
$ ps -e | grep toto; echo $?
1
$ ps -e | grep uxfw; echo $?
20215 ? 15:55 uxfw
0
$
J'ai mis uxfw car il était affiché et pourtant le process existe.
1936 ? 0:00 sendmail
0
$ ps -e | grep toto; echo $?
1
$ ps -e | grep uxfw; echo $?
20215 ? 15:55 uxfw
0
$
J'ai mis uxfw car il était affiché et pourtant le process existe.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 mars 2009 à 19:29
5 mars 2009 à 19:29
Salut,
jipicy t'a déjà dit qu'il faut mettre "$n" et pas '$n'
Quand tu mets '$n' tu vas chercher un $ suivi d'un n est ce n'est pas ca que tu veux.
jipicy t'a déjà dit qu'il faut mettre "$n" et pas '$n'
Quand tu mets '$n' tu vas chercher un $ suivi d'un n est ce n'est pas ca que tu veux.
$ for n in nautil knotif bash kded gdm toto;do ps -e | grep "$n" >/dev/null; if [ "$?" = 0 ] ; then echo "$n" ; fi ; done; nautil knotif bash kded gdm $ for n in nautil knotif bash kded gdm toto;do ps -e | grep "$n" >/dev/null; if [ "$?" = 1 ] ; then echo "$n" ; fi ; done; toto