多个读取命令并检查每个输入的输入
问题描述:
我想要求用户输入多个问题,然后将输入存储在变量中,但也要确保为每个问题输入的输入不是空的,否则它会重复问题多个读取命令并检查每个输入的输入
到目前为止,我有
input() {
if [ ! -z "$db*" ]; then
echo "Nothing entered" >&2;
return
else
break
fi
}
read -ep 'Enter your name >> [y/N]: ' name &&
input
read -ep 'Enter your email >> [y/N]: ' email &&
input
read -ep 'Enter your password >> [y/N]: ' password
input
答
使用的until
语句,并检查非空与[
:
until [ "$NAME" ]; do
printf "Name: "
read NAME
done
的[ "$VAR" ]
建设test
命令允许你测试变量是否非空1。
答
我使用的read
eval
和下列组合,其中调用所述输入功能具有可变保存在输入和消息要被打印(input_not_empty "INPUTVAR" "message"
)
input()
{
local foo
echo -n "$2: "
read foo
eval "$1=\"$foo\""
}
input_not_empty()
{
input $1 "$2"
if [ -z "$(eval echo \$$1)" ]; then
echo "ERROR: input empty..."
exit 1
fi
}
input_not_empty NAME "your full name"
input_not_empty EMAIL "your full email"
echo "name is $NAME"
echo "email is $EMAIL
但请注意eval
!
+0
有些方法可以在不使用'eval'的情况下做到这一点。 – chepner 2014-11-24 18:36:46
+0
绝对没有* eval的两个*用途。 – 2014-11-24 19:04:13
你也可以使用'[[$ NAME]]',因为你已经假设'bash'带有'-p'选项来'read'。 – chepner 2014-11-24 18:33:07
好点。更好地使它更便携。 – Ray 2014-11-24 18:44:53
非常感谢您的建议,直到我将阅读更多的命令。 – programiss 2014-11-24 19:36:09