在bash脚本中,我需要验证用户是否输入了实际数字,因此我认为最简单的方法是确保实现case
:
case $1 in
[0-9]*)
echo "It's ok"
;;
*)
echo "Ain't good!"
exit 1
;;
esac
但是我很难处理文件通配,因为我找不到一种方法来要求$ 1值只能是数字。或者另一种方式可以排除所有替代方案:
case $1 in
-*)
echo "Can't be negative"
exit 1
;;
+*)
echo "Must be unsigned"
exit 1
;;
*[a-zA-z]*)
echo "Can't contain letters"
exit 1
;;
esac
在这种情况下,我应该能够阻止“特殊”字样! ? ^ =()等等......我不知道如何实现它。请有人给我一个提示吗?
答案 0 :(得分:5)
实际上最好使用
*[!0-9]*
而不是
*[^0-9]*
第一个是POSIX,第二个是bashism [1]。
[1] http://rgeissert.blogspot.com/2013/02/a-bashism-week-negative-matches.html
答案 1 :(得分:4)
如果在字符串中的任何地方找到非数字字符,则输入结果不好,否则很好:
case "$1" in
*[^0-9]*) echo "first parameter must contain numbers only"; exit 1;;
esac