验证输入
随着我们拥有键盘输入的新能力带来了额外的编程挑战,即验证输入。 写得好的程序和写得不好的程序之间的区别通常在于程序处理意外情况的能力。 通常,意外以错误输入的形式出现。 我们在上一章的评估程序中做了一些这样的工作,我们检查了整数的值并筛选了
输出空值和非数字字符。 每次程序接收输入时执行这些类型的程序检查很重要,以防止无效数据。 这对于由多个用户共享的程序尤其重要。 如果程序仅被作者使用一次以执行某些特殊任务,则为了经济利益而省略这些保护措施是可以原谅的。 即便如此,如果程序执行诸如删除文件之类的危险任务,最好包括数据验证,以防万一。
这里我们有一个验证各种输入的示例程序:
#!/斌/庆典
# 读取验证:验证输入 invalid_input() {
echo "无效输入 '$REPLY'" >&2 exit 1
}
read -p "输入单个项目 > "
# 输入为空(无效)
[[ -z $REPLY ]] && invalid_input
# 输入是多项(无效)
(( $(echo $REPLY | wc -w) > 1 )) && invalid_input
# 输入的是一个有效的文件名吗?
if [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; 然后 echo "'$REPLY' 是一个有效的文件名。"
如果 [[ -e $REPLY ]]; 然后
echo "并且文件 '$REPLY' 存在。"
其他
echo "但是,文件 '$REPLY' 不存在。"
fi
# 输入的是浮点数吗?
if [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; 然后 echo "'$REPLY' 是一个浮点数。"
其他
echo "'$REPLY' 不是浮点数。"
fi
# 输入的是整数吗?
如果 [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; 然后 echo "'$REPLY' 是一个整数。"
其他
echo "'$REPLY' 不是整数。"
#!/斌/庆典
# 读取验证:验证输入 invalid_input() {
echo "无效输入 '$REPLY'" >&2 exit 1
}
read -p "输入单个项目 > "
# 输入为空(无效)
[[ -z $REPLY ]] && invalid_input
# 输入是多项(无效)
(( $(echo $REPLY | wc -w) > 1 )) && invalid_input
# 输入的是一个有效的文件名吗?
if [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; 然后 echo "'$REPLY' 是一个有效的文件名。"
如果 [[ -e $REPLY ]]; 然后
echo "并且文件 '$REPLY' 存在。"
其他
echo "但是,文件 '$REPLY' 不存在。"
fi
# 输入的是浮点数吗?
if [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; 然后 echo "'$REPLY' 是一个浮点数。"
其他
echo "'$REPLY' 不是浮点数。"
fi
# 输入的是整数吗?
如果 [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; 然后 echo "'$REPLY' 是一个整数。"
其他
echo "'$REPLY' 不是整数。"
验证输入
其他
echo "字符串 '$REPLY' 不是有效的文件名。"
fi
其他
echo "字符串 '$REPLY' 不是有效的文件名。"
fi
此脚本提示用户输入项目。 随后对该项目进行分析以确定其内容。 正如我们所见,该脚本利用了我们迄今为止所涵盖的许多概念,包括 shell 函数、 [[]], (()), 控制运算符
&&、if 以及适量的正则表达式。