上传文件到服务器后执行脚本_bash脚本上传项目到服务器(一)

背景介绍 之前因为需要上传代码到服务器,而且是两台!而且是不同的环境!而且是两个项目!每次上传都费了好大劲,手指都敲疼了,关键是效率太低了,所以受不了了,于是打算写一个 bash脚本 来实现自动化上传。我当时看的是阮一峰老师写的《bash教程》 [1] 。 Part 0

因为是公司的服务器,所以就不方便就我遇到的情况进行演示,那么可以假定有这么一个场景:

  • 你的本地电脑上有两个前端项目,假定名称为 project1project2,在打包成生产版本后压缩成zip格式的文件,假定名称都是 dist.zip

  • 需要上传到两台服务器,对应的名称和ip地址分别为:host1 / 192.163.22.3;host2 / 192.167.23.6,登录这两台服务器的密码是 m123456,当然你也可以不设置密码

  • 本地代码 project1 需要上传到两台服务器的位置为:/data/resource/fontend/project1project2 需要上传到服务器的位置为:/data/resource/fontend/project2

  • 选择一个上传工具,就是本地主机和服务器主机的软件,这个随意选择。我都是使用公司自研的,所以其他工具不太了解,不过要选择可以使用命令行命令的工具,这样才能更好的实现脚本自动化
Part 1

首先编写登录服务器的脚本,命名为 login.sh。目前我使用的都是 ssh 登录方式,具体形式为:ssh username@ip -p port。正如之前所说,有两台服务器,那么可以做一个选择项显得更加人性化,而且能有更好的提示:

#! /bin/bash# login.sh# ssh loginecho "please choose host ip: "select ip in 192.163.22.3 192.167.23.6    do         case $ip in            "192.163.22.3")                ssh root@192.163.22.3 -p 22                echo "login success"                break;;             "192.167.23.6")                ssh root@192.167.23.6 -p 23                echo "login success"                break;;             *)                echo "Invaild input"                break;;          esac      done

当使用 source login.sh 运行后命令行就会提示你进行选择,这时你可以输入 1 或者 2 来选择你将要进行登录的服务器ip:

8bf0c7068fc71bb6509347ff60c54b0a.png

假如你设置了密码,下一步会提示你输入密码,之后就进入了服务器了!

目前使用了一次命令 Part 2

进入到服务器之后,建议使用 sudo su 命令切换为 root 用户,这样免去了无权限的情况,当然还是看具体情况了。现在要做的就是写一个上传代码的脚本,命名为 upload.sh。这里另提一下,不要将 sudo su 命名写到脚本里,因为它会中断脚本的执行,具体原因也不清楚,感兴趣可以自行 google / 百度。具体的要求是上传两个代码压缩包到服务器指定目录:

#!/bin/bash# upload.sh# mvdir function used by implements change directory namefunction mvdir() {    # judge whether project1 / project2 exist ?    # 判断 project1 / project2 是否存在    if [ -d "$1" ]; then          # yes          mv $1 $1_bak_$(date +%F_%T)          mv temp$1 $1          echo "update $1 success"     else           # no           mv temp$1 $1           echo "new add $1 success"      fi}# upload function used by implements upload logic# 上传时的逻辑为:# 1. 新建一个临时的文件夹,带有 temp 前缀,即 tempproject1 / tempproject2。因为可能 /data/resource/fontend 下# 有之前的 project1 / project2,一般来说不会将之前的覆盖,而是改个名字保存下来,用于恢复# 2. 进入 tempproject1 / tempproject2 中,执行上传代码命令上传dist.zip,之后解压zip# 3. 回到上级目录,将之前的 project1 / project2 改名为 project1(2)_bak_${current_time};  # 将 tempproject1 / tempproject2 改名为 project1 / project2function upload() {        mkdir temp$1 && cd temp$1    echo "mkdir $1 success"    # 上传dist.zip的具体代码,因为每个工具的命令估计不一样,视不同工具而定    # 模拟上传命令,不可使用    up -g $1/dist.zip    echo "upload dist.zip success"    # 解压    unzip dist.zip    # 回到上级目录    cd ..    echo "back to $(pwd) success"    # 改名目录名    mvdir $1}# enter /data/resource/fontend 进入 project1 和 project2 的上级目录cd /data/resource/fontendecho " $(pwd) "echo "please choose upload resource, project1 or project2: "select res in project1 project2    do        case $res in            "project1")                upload project1                break;;            "project2")                upload project2                break;;             *)                 echo "Invalid input"                 break;;          esac      done             

执行 source upload.sh 之后,就是进行文件的自动上传,包括文件的重命名。下图中没有上传的操作信息,因为 project1 之前存在,所以是 update project success

a4ac2ca17506a65b03c9cad8f17f21c0.png

因为 project2 没有存在,所以是 new add project2 success

a6d53aa5f195d1a3c54a8a3194e81b47.png

目前是使用第二次命令 总结 好了,只使用了两次命令就搞定了文件上传,想象一下之前我上传时需要多少命令啊!这极大地提高效率。这两个脚本还有一些需要完善的地方,例如更好的提示信息,文字颜色,还有最重要的错误处理,这些在之后的文章中会一一说明,因为我还没有做呢~~~。 碎碎念 做开发这么长时间了,自我感觉对编程语言的适应,理解,使用算是有了一些感觉了,自我思考和自我动手能力也有了提升。现在就我来看,一些语言或者工具的出现就是为了解决一些出现的问题,所以抱着这个心态去看待会更能理解它们为啥而来,从何而来,这样学习就会有一种大局观,就是不知道如何使用,在心里也能有个大致的了解,对解决问题很有帮助,毕竟解决问题时要知道问题出在哪里,才能想办法解决。当然自己也有很多缺点,例如不习惯看别人的代码,算法不行,英文阅读不太好。。。 参考

[1]: https://wangdoc.com/bash/script.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值