shell命令、 batch命令(bat) 上传代码

1、通过.bat文件上传代码

upload.bat文件内容

%1是远程服务器地址 例如10.0.0.127
%2 是远程服务器前端项目所在的目录地址 例如:a/b/project/
执行命令例如: test.bat 10.0.0.127 a/b/project/

@echo off

:loop
set /p a=Do you want to upload?(yes)
if /i '%a%'=='yes' (
	// scp 加密复制 上传本地代码到远程
   scp -r ./dist root@%1:%2/dist_new_%date:~0,4%%split%%date:~5,2%%split%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
    // D:\Git\Git\bin\sh.exe" --login -i -c 使用bat执行shell脚本
  	// 因为linux服务器使用shell比较方便
  	// 该bash -s 命令的意思是“在新的 bash 会话中执行以下命令”。
  	// 该-s 标志使其从标准输入读取,
  	// 该< script.sh 位将本地脚本文件读入标准输入。
   "D:\Git\Git\bin\sh.exe" --login -i -c "ssh root@%1 'bash -s' < ./script.sh %2 dist_new_%date:~0,4%%split%%date:~5,2%%split%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%"
)
exit 0

script.sh文件内容

cd $1
dirdate=`date +%Y%m%d`_`date +%H%M%S`
pwd

if [ ! -d "$2" ];then
    echo "文件夹不存在"
    echo $2 
else
    echo "文件夹存在" 
    echo $2 
    mv ./dist ./dist_${dirdate}
    ls
    mv ./$2 ./dist
    ls
    echo "更新完成"
fi

2、通过shell命令上传代码

$1是远程服务器地址 例如10.0.0.127
$2 是远程服务器前端项目所在的目录地址 例如:a/b/project/
执行命令例如: sh test.sh 10.0.0.127 a/b/project/

upload.sh 内容(远程加载执行本机sh文件内容)

read -r -p "Are You Sure? [Y/n] " iskill
case $iskill in
    [yY][eE][sS]|[yY])
		echo "Yes"
			dirdate_1=`date +%Y%m%d`_`date +%H%M%S`
            scp -r ./dist root@$1:$2/dist_new_${dirdate_1}
            ssh root@remoteAdress 'bash -s' < ./script.sh $2 dist_new_${dirdate_1}
		;;
 
    [nN][oO]|[nN])
		echo "No"
       		;;
 
    *)
	echo "Invalid input..."
	exit 1
	;;
esac
exit 0

script.sh文件内容

cd $1
dirdate=`date +%Y%m%d`_`date +%H%M%S`
pwd

if [ ! -d "$2" ];then
    echo "文件夹不存在"
    echo $2 
else
    echo "文件夹存在" 
    echo $2 
    mv ./dist ./dist_${dirdate}
    ls
    mv ./$2 ./dist
    ls
    echo "更新完成"
fi

upload.sh 内容(远程加载执行本分shell命令)

注意:“ENDSSH” 关键词会因为tab格式化失效

read -r -p "Are You Sure? [Y/n] " iskill
case $iskill in
[yY][eE][sS]|[yY])
echo "Yes"
scp -r ./dist root@remoteAdress:/a/project/dist_new
ssh root@remoteAdress 'bash -s' <<'ENDSSH'
cd /a/project/
dirdate=`date +%Y%m%d`_`date +%H%M%S`
pwd

if [ ! -d "dist_new" ];then
    echo "文件夹不存在"
else
    mv ./dist ./dist_old
    ls
    mv ./dist_new ./dist
    ls
    echo "文件夹存在"
fi
ENDSSH
;;

[nN][oO]|[nN])
echo "No"
;;

*)
echo "Invalid input..."
exit 1
;;
esac
exit 0

注意:window默认是可以执行的bat文件,但是不能执行shell文件, 如果想要执行,需要配置git的目录的bin文件夹目录地址到用户系统变量path上

shell命令、 batch命令(bat) 上传代码_第1张图片

远程 SSH 服务器上运行本地 Shell 脚本参考链接

你可能感兴趣的:(batch,ssh)