grep 找到零值时以状态 1 退出

grep 找到零值时以状态 1 退出

下面是我的代码

1_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^commit ' |wc -l) && 2_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^Author:' |sort -u|wc -l)

错误:

+ let '1_last_week += 0'
/home/mytestshell.sh exited with return code 1

我在下面尝试引用这个https://blog.m157q.tw/posts/2021/06/09/be-careful-when-using-grep-on-circleci/

1_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^commit ' || true |wc -l) && 2_week=$(git log --since=$(date +"%Y-%m-%d" --date="@$(($(date +%s) - 604800))")|grep '^Author:' || true |sort -u|wc -l)

但如果发现值为零,它仍然给出 exit 1 错误,有人可以指导我在这里缺少什么吗

问候,

答案1

您没有说明这是为哪个 shell 编写的,但通常变量名称不能以数字开头。

我强烈建议您开始将代码粘贴到https://shellcheck.net(或shellcheck本地安装)。它将帮助您发现许多问题,然后您可以直接解决这些问题。

你的风格也会因改进而受益。一长串密集的代码不容易阅读和理解。作为对比,这里是另一种风格

#!/bin/sh
#
dt_since=$(date --date='1 week ago' +'%Y-%m-%d')

nr_commits=$(git log --since="$dt_since" | grep '^commit ' | wc -l)
nr_authors=$(git log --since="$dt_since" | grep '^Author:' | sort -u| wc -l)

$nr_commits然后,您可以使用和中的结果执行一些数学运算$nr_authors。我不确定你想要实现什么,所以我已经解释的您的&&as 表示如果一位作者至少有一次提交,您希望获得成功(0 值)退出状态:

[ $nr_commits -gt 0 ] && [ $nr_authors -gt 0 ]
exit

(请注意,如果$nr_commits不为零,则必须有作者,因此您可以通过$nr_authors完全删除对的检查来优化表达式。)

关于 的错误,您向我们展示的代码中let没有任何错误,因此我们无法提供帮助。let

相关内容