Answers:
until passwd
do
echo "Try again"
done
要么
while ! passwd
do
echo "Try again"
done
until passwd; do echo "Try again"; sleep 2; done
-您要做的就是在工作完成后(在指定的两秒钟内)按Ctr-C echo
。
until passwd || (( count++ >= 5 )); do echo "foo"; done
(仅适用于bash,如果存在可变变量,请确保将count设置为0)。如果您需要纯sh进行计数,请在主体中增加计数器并使用[]
您需要进行测试$?
,这是上一个命令的退出状态。passwd
如果一切正常,则以0退出;如果passwd更改失败(密码错误,密码不匹配等),则退出非零值。
passwd
while [ $? -ne 0 ]; do
passwd
done
使用反引号的版本,您正在比较passwd的输出,例如 Enter password
和confirm password
等。
$?
吗?
passwd
,/bin/false
如果您有一些不想保留两个版本的冗长而复杂的命令,则可以通过更改第一个来稍微改善一下。
要详细说明@Marc B的答案,
$ passwd
$ while [ $? -ne 0 ]; do !!; done
做不是特定于命令的相同事情的好方法。
sudo
在命令前面编写代码,则只需执行sudo !!
以root特权运行前面的命令即可。
您可以使用无限循环来实现此目的:
while true
do
read -p "Enter password" passwd
case "$passwd" in
<some good condition> ) break;;
esac
done
&& break
在执行验证命令后执行的,而不是在选择情况下执行的。
如果有人想要重试限制:
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
until $(command)
基本上总是错的。使用until command
代替。在$(...)
使输出的command
是本身运行作为命令,并退出状态即二次命令是什么环路决定运行或失败上; 这是唯一的,如果有是没有标准输出,当命令替换存在的命令本身的退出状态被认为是。
while [ -n $(passwd) ]; do
echo "Try again";
done;