J'ai un script cron sur un hôte Web partagé qui est parfois tué. J'aimerais faire une boucle dans Bash qui essaie à nouveau si elle est tuée, car la plupart du temps, cela le fera. J'ai des problèmes avec la syntaxe pour stocker une valeur booléenne: p de sorte que le script récupère d'un processus tué, mais une fois qu'il est exécuté correctement, le nouveau Qu'est-ce que je fais mal? P> P> var code> la valeur ne tue pas le
pendant code> boucle. p>
5 Réponses :
Essayez 0 code> et
1 code> sont considérés comme tristes car ils ne sont pas des chaînes NULL. P> P> >
C'est vrai, mais pour la façon dont je l'ai écrit dans mon script, il devrait en réalité être --ne 1 code> :)
Pas besoin de vous une variable d'assistance, envisagez d'utiliser:
while ! mysqldump .....; do :;done
Que signifie le côlon après avoir fait?
Aucune opération: juste pour satisfaire la syntaxe Bash.
En bash, vous pouvez faire un conditionnel numérique à l'aide de deux parenthèses plutôt qu'à une chaîne conditionnelle, mais la logique est inversée:
Vous pouvez utiliser / bin / true code> et
/ bin / faux code>. Bien que
pendant! mysqldump .....; faire:; Cadré code> (la solution de Jürgen Hötzel) serait mieux dans ce cas, il existe d'autres cas lors de l'utilisation de
true code> et
false code> sont utiles.
#!/bin/bash
VAR=true
while $VAR; do
if nice -19 mysqldump -uuser -ppassword -h database.hostname.com --skip-opt --all --complete-insert --add-drop-table database_name > ~/file/system/path/filename.sql; then
VAR=false
fi
done
J'allais dire "mmmm. Ne devrait-il pas être var = true code> et var =
false code>? Car - sauf erreur - var = true signifie attribuer la chaîne" vrai " Pour var. et var = faux signifie attribuer "Faux" à Var. "... Mais non, car tandis que $ var exécute $ var.
J'aime jusqu'à code> mieux pour cela ...:
i=0
until [ $_done ]; do
echo stuff...;
sleep 1;
(( i++ ));
if [ "$i" -gt 9 ]; then
_done=1
fi
done