2021-05-21

实现了一个shell脚本,自动提交代码更新。配合jenkins使用。

完整代码

git add .

is_change=0
temFile="temFile"
git status > $temFile
while read aline
do
echo $aline
        if [ "$aline" = "Changes to be committed:" ]
#       if [ "$aline" = "Untracked files:" ]
        then
                is_change=1
        fi
done < $temFile

if [ $is_change -eq 1 ]
then
        git commit -m "自动更新"
                git push
fi

前提条件

  • shell执行用户有文件夹权限
  • 不需要显式认证(git上配置了ssh或者保存了用户名密码)

原理
执行git status,获取当前状态
遍历状态字符串,是否包含"Changes to be committed:"等字符串
如果包含上述字符串则进行commit和push

关键代码就是循环比对,遇到while循环变量作用域问题

git status | while read aline
do
echo $aline
        if [ "$aline" = "Changes to be committed:" ]
#       if [ "$aline" = "Untracked files:" ]
        then
                is_change=1
        fi
done

上面虽然执行了is_change=1,但没有执行commit和push。问题出在while上。
while循环读取文件中内容有两种写法,一种是管道符,一种是重定向。
重定向是内建命令,而管道符是非内建命令,linux执行shell时,会创建“子shell”运行shell中的命令,当运行到非内建指令时,会创建“孙shell”运行非内建指令
变量的作用于在每个shell中有效,所以,非内建指令中定义的这些变量就只能在孙shell运行,而在子shell中不生效。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容