J V*_*J V 215 bash command while-loop
我有一个脚本,并想要询问用户一些信息,脚本无法继续,直到用户填写此信息.以下是我尝试将命令放入循环以实现此目的但由于某种原因它不起作用.
echo "Please change password"
while passwd
do
echo "Try again"
done
Run Code Online (Sandbox Code Playgroud)
我尝试了while循环的许多变体:
while `passwd`
while [[ "`passwd`" -gt 0 ]]
while [ `passwd` -ne 0 ]]
# ... And much more
Run Code Online (Sandbox Code Playgroud)
但我似乎无法让它发挥作用.
Eri*_*rik 371
until passwd
do
echo "Try again"
done
Run Code Online (Sandbox Code Playgroud)
Mar*_*c B 85
您需要测试$?,这是上一个命令的退出状态.passwd如果一切正常则退出0,如果密码更改失败则退出非密码(密码错误,密码不匹配等等)
passwd
while [ $? -ne 0 ]; do
passwd
done
Run Code Online (Sandbox Code Playgroud)
有了您的反引号的版本,你要比较passwd文件的输出,这将是这样的东西Enter password和confirm password等.
duc*_*thd 58
详细说明@Marc B的答案,
$ passwd
$ while [ $? -ne 0 ]; do !!; done
Run Code Online (Sandbox Code Playgroud)
做同样事情的好方法不是命令特定的.
如果有人希望有重试限制:
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
Run Code Online (Sandbox Code Playgroud)
你可以使用无限循环
while true
do
read -p "Enter password" passwd
case "$passwd" in
<some good condition> ) break;;
esac
done
Run Code Online (Sandbox Code Playgroud)