如何要求用户输入,应该是必需的

时间:2016-09-19 15:04:14

标签: linux bash shell

从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

但这并不排除用户不小心(甚至可能是故意)点击回车键的可能性 - 我必须做多少其他条件?

2 个答案:

答案 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