从shell脚本,我想要求用户输入数据库名称,数据库用户等数据。
当用户无意中按下回车键时,输入为空白。如何进行输入?如果输入为空,则脚本会再次询问该问题吗?
我目前的剧本,但也许它并没有像我预期的那样奏效。
#!/bin/bash
# Clear terminal first
clear
echo -n "Your Database Name : "
read dbname
if [ "$dbname" = "" ]; then
echo "ANSWER CANNOT BE BLANK!"
echo -n "Your Database Name : "
read dbname
else
... another code here
但这并不排除用户不小心(甚至可能是故意)点击回车键的可能性 - 我必须做多少其他条件?
答案 0 :(得分:1)
如果输入不为空,您可以使用无限循环和break
:
while true; do
echo -n "Your Database Name: "
read dbname
if [[ "$dbname" != "" ]]
then
echo "dbname = $dbname"
break
fi
done
答案 1 :(得分:0)
使用循环:
#!/bin/bash -
clear
echo -n "Your Database Name: "
while read dbname; do
test "$dbname" != "" && break
echo "ANSWER CANNOT BE BLANK!"
echo -n "Your Database Name : "
done
echo "dbname = $dbname"
修改:修复Ctrl-D
如果用户输入Ctrl-D
,上述代码会留下一个空字符串。以下版本处理此案例:
#!/bin/bash -
clear
until read -r -p "Your Database Name: " db && test "$db" != ""; do
continue
done
echo "db='$db'"
注意,我们使用Bash builtin read
命令。如果用户输入Ctrl-D
(手动文件结尾),read
命令将以非零状态退出,这将被解释为错误。请参阅info bash 'read'
。
此版本也可以在非交互模式下使用:
echo -e "\n name \n" | ./script.sh