булев тип для цикла с условием продолжения в ударе?

У меня есть сценарий крона на общем веб-хосте, который иногда уничтожается. Я хотел бы сделать цикл в ударе, который попробовал еще раз, если он уничтожается, потому что большую часть времени он сделает его. Я испытываю затруднения из-за синтаксиса для хранения булева значения :P

#!/bin/bash
VAR=0;

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=1;
    fi
done

Таким образом, сценарий восстанавливается с уничтоженного процесса хорошо, но после того как он выполняется правильно, новое VAR значение не уничтожает while цикл.

Что я делаю неправильно?

7
задан user151841 22 April 2010 в 19:15
поделиться

4 ответа

Попытки

while [ "$VAR" -eq 0 ]; do

0 и 1 оба считаются Истинными, поскольку они не являются нулевыми строками.

7
ответ дан 6 December 2019 в 10:48
поделиться

Вы можете использовать / bin / true и / bin / false . Хотя пока! mysqldump .....; do:; done (решение Юргена Хетцеля) было бы лучше в этом случае, есть и другие случаи, когда полезно использовать true и false .

#!/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
3
ответ дан 6 December 2019 в 10:48
поделиться

Вспомогательная переменная не нужна, рассмотрите возможность использования:

while ! mysqldump .....; do :;done
6
ответ дан 6 December 2019 в 10:48
поделиться

В Bash вы можете использовать числовые условные выражения, используя двойные круглые скобки, а не строковые условные, но логика инвертирована:

#!/bin/bash
VAR=1;

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=0;
    fi
done
2
ответ дан 6 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: