bash中while循环的布尔类型?
我在共享web主机上有一个cron脚本,它偶尔会被杀死。我想在bash中做一个循环,如果它被杀死,它会再次尝试,因为大多数时候它都会成功。我在存储布尔值的语法方面遇到了问题:Pbash中while循环的布尔类型?,bash,command-line,Bash,Command Line,我在共享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 d
#!/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 <代码>两者都被认为是真的,因为它们不是空字符串。
不需要帮助器变量,请考虑使用: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
您可以使用
/bin/true
和/bin/false
。虽然while!mysqldump。。。。。;do:;完成
(Jürgen Hö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
我喜欢
,直到更适合这个…:
i=0
until [ $_done ]; do
echo stuff...;
sleep 1;
(( i++ ));
if [ "$i" -gt 9 ]; then
_done=1
fi
done
这是对的,但对于我在脚本中编写它的方式,它实际上应该是-ne1
:)我得到了[:-eq:unary操作符期望值
。当[“$VAR”=false]时做;做me@KatieS修正了。do之后的冒号是什么意思?没有操作:只是为了满足bash语法。我想说“嗯,它不应该是VAR=true
和VAR=false
?因为-除非出现错误-VAR=true意味着将字符串“true”分配给VAR。而VAR=false意味着将字符串“false”分配给VAR。”…但不是,因为$VAR执行$VAR。