简书python自动化运维_自动化运维快速学习笔记(一)

自动化运维

一天半---》shell语法  运行机制  常见应用

一天半---》实现一个代码发布的案例

1 shell

1运维简介:

除了功能开发之外的所有活动都跟运维有关

2 自动化运维:

自动化实现运维活动

一般用shell脚本实现自动化

3 shell就是命令解释

位于应用程序和操作系统之间

4 shell分类:

一般而言:shell就是命令行shell(linux下shell(bash))

5 查看当前系统shell版本

echo $SHELL

6 查看系统兼容性支持的shell类型们:

cat /etc/shells

7 shell脚本:

命令放到文件中执行,该文件称为shell脚本

8 脚本创建

1 用记事本写(要求用vim)

2 脚本命名:1 名称有意义 2 .sh结尾

3 脚本内容:首行要指定脚本解释器

4 注释:单行注释和python一样,多行注释::<

9 脚本执行

1 bash 脚本名(启动子shell,在子shell中执行脚本内命令)

2 ./脚本名 (启动子shell(名字叫脚本名), 在子shell中执行脚本内命令)

3 source 脚本名(类似python import 模块) (直接在当前shell内执行脚本内命令)

10 开发规范

1 不要用中文注释

2 成对内容一次性写

3 适当缩进(仿照python风格)

11 变量定义

普通变量

1 变量名=变量值 (变量值不能有特殊字符)

2 变量名='变量值' (变量值作为整体赋值)

3 变量名="变量值" (变量套变量)

命令变量(将命令的输出作为变量值赋给变量名)

变量名=`命令`

变量名=$(命令)

变量值不会随着命令输出的改变而改变

12 变量访问

1 ​ $变量名

2 ​ "$变量名" (保证变量值是字符串)

3 ${变量名} (限定变量名访问)

4  "${变量名}" (推荐形式)

unset 变量名 (删除变量)

13 变量分类:

本地变量(哪里定义哪里访问)

全局变量(环境变量)

1 查看当前全局变量:

env

2 定义:

变量名=值

export 变量

(先定义后转换)

export 变量名=值 (二合一)

3 生效范围

当前shell和子shell(子shell继承父shell的全局变量)

若想让所有环境生效:

1 修改~/.bashrc (只对当前用户生效,source执行该文件或重新打开新shell生效)

2 修改/etc/profile (所有用户都生效,source执行该文件或重启生效)

内置变量

1脚本相关

$0 当前脚本名

$$ 指向该脚本的进程号

$n 脚本的第n个参数(脚本传参:脚本名  s g b )

$# 参数个数

$? 上一条命令是否执行成功(0-成功,非0-失败,,若上一条命令是执行脚本,则获取脚本最后一条命令的返回值)

2 字符串截取

${变量名:起始位置:截取长度}

(倒着截要写0-X)

3 默认值

${变量名:-默认值} (若变量不存在则输出默认值)

${变量名:+提示信息} (若变量存在则输出提示信息)

14 表达式

逻辑转成控制

1 测试语句

test 条件

[ 条件 ] (括号内侧两边各有一个空格)

1 数值比较 (比较操作符两边各有一个空格)

n1 -eq n2 相等

n1 -gt n2 大于

n1 -ge n2 大于等于

n1 -lt n2 小于

n1 -le n2 小于等于

n1 -ne n2 不等于

2 字符串比较

== != (两边有空格)

2 逻辑表达式

命令1 && 命令2 (1成功则执行2)

命令1 || 命令2 (1失败则执行2)

3 文件表达式

-f 判断是否是文件

-d 判断是否是目录

-x 判断是否有可执行权限(目录可执行)

4 计算表达式

$((计算过程))

let 等式

15 常见符号

1 重定向

应用程序的输出:

1标准输出(正常执行时的输出)

2标准错误(异常执行时的输出)

分别重定向:

bash 6-chongdingxiang.sh > res.log 2> err.log

合并重定向:

bash 6-chongdingxiang.sh > res.log 2>&1

丢弃:

bash 6-chongdingxiang.sh > /dev/null 2>&1

2 管道符

命令1 | 命令2

(命令1的输出作为命令2的输入)

3 后台展示符

命令 &

(命令放到终端后台运行)

16 常用命令

1 grep(搜索命令)

grep -rn  bash .

(递归当前目录以及子目录下所有文件,搜索包含bash的行以及行号)

2 find (查找文件)

find . -name *chong*

(在当前目录以及子目录查找名称大概是chong的文件)

3 sed

-i参数代表修改源文件

替换:

sed -i  "2s#sed#SED#1" sed.txt

("2(第二行)s替换#sed(原内容)#SED(替换后内容)#1(第1个找到的做替换---》g代表全部替换)")

增加:

sed "2a\hello" sed.txt

"2(第二行)a(下方增加)\hello(增加的内容)"

sed "4i\world" sed.txt

"4(第四行)i(上方增加)\world(增加的内容)"

删除:

sed "3(第三行)d(删除)" sed.txt

4 awk

awk '{print $1,$3}' awk.txt

打印awk.txt文件中每一行的第1列和第3列,并且用空格分割

内置变量:

FILENAME:文件名

NR:行号

awk 'NR==2 {print $2}' awk.txt

(只处理第2行)

NF:列数

awk '{print $NF}' awk.txt

(打印最后一列)

FS:指定行分隔符

awk 'BEGIN{FS="awk"} {print $3}' awk.txt

(指定行分隔符为awk)

awk -F "awk" ' {print $3,$1}' awk.txt

(-F 更常用)

OFS:指定多个输出的连接符

awk -F "awk" 'BEGIN{OFS="->"} {print $3,$1}' awk.txt

(指定第三列和第一列直接的连接符是->)

你可能感兴趣的:(简书python自动化运维)