Bon alors euh..... on va faire un premier tour d'horizon, avec quelques explications histoire que ça reste ^^ (si je me plante, merci aux lecteurs de me corriger ! )
1 - Les variables avec du texte dedans
tuxerman12 a totalement raison : plus tu es précis avec Unix, moins tu as de chances qu'il n'essaye d'interpréter ce que tu lui dis.
Donc première règle à suivre : tout ce qui est chaînes de caractères (en gros tout texte que tu veux mettre dans une variable) devrait être encadré d'apostrophes. Et là encore y a une finesse : si tu utilises les doubles quotes ( " ) alors le KSH peut interpréter d'éventuelles variables à l'intérieur de ta chaîne de caractères. Si tu utilises la simple quote ( ' ) alors la chaîne est conservée telle quelle.
Exemple :
Code :
- t01k2 @ </tst01/K2>
- > echo "$USER"
- t01k2
- t01k2 @ </tst01/K2>
- > echo '$USER'
- $USER
|
2 - Utilisation des variables
Tu peux également encadrer tes noms de variables afin de ne laisser aucune chance au shell de t'embrouiller. Par exemple (attention exemple tordu, mais c'est juste pour illustrer ), je définis une variable USE='Bonjou' et je fais la commande suivante :
echo $USER
Comment qu'il fait pour savoir si c'est $USE + R ou $USER ? ==> encadrer les variables avec des accolades ( ${...} ) ==> echo ${USE}R
3 - La commande de test magique
Cette commande là, elle est pas belle :
Code :
- if [ grep $found = 1 ]
|
Je comprend ce que tu veux faire, mais à moins que certaines subtilités du shell ne m'échappent, je ne pense pas que cette commande passe et te renvois ce que tu veux ....
Personnellement je passerai par une variable 'found' plutôt que par un fichier, plus pratique et ça ne pollue pas ton disque un fois que le script est terminé.
Donc déjà on peut essayer avec les modifications suivantes :
Code :
- #!/bin/ksh
- # Test script pour archive Logs XXXX
- # Variables
- ARCHIVE_LOG="/home/toto/Archives"
- REP_LOG="/home/toto"
- echo ------------------------------------------------------------------
- echo Test script
- echo -----------------------------------------------------------------
- # Verification de la presence du batch
- # Si process absent, on peut archiver
- found=0
- for i in `cat /home/toto/liste_batch.txt`
- do
- found=$((${found} + `ps auxw | grep $i | grep -v grep | wc -l`))
- done
- if [ ${found} -ne 0 ]
- then
- echo " Job en cours - Attendre" >> /home/toto/test-script.log 2>&1
- else
- mv ${REP_LOG}/BATCH1* ${ARCHIVE_LOG}/ >> /home/toto/test-script.log 2>&1
- echo " Job termine - Pret a etre archive " >> /home/toto/test-script.log 2>&1
- fi
|
Remarque : le script en l'état tel que tu nous l'as décrit au départ va chercher n'importe quel process de la liste : dès qu'il en trouve un il ne fera pas l'archive !
Ce qui n'est pas la même chose que : je regarde si tel process est ectif, si oui j'archive SON log, sinon je passe au suivant .........
Voilà voilà
Message édité par Kerrozen le 13-04-2010 à 12:37:25
---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !