美文网首页
2021-05-21

2021-05-21

作者: little多米 | 来源:发表于2021-05-21 14:01 被阅读0次

    实现了一个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

          本文链接:https://www.haomeiwen.com/subject/xqswjltx.html