У меня есть сценарий крона на общем веб-хосте, который иногда уничтожается. Я хотел бы сделать цикл в ударе, который попробовал еще раз, если он уничтожается, потому что большую часть времени он сделает его. Я испытываю затруднения из-за синтаксиса для хранения булева значения :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
цикл.
Что я делаю неправильно?
Попытки
while [ "$VAR" -eq 0 ]; do
0
и 1
оба считаются Истинными, поскольку они не являются нулевыми строками.
Вы можете использовать / 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
Вспомогательная переменная не нужна, рассмотрите возможность использования:
while ! mysqldump .....; do :;done
В 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