如何在bash中运行命令直到成功

时间:2011-03-11 14:41:27

标签: bash command while-loop

我有一个脚本,想要询问用户一些信息,在用户填写此信息之前,脚本无法继续。以下是我尝试将命令放入循环以实现此目的但由于某种原因它不起作用。

echo "Please change password"
while passwd
do
echo "Try again"
done

我尝试过while循环的许多变体:

while `passwd`
while [[ "`passwd`" -gt 0 ]]
while [ `passwd` -ne 0 ]]
# ... And much more

但我似乎无法让它发挥作用。

6 个答案:

答案 0 :(得分:333)

until passwd
do
  echo "Try again"
done

答案 1 :(得分:80)

您需要测试$?,这是上一个命令的退出状态。如果一切正常,passwd退出0,如果密码更改失败,则退出非零(密码错误,密码不匹配等等)

passwd
while [ $? -ne 0 ]; do
    passwd
done

使用反引号版本,您可以比较passwd的输出,例如Enter passwordconfirm password之类的内容。

答案 2 :(得分:50)

详细说明@Marc B的回答,

$ passwd
$ while [ $? -ne 0 ]; do !!; done

做同样事情的好方法不是特定于命令。

答案 3 :(得分:4)

你可以使用无限循环

while true
do
  read -p "Enter password" passwd
  case "$passwd" in
    <some good condition> ) break;;
  esac
done

答案 4 :(得分:4)

while [ -n $(passwd) ]; do
        echo "Try again";
done;

答案 5 :(得分:3)

如果有人希望重试限制:

max_retry=5
counter=0
until $(command)
do
   sleep 1
   [[ counter -eq $max_retry ]] && echo "Failed!" && exit 1
   echo "Trying again. Try #$counter"
   ((counter++))
done