每次上线,先把内网代码用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 [email protected] "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;