在 bash shell 脚本中检查字符串是否仅包含数字的比较问题

Problem with comparison for checking that a string contains only digits in a bash shell script

我不得不修改 bash shell 脚本,但我对 bash shell 脚本没有太多经验(我与许多其他人合作过语言,但与 shell 脚本编写的关系不大)。

脚本显示包含“X”项的菜单,然后提示用户输入数字。

用户输入数字后,我认为脚本会检查输入的 number/string 以确保它是一个数字(我认为),然后检查数字是否在值范围内.

我想改变的部分是菜单中的项目数量,原本有 9 个项目,但我需要再添加 10 个左右。如果输入的数字超过 1 位,则看起来检查失败。

这是它进行检查的片段:

while menu && read -rp "$prompt" num && [[ "$num" ]]; do
    if [[ "$num" == [[:digit:]] ]] && [[ $num -gt 0 ]] && [[ $num -le ${#service_accounts[@]} ]]; then

我认为失败的“if”部分是:

[[ "$num" == [[:digit:]] ]] 

谁能告诉我,如果 $num 中的字符串超过 1 位,比较是否会失败?

另外,如果是这种情况,即使 $num 超过 1 位数,我如何更改该比较以使其正常工作?

抱歉,如果这是一种奇怪的问题 :(!! 还有,提前致谢!

吉姆

[[ "$num" == [[:digit:]] ]] 除了一个数字以外的所有内容都失败。


这使您的脚本能够接受一到两位数的数字:

[[ "$num" =~ ^[[:digit:]]{1,2}$ ]]

=~ 将 $num 与正则表达式 ^[[:digit:]]{1,2}$.

进行比较

参见:The Stack Overflow Regular Expressions FAQ