Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/08/2012, à 17:54

Gokukan

[Résolu] Commande de test dans un script

Bonjour, j'ai une difficulté sur un petit bout de code dans mon scriipt bash :

if [ 'ps -edf|grep ora_pmon_SID|grep -qv grep' ];then echo "Instance OK";else echo "Instance KO";fi

C'est un script qui va tester l’existence d'un processus Oracle. Je n'arrive pas à écrire correctement la syntaxe du test de la commande ( mettre des " ou des ' ou des ` ). Parfois, j'ai une erreur bash, parfois, le code retour est toujours =0 même quand le processus est absent .

Par contre si j'écris ce bout de code comme ceci, cela fonctionne :

ps -edf|grep ora_pmon_SID|grep -qv grep
if [ $? -eq 0 ];then echo "Instance OK";else echo "Instance KO";fi

mais ce n'est pas pratique de faire ce contrôle en 2 temps.

Dernière modification par Gokukan (Le 06/08/2012, à 18:54)

Hors ligne

#2 Le 05/08/2012, à 17:59

xavier4811

Re : [Résolu] Commande de test dans un script

Bonjour, c'est pas le sens des 'quotes`

if [ 'ps -edf|grep ora_pmon_SID|grep -qv grep' ];then echo "Instance OK";else echo "Instance KO";fi
Instance OK
if [ `ps -edf|grep ora_pmon_SID|grep -qv grep` ];then echo "Instance OK";else echo "Instance KO";fi
Instance KO

Dernière modification par xavier4811 (Le 05/08/2012, à 17:59)

Hors ligne

#3 Le 05/08/2012, à 18:22

Gokukan

Re : [Résolu] Commande de test dans un script

xavier4811 a écrit :

Bonjour, c'est pas le sens des 'quotes`

if [ 'ps -edf|grep ora_pmon_SID|grep -qv grep' ];then echo "Instance OK";else echo "Instance KO";fi
Instance OK
if [ `ps -edf|grep ora_pmon_SID|grep -qv grep` ];then echo "Instance OK";else echo "Instance KO";fi
Instance KO

Le 1ere ligne ne fonctionne pas : le service oracle est démarré ou stoppé, le retour indiquera toujours "Instance OK" ...
Le 2eme ligne ne fonctionne pas : le service oracle est démarré ou stoppé, le retour indiquera toujours "Instance KO" ...
et de temps à autre, j'ai une erreur "-bash: [: too many arguments" qui vient !

Dernière modification par Gokukan (Le 05/08/2012, à 18:23)

Hors ligne

#4 Le 05/08/2012, à 21:00

Watael

Re : [Résolu] Commande de test dans un script

slaut,

la commande test est inutile.
tu devrais plutôt utiliser pgrep

if pgrep ora_pmon_SID
then...

regarde la manpage smile


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#5 Le 05/08/2012, à 21:30

Gokukan

Re : [Résolu] Commande de test dans un script

Watael a écrit :

slaut,

la commande test est inutile.
tu devrais plutôt utiliser pgrep

if pgrep ora_pmon_SID
then...

regarde la manpage smile

Pourquoi pas avec PGREP, mais cette commande ne détecte pas le nom du process :

# ps aux|grep ora_pmon_SID
oracle   26508  0.0  1.0 505324 16760 ?        Ss   20:20   0:00 ora_pmon_SID
pgrep ora_pmon_SID
<rien>
pgrep -u 600 -l oracle
26508 oracle
26512 oracle
26516 oracle
26522 oracle
26526 oracle

J'ai lu le man mais je ne vois pas comment l'utiliser efficacement hmm


EDIT : Je dois rajouter l'option "-f" pour avoir le retour :

pgrep -f ora_pmon_SID

Je vais tester dans le script. Merci.

Dernière modification par Gokukan (Le 05/08/2012, à 21:40)

Hors ligne

#6 Le 06/08/2012, à 12:06

Bousky

Re : [Résolu] Commande de test dans un script

Watael a écrit :

la commande test est inutile.

Pour faire des tests simple en bash (comparaisons de variables, existence de fichiers, ...), il y a la commande "test" (ou "[...]", ou "[[...]]"), mais elle ne sert qu'à ça :

if test "$var" = truc  ; then
if [ "$var_numérique" -gt 10 ] ; then
if [[ "$var" ~= regex ]] ; then

Les tests se font en réalité selon le résultat de n'importe quelle commande (0 = vrai, sinon faux) :

if commande avec ses arguments et redirections ; then

Dernière modification par Bousky (Le 06/08/2012, à 12:08)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#7 Le 06/08/2012, à 18:53

Gokukan

Re : [Résolu] Commande de test dans un script

Ok, je te remercie, voila l'astuce : ne rien mettre autour de la commande avec ses arguments et redirections. En effet, ça fonctionne smile

if ps -edf|grep ora_pmon_SID|grep -qv grep;then echo "Instance OK";else echo "Instance KO";fi

Résolu!

Hors ligne