首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用shell实现简单代码获取脚本

最近在学习shell编程,编程这件小事个人觉得多练练才能学的好学得扎实。平常工作中一般用gitlab进行版本控制,开发中就避免不了将代码获取到测试机上去调试代码,用过phpstorm的人都知道,ps集成了代码自动上传的功能,用起来也很方便。但是本着学习的目的,我就尝试自己写一段sell一条命令实现代码自动获取到服务器。下面是代码内容:

trans.sh

#!/bin/bash

echo 'start...'

##############获得用户输入选项和参数############

while getopts :csp: opt ;do

#标记用户想要获取client或是server #client和server是平时我们工作中的两个仓库

case "$opt" in

c ) client_flag=1 ;;

s ) server_flag=1 ;;

p ) postfix_name=$OPTARG

postfix_flag=1 ;;

* ) echo "Unknow option:'$opt'"

exit 13 ;;

esac

done

shift $[$OPTIND - 1]

#引入配置

source /usr/local/sh/config.sh

#根据参数个数作不同处理

if [ "$postfix_flag" = 1 ] ;then

client_branch="$PREFIX_CLIENT$postfix_name"

server_branch="$PREFIX_SERVER$postfix_name"

else

if [ "$#" -gt 2 ];then

#参数超过两个提示错误

echo "too much paramter"

exit 10

elif [ "$#" = 0 ]; then

client_branch="master"

server_branch="master"

elif [ "$#" = 1 ]; then

#一个参数时

if [ -n "$client_flag" ];then

client_branch=$1

else

client_branch="master"

fi

if [ -n "$server_flag" ]; then

server_branch=$1

else

server_branch="master"

fi

elif [ "$#" = 2 ]; then

#两个参数时默认第一个为client,第二个为server

client_branch=$1

server_branch=$2

fi

fi

echo "Going to get $client_branch and $server_branch code..."

################################################

#function #将命令输出信息重定向到文件

function fd {

if [ "$#" = 0 ]; then

#输出内容存在文件中

echo '' >"$dir/access"

else

$1 2>> "$dir/access"

fi

}

#获取client仓库代码,并保存到服务器临时目录

function updateITClientCode {

cd "$dir"

if [ -d "./ITClient" ] ;then #ITClient is a directory,or not?

fd "cd $ITClient"

if [ ! -d "./.git" ];then

fd "git init"

else

fd "git checkout master"

fd "git branch -D $client_branch" #delete local branch

fi

else

fd "git clone $client_url"

echo "get $ITClient repository from git ...."

fd "cd $ITClient"

fi

echo "git fetch $client_branch content ...."

if fd "git fetch origin $client_branch" ;then

if [ "$client_branch" = "master" ];then

fd "git checkout -b $ITClient FETCH_HEAD"

else

fd "git checkout -b $client_branch FETCH_HEAD"

fi

echo "client code has in workspace ..."

else

echo "fail:Coudln\`t fetch $client_branch"

exit 14

fi

}

#获取server仓库代码,并保存到服务器临时目录

function updateITServerCode {

cd "$dir"

if [ -d "./ITServer" ] ;then #ITServer is a directory

fd "cd $ITServer"

if [ ! -d "./.git" ];then

fd 'git init'

else

fd "git checkout master"

fd "git branch -D $server_branch" #delete local branch

fi

else

fd "git clone $server_url"

echo "get $ITServer repository from git ...."

fd "cd $ITServer"

fi

echo "git fetch $server_branch content ...."

if fd "git fetch origin $server_branch";then

if [ "$server_branch" = "master" ];then

fd "git checkout -b $ITServer FETCH_HEAD"

else

fd "git checkout -b $server_branch FETCH_HEAD"

fi

echo "server code has in workspace ..."

else

echo "fail:Coudln\`t fetch $server_branch"

exit 14

fi

}

# ########################################################

# #

# ######代码从git仓库克隆到服务器的临时目录#######

gitplace=$(which git) #have git?

if [ -n "$gitplace" ];then

gitconfig=`git config user.name`

if [ ! -n "$gitconfig" ];then

git config --global user.name "$Name"

git config --global user.email "$Email"

fi

if [ ! -d "$dir" ]; then

mkdir "$dir"

fi

fd

if fd "cd $dir" ;then

updateITClientCode

updateITServerCode

else

echo "$dir:no such directory"

exit 15

fi

else

echo "this machine does not have git,please install it"

exit 12

fi

################################################

#copy code to target location #代码从临时目录拷贝到apache根目录

cd "$dir"

#copy client

if [ ! -d "/usr/ET/project/ITClient" ];then

fd "mkdir /usr/ET/project/ITClient"

fi

fd "cp ./ITClient/bin-debug/ITClient.swf /usr/ET/project/ITClient/ITClient.swf"

#delete branch #复制完代码后这里将本地分支删除

cd "$ITClient"

fd "git checkout master"

if [ "$client_branch" = "master" ];then

fd "git branch -D $ITClient"

else

fd "git branch -D $client_branch"

fi

cd ..

#copy server

fd "shopt -s extglob"

if [ ! -d "/usr/ET/project/ITServer" ];then

fd "mkdir /usr/ET/project/ITServer"

fi

fd "cp -prf ./ITServer/!(itconfigitsvrconf.php) /usr/ET/project/ITServer"

#delete branch

cd "$ITServer"

fd "git checkout master"

if [ "$server_branch" = "master" ];then

fd "git branch -D $ITServer"

else

fd "git branch -D $server_branch"

fi

cd ..

echo

echo "-----------------get code from git success!-----------------------"

echo

下面是配置文件

config.sh

#!/bin/bash

USER_ACCOUNT=**** #登陆git的用户名

USER_PASSWORD=**** #登陆git的密码

#

dir="/usr/local/sh/temp" #临时目录

#

PREFIX_CLIENT="ITClient" #分支的前缀,输入p参数时有效

PREFIX_SERVER="ITServer"

#

ITClient="ITClient" #获取master分支时为了删除方便,起了个别名

ITServer="ITServer"

client_url="client repository code url"

server_url="server repository code url"

#

Name="Your Name"

Email="Your Email"

#

代码亲测可用,平时开发时也在用着呢,写脚本的其中一个方便之处就是直接一条命令./transh.sh -p _v1.40s就能把整个工程代码获取下来,实在太快太省事了。

代码源地址:https://github.com/walry/yuwenlanzi.git

如果你感兴趣可以加微信:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180207G0ZX3C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券