Bash 给我:参数错误太多

Bash 给我:参数错误太多

我有一个 bash 脚本,它检查是否ACCESS_TOKEN等于 null 它将退出。

ACCESS_TOKEN=$(jq -r '.access_token' <<<"$(curl --request GET \
  --url 'https://'$LANDSCAPE'/oauth/token/?grant_type=client_credentials' \
  -u "$CLIENT_ID":"$CLIENT_SECRET")")
if [[ -n $ACCESS_TOKEN -eq null ]]; then 
   exit 1
fi

或者:

ACCESS_TOKEN=$(jq -r '.access_token' <<<"$(curl --request GET \
  --url 'https://'$LANDSCAPE'/oauth/token/?grant_type=client_credentials' \
  -u "$CLIENT_ID":"$CLIENT_SECRET")")
if [ -n "$ACCESS_TOKEN" -eq null ]; then 
   exit 1
fi

控制台记录:

+ ACCESS_TOKEN=null
+ '[' -n null -eq null ']'
/tmp/jenkins6798373284183556496.sh: line 8: [: too many arguments

看起来效果if condition不太好。

答案1

如果你想检查字符串是否不为空如果它是“null”,更好的语法是:

if [ -n "$ACCESS_TOKEN" ] && [ "$ACCESS_TOKEN" = "null" ] 
then 
   exit 1
fi

正如 @Tomaz 正确指出的那样,您无法使用 Bash 语法同时检查两个前提。

正如@Kusanalanda 也指出的那样,第一个测试是无关紧要的,只是为了说明/解释if用法。按照逻辑,如果再次测试 $ACCESS_TOKEN细绳“null”,那么它已经隐含了字符串不能为空,所以实际上可以重写为:

if [ "$ACCESS_TOKEN" = "null" ] 
then 
   exit 1
fi

答案2

看看这个:

[ -n "$ACCESS_TOKEN" -eq null ]

[是测试操作员,它可以检查:

  • 如果字符串值不为零 - 当您使用-n

  • 比较两个整数 - 当您使用-eq

但不能同时两者! (至少不是在这个表格中。)所以你必须选择你想在这个表格中检查的内容[。如果您想与 进行比较null,那么它将是字符串比较,这是通过=运算符完成的。

答案3

你可以使用 shell 的

参数扩展。 。 。 ${参数:-word} 使用默认值。如果参数未设置或为空,则替换单词的扩展。

喜欢

if [ "${ACCESS_TOKEN:-x}" = null ]; then echo Yes; else echo No; fi;

请注意,它是 中的文字字符串“null” test,而不是变量的 null“属性”。

相关内容