7
votes

type booléen pour la boucle à bash?

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 xxx

de sorte que le script récupère d'un processus tué, mais une fois qu'il est exécuté correctement, le nouveau var la valeur ne tue pas le pendant boucle.

Qu'est-ce que je fais mal?


0 commentaires

5 Réponses :


8
votes

Essayez xxx

0 et 1 sont considérés comme tristes car ils ne sont pas des chaînes NULL. >


1 commentaires

C'est vrai, mais pour la façon dont je l'ai écrit dans mon script, il devrait en réalité être --ne 1 :)



8
votes

Pas besoin de vous une variable d'assistance, envisagez d'utiliser:

while ! mysqldump .....; do :;done


2 commentaires

Que signifie le côlon après avoir fait?


Aucune opération: juste pour satisfaire la syntaxe Bash.



2
votes

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: xxx


0 commentaires

3
votes

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


1 commentaires

J'allais dire "mmmm. Ne devrait-il pas être var = true et var = false ? 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.



0
votes

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


0 commentaires