hau*_*d85 3 bash design-patterns glob
在bash脚本中,我需要验证用户输入的实际数字,所以我认为最简单的方法是让自己确定这是实现一个case:
case $1 in
[0-9]*)
echo "It's ok"
;;
*)
echo "Ain't good!"
exit 1
;;
esac
Run Code Online (Sandbox Code Playgroud)
但我很难用文件通配,因为我找不到一种方法来要求$ 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
Run Code Online (Sandbox Code Playgroud)
事情是在这种情况下,我应该能够阻止"特殊"字符!?^ =()等等......我不知道如何实现它.请有人给我一个提示吗?
如果您在字符串中的任何位置找到非数字字符,则输入是错误的,否则是好的:
case "$1" in
*[^0-9]*) echo "first parameter must contain numbers only"; exit 1;;
esac
Run Code Online (Sandbox Code Playgroud)
小智 5
实际上它会更好用
*[!0-9]*
Run Code Online (Sandbox Code Playgroud)
代替
*[^0-9]*
Run Code Online (Sandbox Code Playgroud)
第一个是POSIX,第二个是bashism [1].
[1] http://rgeissert.blogspot.com/2013/02/a-bashism-week-negative-matches.html