gpt4 book ai didi

bash 如果大于或等于错误

转载 作者:行者123 更新时间:2023-11-29 09:50:20 25 4
gpt4 key购买 nike

使用下面的 bash 脚本时出现错误;

第 16 行:[: : integer expression expected 但我不明白为什么?错误在于 if [ "$(log_date)"-le "$days_in_ms"]; then 如果语句让我感到困惑,任何人都可以帮助并解释为 BASH

#!/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 函数不返回任何输出,因为它的 >/dev/null。因此,您的代码会尝试解析它作为数字返回的空字符串,并(正确地)提示它在需要整数的位置得到一个空字符串。

将来,运行 set -x 以在每个命令运行之前启用日志记录,或者在调试时使用 bash -x yourscript 调用脚本,以识别这些命令问题。

关于bash 如果大于或等于错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49903577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com