bash中while循环的布尔类型?

时间:2010-04-22 19:15:38

标签: 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 database_name > ~/file/system/path/filename.sql; then
        VAR=1;
    fi
done

因此脚本可以从一个被杀死的进程恢复,但是一旦它正常运行,新的VAR值不会杀死while循环。

我做错了什么?

5 个答案:

答案 0 :(得分:7)

尝试

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

01都被视为True,因为它们不是空字符串。

答案 1 :(得分:6)

不需要辅助变量,请考虑使用:

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

答案 2 :(得分:3)

您可以使用/bin/true/bin/false。虽然在这种情况下while ! mysqldump .....; do :;done(JürgenHötzel的解决方案)会更好,但在使用truefalse时,其他情况也很有用。

#!/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>