Bonjour à tous,
Je débute sous Linux et j'essaie de faire un petit script tout simple qui lorsque qu’il n’arrive pas à arrêter un service fait un forcestop en cas d’erreur.
Exemple.
.StopService
si erreur alors
.ForceStopService
Merci d’avance,
Version imprimable
Bonjour à tous,
Je débute sous Linux et j'essaie de faire un petit script tout simple qui lorsque qu’il n’arrive pas à arrêter un service fait un forcestop en cas d’erreur.
Exemple.
.StopService
si erreur alors
.ForceStopService
Merci d’avance,
Bonjour
Pas facile de t'aider sans connaitre les commandes que tu utilises.
Ce qu'il faut savoir, c'est que tout programme Unix (quand il est correctement écrit), te renvoie un code d'état indiquant s'il a réussi (état=0) ou pas (état=nb > 0 et < 256) à exécuter la tâche demandée.
Et toi, tu peux alors tester ce code d'état pour agir en conséquence.
Ce code d'état est récupéré dans la variable "$?"
Exemple
Code:
1
2
3
4
5
6
7 rm -f /tmp if test $? -eq 0 then echo "Le dossier a bien été effacé" else echo "Le dossier n'a pas pu être effacé" fi
Le shell Unix étant relativement intelligent, il sait tester directement l'état d'un programme sans que tu aies spécifiquement besoin d'évaluer $?. Ca marche parce que, conventionnellement, un état à 0 signifie "vrai" et tout autre signifie "faux"
Exemple analogue
Code:
1
2
3
4
5
6 if rm -f /tmp then echo "Le dossier a bien été effacé" else echo "Le dossier n'a pas pu être effacé" fi
Et ce code d'état est, bien entendu, indépendant de tout message d'erreur éventuel, que celui-ci soit affiché ou pas
Exemple
Code:
1
2
3
4
5
6 if rm -f /tmp 2>/dev/null then echo "Le dossier a bien été effacé" else echo "Le dossier n'a pas pu être effacé" fi
Donc je ne connais pas trop ton ".StopService" et ".ForceStopService" mais si je reprends ton exemple, cela s'écrira alors ainsi
Code:
1
2
3
4
5 .StopService if test $? -ne 0 then .ForceStopService fi
Ou, plus simplement ainsi
Code:
1
2
3
4 if ! .StopService then .ForceStopService fi
Ou, si t'es certain de n'avoir qu'une instruction à exécuter, tu pourras utiliser une autre écriture dédiée à ce genre de cas
Le "||" permettant de lier une seconde commande sur l'état de la première. Si la première renvoie un état "faux", alors le "||" embraye sur la seconde. Sinon il s'arrête. Cela symbolise d'ailleurs la connexion "or" ce qui se comprendra ainsi: exécuter la première commande ou bien alors exécuter la seconde.Code:.StopService || .ForceStopService
Et (pour info) t'as aussi le "&&" faisant la même chose mais embrayant, lui, la seconde commande sur un état "vrai" de la première (symbolisation de la connexion "and" => exécuter la première et la seconde)
Bonjour,
J'ai pas lu mais je plussoie, rien que pour le temps passé à rédiger un tel message.
Merci à tous de vos réponses.
Je crois pouvoir m'en sortir.
Bonne journée et encore Merci.