在继续之前,我使用 Bash 脚本提示用户输入几个变量。如果我想创建静态验证规则并以“点菜”方式对用户输入执行它们,我将如何去做呢?
例子:
function q1 () {
echo "Do you have an answer?"
read input
# I know this is wrong but should get the idea across
chkEmpty($input)
chkSpecial($input)
}
function chkEmpty () {
if [[ $input = "" ]]; then
echo "Input required!"
# Back to Prompt
else
# Continue to next validation rule or question
fi
}
function chkSpecial () {
re="^[-a-zA-Z0-9\.]+$"
if ! [[ $input =~ $re ]]; then
echo "Cannot use special characters!"
# Back to prompt
else
# Continue to next validation rule or question
fi
}
function chkSize () {
etc...
}
etc...
答案1
$1
函数在、等中获取参数$2
。此外,在 shell 中,它们被称为不带括号,因此您的代码是几乎正确的。
您的函数语法也不太正确:您要么使用括号,要么使用单词function
。最后,您可以使用 返回结果(其工作方式类似于进程的退出代码)return
。
chkEmpty() {
if [[ "$1" = "" ]]; then
echo "Input required!"
return 1 # remember: in shell, non-0 means "not ok"
else
return 0 # remember: in shell, 0 means "ok"
fi
}
现在你可以这样称呼它:
function q1 () {
echo "Do you have an answer?"
read input
chkEmpty $input && chkSpecial $input # && ...
}
显然,您需要添加一些代码来处理无效输入,例如,通过再次提示或中止脚本。如果使用while
/until
和if
来检查函数的返回值,并重新提示或退出。