每次上线,先把内网代码用xhell拖到本地。再拖到线上服务器。

拖来拖去,太慢了。所以写了一个上线脚本

写了几次版本,这个是最终版本


scp_v3.sh

内容如下:

#!/bin/bash


#注释

:<<BLOCK

内网项目message,路径是/message/trunk/.....文件

线上路径是/server/www/....文件

那么scp的命令为

scp -r -P 22 -r /message/trunk/.....文件 192.168.1.110:/server/www/....文件

本脚本就是为了实现这个scp命令,有多个文件,循环执行.

执行方法为

./scp_sto_v3.sh /message/trunk/.....文件

例如:

./scp_sto_v3.sh /message/trunk/kdCore/library/stoSdk/providers/kuaiDts.php /message/trunk/www/view/common/header.php

BLOCK


echo -e "\033[31m 只适用于message项目,请知晓! \033[0m"


# 上线到线上服务器


case $* in

*)

#获取脚本后面输入的值,也就是本地文件绝对路径

a=$*


echo "Project message online to aliyun_sto" && read -n 1 -p "Please press any key to continue"

#判断参数的长度

aa=`echo "$a"| tr -cd " " | wc -c`

#定义初始变量

i=1

#定义方法

function cc(){

#以空格为单位,确定字符串分隔后的长度

split=`echo $a|cut -d " " -f$i`

#判断是否为空

        if [ "$split" != "" ]

        then

#自加一次

                ((i++))

                #echo $split

#截取文件,获取项目名

pro=`echo $split | cut -d "/" -f 2`

#判断是否属于message项目

if [ "$pro" != "message" ];then

echo -e "\033[31m $split 非message项目,程序退出 \033[0m"

exit

fi

#截取线上服务器目录,排除/server/www

        b=`echo ${split:18}`

#拼凑上线文件在远程服务器的绝对路径

        c=`echo ${b%/*}`

#创建线上服务器文件目录,不管是否存在,都创建

        ssh root@58.218.208.13 "mkdir -p /server/www/$c"

#传输文件,分别到2台服务器

        scp -r -P 22 -r $split 58.218.208.15:/server/www/$b


else

                break

        fi

}


#判断变量长度,0表示只有一个文件

if [ "$aa" == 0 ];then

while(($i==1))

do

#执行cc方法

cc

done

else

while((1==1))

do

cc

done

fi


;;


esac;