我在共享的Web主机上有一个cron脚本,偶尔会被杀死。我想在bash中创建一个循环,如果它被杀死,它会再次尝试,因为大多数时候它会成功。我在使用存储布尔值的语法时遇到问题: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
循环。
我做错了什么?
答案 0 :(得分:7)
尝试
while [ "$VAR" -eq 0 ]; do
0
和1
都被视为True,因为它们不是空字符串。
答案 1 :(得分:6)
不需要辅助变量,请考虑使用:
while ! mysqldump .....; do :;done
答案 2 :(得分:3)
您可以使用/bin/true
和/bin/false
。虽然在这种情况下while ! mysqldump .....; do :;done
(JürgenHötzel的解决方案)会更好,但在使用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 :(得分:2)
在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
答案 4 :(得分:0)
我喜欢'直到'更好的...:
<div id="animated"></div>