我正试图制作一个脚本,只是为了好玩,它创建了一个新用户,并为他生成了一个密码。
现在我必须检查用户是否输入了一些愚蠢的东西,而不是一个数字。
function checkifcorrectnum() {
#Check if the User did something else than enter a number
#And check if the Number is absurdly big
case "$1" in
[[:digit:]] ) if [ "$1" -gt "255" ]; then echo "Too big!" ; else : ; fi ;;
*) echo "Please enter a number!"; exit ;;
esac
}但是当我运行脚本并输入1-9时,它可以工作,但是任何更高的操作都不会。
发布于 2016-08-17 22:58:19
您只需要通过[[:digit:]]来匹配一位数字。bash全局不能像Regex一样使用,也不能被*或+之类的操作符多次匹配。如果您想坚持使用您的方法,并且确切地知道要允许多少位数字,那么可以使用例如2位数字:
case "$1" in
[[:digit:]][[:digit:]])如果你不确定,那么:
case "$1" in
[[:digit:]]*)*扩展到任意数量的字符。
但是,我认为您应该看看bash提供的Regex匹配,由[[的=~运算符提供,这样您的整个函数可以重写为:
if [[ $1 =~ ^[[:digit:]]+$ ]]; then
[[ $1 -gt 255 ]] && echo "Too big!"
else
echo 'Please enter a number!' && exit
fi另外,如果数字是<=255,则什么也不做,所以[[ $1 -gt 255 ]] && echo "Too big!"就足够了。
发布于 2016-08-17 23:44:47
由于测试字符串是否不是数字比测试是否为数字更容易,因此我建议倒转测试的顺序:
function checkifcorrectnum() {
case "$1" in
*[^[:digit:]]*) echo "Please enter a number";;
*) [ "$1" -gt "255" ] && echo "Too big!" ;;
esac;
}如果*[^[:digit:]]*中的任何字符不是数字,则glob $1匹配。
示例:
$ checkifcorrectnum 255
$ checkifcorrectnum 256
Too big!
$ checkifcorrectnum 25z
Please enter a number顺便说一句,关键字function是bash专用的,一般不需要.删除关键字后,代码不仅在bash中工作,而且在任何与POSIX兼容的shell中都能工作。
https://stackoverflow.com/questions/39007384
复制相似问题