下面是我的代码
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