我有这个脚本来检查git status
我的所有存储库:
find / -type d -name .git 2>&- |
while read gitFolder; do
if [[ $gitFolder == *"/Temp/"* ]]; then
continue;
fi
if [[ $gitFolder == *"/Trash/"* ]]; then
continue;
fi
if [[ $gitFolder == *"/opt/"* ]]; then
continue;
fi
parent=$(dirname $gitFolder);
if [[ `git -C $parent status --porcelain` ]]; then
echo "";
echo $parent;
git -C $parent status --porcelain
else if [[ $(git -C $parent status | grep ahead) ]]; then
echo "";
echo "$parent is not pushed yet";
fi
done
但它不起作用。如果我删除第二个else-block
,那么它可以工作。
基本上我想知道 git 存储库是否有任何更改(第一个 if)或者它是否在 master 之前(第二个 if)。
如果条件,我应该如何更改第二个?
Bash
if...else if...else
语句采用以下形式:脚本中的具体错误是使用了不正确的关键字
else if
而不是正确的关键字elif
。如果 CONDITION1 评估为 True,则将执行 STATEMENTS1。如果 CONDITION2 评估为 True,则将执行 STATEMENTS2。如果没有任何测试命令评估为 True,则执行 CONDITION3。
依次评估条件。一旦某个条件返回 True,则不执行其余条件,程序控制移至 if 语句的末尾。
您可以在语句中包含一个或多个 elif 子句。
建议:你可以安装
shellcheck
包来检查你的 bash 代码。请参阅https://github.com/koalaman/shellcheck以供参考。尝试更换
和
您可能还想添加
-q
到 grep。这通过用
[[
裸命令替换测试来工作。管道中的最后一个命令 (grep
) 以真或假值退出,这取决于它是否找到任何东西。该-q
选项告诉它只返回该值而不实际打印它找到的内容。注意:您的脚本中还有其他错误也需要修复。