day075 SHELL_流程控制&代码发布

awk命令

  • 强大的文档编辑工具,可以以行也可以以列来标记文档

格式

awk 参数 ‘动作’ 文档

常用参数

-F :指定行的分隔符

常用动作

  • print :显示内容
  • $0,表示当前行的所有看列
  • $n,表示当前行的第n列

示例:

模板文件 01_awk.txt
nihao awk1 awk2 awk3
nihao awk4 awk5 awk6

1.输出第一列的内容
awk '{print $1}' 01_awk.txt

nihao 
nihao

2.输出第13两列的内容
awk '{print $1,$3}' 01_awk.txt

nihao awk2
nihao awk5

3.输出第13两列的内容,并且显示行号
awk '{print NR, $1, $3}' 01_awk.txt

1 nihao awk2
2 nihao awk5

4.输出第一行的第一列和第三列内容
awk 'NR==1 {print $1, $3}' 01_awk.txt

nihao awk2

5.模板文件202_awk.txt
you said:lallala  111
i say:hehehe 222

输出以‘:’分隔的第一列和第2列内容:
之前的语句:
awk '{print $1, $2} 02_awk.txt'

you said:lallala
i say:hehehe

会发现不符合要求,此时需要使用参数-F
awk -F ':' '{print $1,$2}' 02_awk.txt

you said lallala  111
i say hehehe 222

find命令

  • 用来查找文件的命令
格式

find 路径 选项 关键字

路径
  • 路径可以使相对路径,也可以是绝对路径
选项
  • -name :以文件名查找
  • -type :以文件类型来找
    • d:目录
    • f:普通文件
    • p:管道文件
    • l:符号链接文件
  • perm 按照文件权限来查找文件。
  • user 按照文件属主来查找文件。
  • group 按照文件所属的组来查找文件。
关键字
  • 使用 -name选项查找时,需要加引号,可以使用正则

实例

# 查找当前目录下的所有 .txt文件
find ./ -name '*.txt'

# 查找桌面上的所有普通文件
find /Users/.../Desktop/ -type f

# 查找桌面上的所有普通文件中为.py类型的文件
find /Users/.../Desktop/ -type f -name '*.py'

* 注意,查找为递归查找

流程控制

分支

单分支if

格式
if [ 条件 ]
then
    指令
fi
示例
#!/bin/bash
# 单if
if [ '$1' == 'nan' ]
then 
 echo "男"
fi

双分支if

格式
if [ 条件 ]
then
    指令1
else
    指令2
fi
示例
#!/bin/bash
# 双if
if [ "$1" == "nan" ]
then
    echo "男"
else
    echo "nv"
fi

多分支if

格式
if [ 条件1 ]
then
    指令1
elif [ 条件2 ]
then
    指令2
else
    指令3
fi
示例
#!/bin/bash
if [ "$1" == "nan" ]
then
    echo "男"
elif [ "$1" == "nv" ]
then
    echo "女"
else
    echo "性别不明"
fi

case

格式
case 变量名 in1)
        指令1
            ;;
    值2)
        指令2
            ;;
        ...
    值n)
        指令n
            ;;
    esac
示例
              #!/bin/bash
                # case 服务启动脚本
                case "$1" in
                  "start")
                    echo "服务启动中..."
                    ;;
                  "stop")
                    echo "服务关闭中..."
                    ;;
                  "restart")
                    echo "服务重启中..."
                    ;;
                  *)
                    echo "脚本 $0 使用方式: /bin/bash $0 [ start|stop|restart ]"
                    ;;
                esac

循环

for

格式
forin 列表
do 
  执行语句
down
示例
#!/bin/bash
# for 结构
# 输出当前目录下的所有文件名
for i in $(ls)
 do
  echo "当前目录下有文件${i}"
 done

while

格式
while [ 条件 ]
do
  执行语句
done
示例
#!/bin/bash
# while语句的使用
# 输出1,2,3,4四个数字
a=1
while [ "${a}" -lt 5 ]
do 
 echo "${a}"
 a=$((a+1))
done

until

格式
until [ 条件 ]
do
  执行语句
done 
示例
#!/bin/bash
# 测试until的语法
# 输出1,2,3,4四行数字
a=1
until [ "${a}" -eq 5 ]
do 
  echo "${a}"
  let a=a+1
done

场景:

        单if:    一条件 一结果         双if:    一条件     两结果
        多if:    n 条件    n+1结果           case:   生产服务用
        for:    遍历列表                while:  条件满足,循环
        until:  条件不满足,循环

函数

简单函数

函数的定义和调用
格式:
函数名(){
    函数体
}

调用函数
函数名

示例:

#!/bin/bash
# 函数的定义和调用
# 输出12345
fun(){
 echo "12345"
}

