shell脚本开发
grep搜索工具
参数:
- -A<显示行数>:-A NUM, --after-context = NUM,除了显示符合范本样式的那一行之
- 外,并显示该行之后的内容。
- -B<显示行数>:--before-context = NUM,除了显示符合样式的那一行之外,并显示该
- 行之前的内容。
- -C<显示行数>:-NUM, --context = NUM,除了显示符合样式的那一行之外,并显示该
- 行之前后的内容。
- -c:统计匹配的行数
- -e :实现多个选项间的逻辑 or 关系
- -E:扩展的正则表达式,grep -E 等同于 egrep
- -f FILE:从 FILE 获取 PATTERN 匹配
- -F :相当于 fgrep
- -i --ignore-case #忽略字符大小写的差别。
- -n:显示匹配的行号
- -o:仅显示匹配到的字符串
- -q: 静默模式,不输出任何信息
- -s:不显示错误信息。
- -v:显示不被 pattern 匹配到的行,相当于[^] 反向匹配
- -w :匹配 整个单词
sed
sed [
参数
] '[
地址定界
] command' file
- 【command】常用的有如下几种:
- d:表示删除行。
- p:打印该行。
- a:在当前行之后插入新行新内容,每行末尾需要使用‘\’续行。
- i:在当前行之前插入新行新内容,每行末尾需要使用‘\’续行。
- c:c 符号后的新行新内容,替换当前行中的文本,每行末尾需要使用‘\’续行,整行
- 替换。
- r:读取指定文件的内容。
- w:写入指定文件。
- s:替换指定字符
参数
-n:静默模式。不输出模式空间内容到屏幕。
- d:表示删除行。
- p:打印该行。
- a:在当前行之后插入新行新内容,每行末尾需要使用‘\’续行;
- i:在当前行之前插入新行新内容,每行末尾需要使用‘\’续行;
- c:c 符号后的新行新内容,替换当前行中的文本,每行末尾需要使用‘\’续行,整行
- 替换
- r:读取指定文件的内容。
- w:写入指定文件。
-
s :替换指定字符。
-
-i:直接将处理结果写到文件中。
实训一:安装nginx脚本
#!/bin/bash
# 查询是否安装了 ssh 服务,结果重定向到临时文件 temp_text 中
dpkg -l | grep nginx > temp_text
if [ $? -ne 0 ]
then
# 安装 ssh 服务
sudo apt-get install nginx -y
# 修改配置,允许 root 远程登录
fi
# 查询是否开启了 ssh 服务,结果重定向到临时文件 temp_text 中
ps -e | grep nginx > temp_text
if [ $? -ne 0 ]
then
sudo systemctl start nginx
fi
awk 基本语法
awk '{pattern + action}' {filenames}
- $0 变量:指的是整条记录
-
NF:以空格或 tab 分隔
-
FS:默认为空格或 tab,如 tail -n 5 /etc/passwd |awk -F : '{print $1,$5}' ,将以冒号为分隔符,打印出 /etc/passwd 文件后 5 行的第一、第五列的内容
- $1 表示第一个域,$n 表示第 n 个域
统计test中a出现的次数:
Python 脚本开发及其在 DevOps 中的应用
os 模块
编程实现获取
/root
目录下的所有
.sh
文件并将其打印输出
import os
path = os.chdir('/home/dhy/course04')
sh_files = [f for f in os.listdir(path) if '.sh' in f]
print(sh_files)
path 子模块
datetime 模块
date 子模块
- today():获取今天的时间。
- date():构造日期。
-
对 d 进行格式化输出,返回格式为字符串。 %Y 表示年份、 %m 表示月份、 %d 表示日。
time 子模块
time
子模块,以小时、分钟和秒表示一天中的时间。分别获取小时、分钟、秒、毫
秒,调用 strftime()将 t 转化为指定格式的时间, %H 表示小时,%M 表示分钟,%S 表示
秒钟
datetime 子模块
获取当天的日期时间,使用
strftime
()进行格式化,转换为字符串类型;使用
strptime
()将字符串类型的时间转成
datetime
类型的时间
timedelta 子模块
timedelta 子模块用于时间的计算。
psutil 模块