#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
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
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
slaut,
la commande test est inutile.
tu devrais plutôt utiliser pgrepif pgrep ora_pmon_SID then...
regarde la manpage
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
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
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
if ps -edf|grep ora_pmon_SID|grep -qv grep;then echo "Instance OK";else echo "Instance KO";fi
Résolu!
Hors ligne