直到用户输入等于某事

Geo*_*rey 11 variables bash shell 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
Run Code Online (Sandbox Code Playgroud)

我没有退出脚本,而是希望它继续询问输入,直到有一些.

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

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

read -s -p "Enter new password:" NEWPASS
echo ""
Run Code Online (Sandbox Code Playgroud)

下一部分检查变量以查看它是否包含值,而值为null则请求用户无限期地填充该值.( 一个循环)

while [[ -z "$NEWPASS" ]]; do
echo ""
echo "Password CAN NOT be blank"
echo ""
read -s -p "Enter new password:" NEWPASS;
echo ""
done
Run Code Online (Sandbox Code Playgroud)

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

sed -i -e"s/^PASS=.*/PASS=$NEWPASS/" /etc/sshd.conf   
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,我将使用它并从中学习.

anu*_*ava 22

这个while循环应该工作:

while [[ -z "$NEWPASS" ]]
do
  read -s -p "Enter new password: " NEWPASS
done
Run Code Online (Sandbox Code Playgroud)

  • 是的,确定.`-z string`表示如果string为空并且`while [[-z"$ NEWPASS"]]`表示在循环运行时直到`$ NEWPASS`为空.你的常规读取命令在循环中进入.如果用户按下输入,那么`$ NEWPASS`仍为空白,并再次显示提示.当循环结束时,Moment用户输入一个值,因为`$ NEWPASS`变为非空.运行`man test`了解更多信息. (4认同)
  • 你能否打破你的答案并解释一下?我几乎得到了这个问题,我只想完全理解它. (2认同)

Mic*_*ker 5

while read -s -p 'Enter new password: ' NEWPASS && [[ -z "$NEWPASS" ]] ; do
 echo "No-no, please, no blank passwords!"
done
Run Code Online (Sandbox Code Playgroud)