函数传参

函数名传参
格式
函数名(){
    函数体 $n
}
调用函数:
    函数名 参数
示例
#!/bin/bash
# 测试函数传参
# 给函数输入’Michael‘ 并且输出
fun1(){
  echo "$1"
}

fun1 "Michael"
脚本传参
格式
脚本传参数
/bin/bash 脚本名 参数
函数体调用参数

函数名(){
  函数体 $1
}

函数名 $1
示例
#!/bin/bash
# 测试脚本传参
# 给脚本传递‘Michael’,输出
fun2(){
  echo $1
} 

fun2 $1

注意此处函数内调用的依然是函数名传给他的参数
测试,函数名传递的参数和脚本传递的不同即可
#!/bin/bash
# 测试脚本传参
# 给脚本传递‘Michael’,输出 jackson
fun2(){
  echo $1
} 

fun2 'jackson'

代码发布

什么是代码发布

  • 代码,平台,效果
  • 是指将功能完善,测试完毕的代码,上传部署到在有公网ip的服务器上(可以是远程虚拟主机,如阿里云,腾讯云,等各种云),通过浏览器/移动端可以查看展示效果的过程

发布方式

  • 手动发布
  • 自动发布,手工是自动发布的前提

发布的流程

  • 1.获取代码
  • 2.打包代码
  • 3.传输代码
  • 4.关闭服务
  • 5.解压代码
  • 6.放置代码
  • 7.启动服务
  • 8.测试效果
  • 9.正式发布代码

流程详解

1.获取代码

从哪里获取?
  • 代码仓库获取
    • 代码仓库有集中式的SVN和分布式的git
    • svn的几乎所有的操作命令都需要让客户机和主机保持网络连接状态
    • git是每一台客户机都可以有完整的代码仓库,都可以充当主机,不要与所谓的主机保持链接
    • 需要考虑仓库的访问权限和代码的访问权限(开发,管理,查看)
提交的方式
  • 以版本号的形式提交

2.打包代码

  • 将所有的代码统一打包,方便整体快速传输, 使用 tar命令
  • 常见的打包方式:
    • windows:zip, rar
    • linux: tar, zip

3.传输代码

  • 将打包后的代码传到需要部署的服务器上
  • 常见的传输方式
    • 有网:scp, git, ftp
    • 无网:U盘,硬盘

4.关闭应用

  • 停止与发布的相关代码有关的服务,不能关闭网站
  • 注意关闭应用要由近到远,即先关闭离用户最近的页面,发出友好提示,再关闭后端的服务,这样是考虑到用户体验,否则,用户体验会很糟糕。

5.解压代码

  • 将传递过来的压缩代码包进行解压处理
  • 使用tar xf

6.放置代码

  • 将新的代码替换旧的代码
  • 注意,为了防止新代码可能会有问题,导致该功能块没有优化好,反而不能像之前一样正常运行,需要先进行备份旧代码,再放置新代码
  • 使用rm -rf + data 时间戳进行备份

7.打开应用(相关服务)

  • 只打开之前关闭的应用(相关服务)
  • 注意打开的顺序是先远后近,因为要让用户感觉在点点击相关服务页面的时候,就有反应,这就需要先把后端的相关服务开起来

8.测试

  • 使用浏览器或者移动端进行各项功能性,稳定性测试

9.正式发布代码

  • 宣布正式发布代码

技术关键点

文件的压缩和解压缩

压缩
  • tar zcvf 压缩后的文件名 将要压缩的文件

  • 示例

tar zcvf ./scripts.tar.gz ./scripts

解压缩
  • tar xf 压缩后的文件名
  • 示例

tar xf scripts.tar.gz

  • 查看压缩文件的内容: zcat 压缩文件(以二进制的形式查看)

zcat scripts.tar.gz linux中可正常查看

文件的传输

  • 格式:scp 要传输的文件 要放置的位置
    • 1.推送:本地-远端
    • scp scripts.tar.gz root@139.196.88.158:/home/
    • 2.拉取:远端-本地
    • scp root@139.196.88.158:/home/scripts.tar.gz ./
  • 关键点:因为scp的底层是SSH,所以远端主机都需要用户名@公网IP

文件备份

  • 时间戳:date +%Y%m%d%H%M%S
  • 备份命令 :mv scripts.tar.gz scripts.tar.gz-$(date +%Y%m%d%H%M%S)

小结

  • 代码发布:安全可靠的代码部署到服务器上
  • 代码发布的方式:手工+脚本
  • 代码发布流程:
    • 获取代码:权限
    • 打包:tar
    • 传输:scp
    • 停止应用:先近后远
    • 解压代码: tar
    • 放置代码:备份 mv date时间按戳
    • 开启代码:先远后近
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值