Linux 在case语句中使用数字范围

Linux 在case语句中使用数字范围,linux,bash,shell,Linux,Bash,Shell,我在执行这些案子时遇到了麻烦。每次都会转到最后一个大小写,即.*个字符 以下是我正在使用的: case $used_space in [1-84]) echo "OK - $used_space% of disk space used." exit 0 ;; [85]) echo "WARNING - $used_space% of disk space used." exit 1 ;

我在执行这些案子时遇到了麻烦。每次都会转到最后一个大小写,即.*个字符

以下是我正在使用的:

case $used_space in
    [1-84])
        echo "OK - $used_space% of disk space used."
        exit 0
        ;;
    [85])
        echo "WARNING - $used_space% of disk space used."
        exit 1
        ;;
    [86-100]*)
        echo "CRITICAL - $used_space% of disk space used."
        exit 2
        ;;
    *)
        echo "$used_space% of disk space used."
        exit 3
        ;;
esac

如何更改case语句以处理数字范围?

只需使用一系列if-s,如下所示:

if [[ "$used_space" -le 84 && "$used_space" -ge 1 ]]
then
    echo "OK - $used_space% of disk space used."
    exit 0
elif [[ "$used_space" -eq 85 ]]
then
    echo "WARNING - $used_space% of disk space used."
    exit 1
elif [[ "$used_space" -gt 85 && "$used_space" -le 100 ]]
then
    echo "CRITICAL - $used_space% of disk space used."
    exit 2
else
    echo "$used_space% of disk space used."
    exit 3
fi

只需使用一系列if-s,如下所示:

if [[ "$used_space" -le 84 && "$used_space" -ge 1 ]]
then
    echo "OK - $used_space% of disk space used."
    exit 0
elif [[ "$used_space" -eq 85 ]]
then
    echo "WARNING - $used_space% of disk space used."
    exit 1
elif [[ "$used_space" -gt 85 && "$used_space" -le 100 ]]
then
    echo "CRITICAL - $used_space% of disk space used."
    exit 2
else
    echo "$used_space% of disk space used."
    exit 3
fi
对于bash和case:

case $used_space in
  [1-9]|[1-7][0-9]|8[0-4]) # range 1-84
    echo "OK - $used_space% of disk space used."
    exit 0
    ;;
  85)
    echo "WARNING - $used_space% of disk space used."
    exit 1
    ;;
  8[6-9]|9[0-9]|100)        # range 86-100
    echo "CRITICAL - $used_space% of disk space used."
    exit 2
    ;;
  *)
    echo "$used_space% of disk space used."
    exit 3
     ;;
esac
对于bash和case:

case $used_space in
  [1-9]|[1-7][0-9]|8[0-4]) # range 1-84
    echo "OK - $used_space% of disk space used."
    exit 0
    ;;
  85)
    echo "WARNING - $used_space% of disk space used."
    exit 1
    ;;
  8[6-9]|9[0-9]|100)        # range 86-100
    echo "CRITICAL - $used_space% of disk space used."
    exit 2
    ;;
  *)
    echo "$used_space% of disk space used."
    exit 3
     ;;
esac

请看一看:嗨,赛勒斯,这个垃圾场只来自那个网站。我不知道什么范围只能匹配提到的单个字符,因为重复。如果我这样做:如果$used\u space=>1&&used\u space@RainaM:no=>。一般来说,您应该更加小心您的语法。每个角色都很重要。例如,在第一个表达式中写入$used_空格,在第二个表达式中写入used_空格。这是可行的,但只在算术评估中。请看一看:嗨,赛勒斯,这个垃圾场只来自那个网站。我不知道什么范围只能匹配提到的单个字符,因为重复。如果我这样做:如果$used\u space=>1&&used\u space@RainaM:no=>。一般来说,您应该更加小心您的语法。每个角色都很重要。例如,在第一个表达式中写入$used_空格,在第二个表达式中写入used_空格。这是可行的,但只能在算术计算中使用。有很多方法可以做到这一点,包括[[,[和]。评论中的链接提供了建议。也许关于这三者之间的区别的一点注释也可能有用。有一篇关于bash中的测试构造的文章可以用于算术表达式[[对于字符串测试很有用,但是在上面的示例中它也可以完成它的工作。感谢您提供的信息和可选的Jakub!有很多方法可以实现这一点,包括[[],[和。评论中发布的链接提供了一些建议。也许关于这三者之间的区别的一点注释也可能有用。有一篇关于bash中的测试构造可以用于算术表达式的文章[[对于字符串测试很有用,但在上面的示例中它也起到了作用。感谢您提供的信息和可选的Jakub!感谢Cyrus。类似于Reg-ex的语法正是我要找的。干杯。谢谢Cyrus。类似于Reg-ex的语法正是我要找的。干杯。