bash如果大于等于错误
bash if greater than or equal to error
下面的 bash 脚本出现错误;
line 16: [: : integer expression expected
但我不明白为什么?错误在于 if [ "$(log_date)" -le "$days_in_ms" ]; then
任何人都可以帮助解释为 BASH if statements confuse me
#!/bin/bash
region="eu-west-1"
retention_days="28"
days_in_ms="$(date +%s%3N --date=-"$retention_days"+days)"
log_date () {
aws logs describe-log-streams --region $region --log-group-name "$groups" | jq -r '.logStreams[].lastEventTimestamp' > /dev/null 2>&1
}
log_name () {
aws logs describe-log-streams --region $region --log-group-name "$groups" | jq -r '.logStreams[].logStreamName' > /dev/null 2>&1
}
mapfile -t logGroups < <(aws logs describe-log-groups --region $region | jq -r '.logGroups[].logGroupName') > /dev/null 2>&1
for groups in "${logGroups[@]}"; do
if [ "$(log_date)" -le "$days_in_ms" ]; then
log_name
fi
done
发生了什么事
注意错误消息的详细信息:
[: : integer expression expected
看到第二个:
之前的空白了吗?这就是 [
尝试操作的值,如果有一个 。它是空白的,意味着 [
被告知根本没有数字。
举例说明其工作原理:
$ [ foo -ge 1 ]
-bash: [: foo: integer expression expected
请注意,foo
与空白处的位置相同。因此,空白值被解析为数字。
为什么会这样
您的 log_date
函数不会 return 任何输出,因为它 >/dev/null
。因此,您的代码会尝试将它 return 的空字符串解析为一个数字,并且(正确地)抱怨它在需要整数的位置得到一个空字符串。
将来,运行 set -x
启用每个命令在 运行 之前的日志记录,或者在调试时使用 bash -x yourscript
调用您的脚本,以识别这些问题.
下面的 bash 脚本出现错误;
line 16: [: : integer expression expected
但我不明白为什么?错误在于 if [ "$(log_date)" -le "$days_in_ms" ]; then
任何人都可以帮助解释为 BASH if statements confuse me
#!/bin/bash
region="eu-west-1"
retention_days="28"
days_in_ms="$(date +%s%3N --date=-"$retention_days"+days)"
log_date () {
aws logs describe-log-streams --region $region --log-group-name "$groups" | jq -r '.logStreams[].lastEventTimestamp' > /dev/null 2>&1
}
log_name () {
aws logs describe-log-streams --region $region --log-group-name "$groups" | jq -r '.logStreams[].logStreamName' > /dev/null 2>&1
}
mapfile -t logGroups < <(aws logs describe-log-groups --region $region | jq -r '.logGroups[].logGroupName') > /dev/null 2>&1
for groups in "${logGroups[@]}"; do
if [ "$(log_date)" -le "$days_in_ms" ]; then
log_name
fi
done
发生了什么事
注意错误消息的详细信息:
[: : integer expression expected
看到第二个:
之前的空白了吗?这就是 [
尝试操作的值,如果有一个 。它是空白的,意味着 [
被告知根本没有数字。
举例说明其工作原理:
$ [ foo -ge 1 ]
-bash: [: foo: integer expression expected
请注意,foo
与空白处的位置相同。因此,空白值被解析为数字。
为什么会这样
您的 log_date
函数不会 return 任何输出,因为它 >/dev/null
。因此,您的代码会尝试将它 return 的空字符串解析为一个数字,并且(正确地)抱怨它在需要整数的位置得到一个空字符串。
将来,运行 set -x
启用每个命令在 运行 之前的日志记录,或者在调试时使用 bash -x yourscript
调用您的脚本,以识别这些问题.