首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在bash中一遍又一遍地运行命令直到成功?

如何在bash中一遍又一遍地运行命令直到成功?
EN

Stack Overflow用户
提问于 2011-03-11 22:41:27
回答 6查看 167.4K关注 0票数 292

我有一个脚本,想向用户询问一些信息,但在用户填写这些信息之前,脚本无法继续。下面是我尝试将一个命令放到一个循环中来实现这一点,但由于某些原因它不起作用:

代码语言:javascript
复制
echo "Please change password"
while passwd
do
    echo "Try again"
done

我已经尝试了while循环的许多变体:

代码语言:javascript
复制
while `passwd`
while [[ "`passwd`" -gt 0 ]]
while [ `passwd` -ne 0 ]]
# ... And much more

但我似乎不能让它工作。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-11 22:48:26

代码语言:javascript
复制
until passwd
do
  echo "Try again"
done

代码语言:javascript
复制
while ! passwd
do
  echo "Try again"
done
票数 473
EN

Stack Overflow用户

发布于 2011-03-11 22:44:21

您需要改为测试$?,它是前一个命令的退出状态。如果一切正常,passwd将退出,返回0;如果密码更改失败(密码错误、密码不匹配等),则返回非零值。

代码语言:javascript
复制
passwd
while [ $? -ne 0 ]; do
    passwd
done

对于您的反引号版本,您将比较passwd的输出,可能是Enter passwordconfirm password之类的东西。

票数 103
EN

Stack Overflow用户

发布于 2014-07-16 09:48:21

为了详细说明@Marc B的答案,

代码语言:javascript
复制
$ passwd
$ while [ $? -ne 0 ]; do !!; done

这是一种很好的方式来做同样的事情,而不是特定于命令。

票数 97
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5274294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档