【问题标题】:Until user input equals something do直到用户输入等于某事
【发布时间】:2013-10-22 19:14:05
【问题描述】:

所以有人向我展示了如何使用条件来测试用户是否输入了密码。 我想以他们的例子更进一步并使用循环(至少我认为它是这样称呼的)。

这是他们的例子:

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 时,它要求用户无限期地填充该值。 (一个循环)

while [[ -z "$NEWPASS" ]]; do
echo ""
echo "Password CAN NOT be blank"
echo ""
read -s -p "Enter new password:" NEWPASS;
echo ""
done

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

sed -i -e"s/^PASS=.*/PASS=$NEWPASS/" /etc/sshd.conf   

感谢大家的帮助,我将使用它并从中学习。

【问题讨论】:

    标签: bash shell variables input


    【解决方案1】:

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

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

    【讨论】:

    • 你能分解你的答案并解释一下吗?我几乎明白了,我只是想完全理解它。
    • 是的,当然。 -z string 表示字符串是否为空,while [[ -z "$NEWPASS" ]] 表示运行此 while 循环,直到 $NEWPASS 为空。您的常规读取命令位于 while 循环中。如果用户按下回车,则$NEWPASS 仍为空白并再次显示提示。由于$NEWPASS 变为非空,因此用户在循环结束时输入一个值。运行man test 了解更多信息。
    【解决方案2】:
    while read -s -p 'Enter new password: ' NEWPASS && [[ -z "$NEWPASS" ]] ; do
     echo "No-no, please, no blank passwords!"
    done
    

    【讨论】:

    • 你能分解你的答案并解释一下吗?
    • 当然,如果read 成功,则评估测试,如果字符串为空,则继续循环,否则 - 循环退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多