Bash 直到用户输入等于做某事

Bash 直到用户输入等于做某事,bash,shell,variables,input,Bash,Shell,Variables,Input,所以有人告诉我如何使用条件来测试用户是否输入了密码。 我想以他们的例子更进一步,使用一个循环(至少我认为这就是所谓的循环) 以下是他们的例子: read -s -p "Enter new password: " NEWPASS if test "$NEWPASS" = ""; then echo "Password CAN NOT be blank re-run sshd_config" exit 1; fi 我不想退出脚本,而是希望它继续请求输入,直到出现一些错误 我想发表

所以有人告诉我如何使用条件来测试用户是否输入了密码。 我想以他们的例子更进一步,使用一个循环(至少我认为这就是所谓的循环)

以下是他们的例子:

read -s -p "Enter new password: " NEWPASS

if test "$NEWPASS" = ""; then
    echo "Password CAN NOT be blank re-run sshd_config"
    exit 1;
fi
我不想退出脚本,而是希望它继续请求输入,直到出现一些错误

我想发表这样的声明,但我做错了: (现在使用顶部示例)

用户有机会输入新密码并填写变量值

read -s -p "Enter new password:" NEWPASS
echo ""
下一部分检查变量是否包含值,当值为null时,它会请求用户无限期地填充该值。(循环)

此行搜索包含另一个文件使用的一组变量的文件。然后它在文件中搜索包含PASS=.*(.*表示任何内容)的行,然后写入PASS=$NEWPASS($NEWPASS是变量)


谢谢你的帮助,我要用这个并从中学习

这个while循环应该可以工作:

while [[ -z "$NEWPASS" ]]
do
  read -s -p "Enter new password: " NEWPASS
done

你能把答案分解并解释一下吗?当然,如果
read
成功,那么测试将被评估,如果字符串为空,循环将继续,如果不是,循环将退出。你能把答案分解并解释一下吗?我基本上了解jist,我只是想完全理解它。是的,当然
-z string
表示字符串是否为空,
而[[-z“$NEWPASS”]
表示运行此while循环,直到
$NEWPASS
为空。您的常规读取命令位于while循环中。如果用户按Enter键,则
$NEWPASS
仍为空,并再次显示提示。由于
$NEWPASS
变为非空,用户在循环结束时输入值的时刻。运行
人工测试
了解更多信息。
sed -i -e"s/^PASS=.*/PASS=$NEWPASS/" /etc/sshd.conf   
while [[ -z "$NEWPASS" ]]
do
  read -s -p "Enter new password: " NEWPASS
done
while read -s -p 'Enter new password: ' NEWPASS && [[ -z "$NEWPASS" ]] ; do
 echo "No-no, please, no blank passwords!"
done