我有一个 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“属性”。