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.输出第1,3两列的内容
awk '{print $1,$3}' 01_awk.txt
nihao awk2
nihao awk5
3.输出第1,3两列的内容,并且显示行号
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.模板文件2:02_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 变量名 in
值1)
指令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
格式
for 值 in 列表
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时间按戳
- 开启代码:先远后近