[英]Problem with comparison for checking that a string contains only digits in a bash shell script
我不得不修改一个 bash shell 脚本,但我对 bash shell 脚本没有太多经验(我使用过许多其他语言,但对 shell 脚本编写的不多)。
该脚本显示一个带有“X”项的菜单,然后提示用户输入一个数字。
用户输入数字后,我认为脚本会检查输入的数字/字符串以确保它是数字(我认为),然后检查数字是否在某个值范围内。
我想要更改的部分内容是菜单中的项目数,最初有 9 个项目,但我需要再添加 10 个左右。 如果输入的数字超过 1 位,则检查似乎失败。
这是它进行检查的片段:
while menu && read -rp "$prompt" num && [[ "$num" ]]; do
if [[ "$num" == [[:digit:]] ]] && [[ $num -gt 0 ]] && [[ $num -le ${#service_accounts[@]} ]]; then
我认为失败的“如果”部分是:
[[ "$num" == [[:digit:]] ]]
如果 $num 中的字符串超过 1 位,有人能告诉我比较会失败吗?
而且,如果是这种情况,即使 $num 超过 1 位,我该如何更改该比较以使其正常工作?
对不起,如果这是一种奇怪的问题:(!!而且,提前致谢!
吉姆
[[ "$num" == [[:digit:]] ]]
失败,除了一位数之外的所有内容。
这使您的脚本能够接受一到两位数字:
[[ "$num" =~ ^[[:digit:]]{1,2}$ ]]
=~
将 $num 与正则表达式^[[:digit:]]{1,2}$
。
请参阅:堆栈溢出正则表达式常见问题解答
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.