bash中while循环的布尔类型?

bash中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

我在共享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
循环

我做错了什么?

试试看

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。