比较 shell 中的数字

Compare numbers in shell

比较 shell 中的 2 个响应代码时遇到问题。 运行 curl 并需要验证响应是否在 200 到 400 之间。此外,当服务器关闭时,响应有可能为“000”。

#!/bin/sh
response1="200" #curl first url
response2="000" #curl second url

if (( $response1 -ge 400 || $response1 -lt 200 || $response2 -ge 400 || $response2 -lt 200 )) ; then
  echo "Something went wrong, response code is not in success range"
  exit 1
else
  echo "Success"
  exit 0
fi

((: 200 -ge 400 || 200 -lt 200 || 000 -ge 400 || 000 -lt 200 : syntax error in expression (error token is "400 || 200 -lt 200 || 000 -ge 400 || 000 -lt 200 ")

如果我将括号更改为 [[...]],它总是 returns 为真。 如果我将 -lt 更改为 < 并将 -ge 更改为 >= 出现以下错误:

((: 200 = 400 || 200 < 200 || 000 = 400 || 000 < 200 : attempted assignment to non-variable (error token is "= 400 || 200 < 200 || 000 = 400 || 000 < 200 ")

请尝试:

if [ $response1 -ge 400 ] || [ $response1 -lt 200 ] || [ $response2 -ge 400 
 ] || [ $response2 -lt 200 ] ; then
  echo "Something went wrong, response code is not in success range"
  exit 1
else
  echo "Success"
  exit 0
fi

错误的操作员。正确的写法是:

if (( response1 > 400 || response1 < 200 || response2 > 400 || response2 < 200 )) ; then

无需使用 $ 显式取消引用,只要确保您的变量仅包含整数即可。