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中不生效。

你可能感兴趣的:(2021-05-21)