shell脚本的作用
shell 脚本的作用
帮助运维完成一些重复性、复杂性的操作 解释命令到内核 结合配置服务使用,减少工作量
CMDB资产管理系统
1.shell脚本的命名的标准规则
文件名 .sh(文件名随便起,以.sh结尾)
python .py
php .php
java .java
vim dgf.sh
#!/bin/bash #这个是解释器
``
vim alex.py
#!/usr/bin/env python #python解释器
如何编写shell脚本?
1 vim dgf.sh
#!/bin/bash
linux命令
运行方式
如果shell脚本有执行权限
./ 文件名.sh
shell脚本的绝对路经
如果shell脚本没有执行权限
bsah 文件名.sh
sh 文件名.sh
source 文件名.sh
符号的用处
```bash
> 重定向输入
>> 重定向追加
”“”或‘’‘控制多行输入
&& 同义and, 逻辑与,等同于’和‘
|| 管道符。逻辑或,同义or,顺序执行,成功一个,后面的都不执行
执行脚本后查看日志输出
例子:bash dgf.sh > /opt/dgf.log
bash dgf.sh 1> /opt/dgf.log
> /opt/dgf.sh 清空内容
> 和 1> 正确标准输出
> 错误的日志输出
例子: bash dgf.sh 2> /opt/dgf.log
2> 查看错误日志
&> 混合日志输入
### shell脚本-正则、grep、sed、awk三剑客
1.概述:正则表达式--简写:regex、regexp或RE,就是为处理大量的字符串而定义的一台规则和方法。例:假设“@”代表oldboy,”!” 代表eitboy。则echo “@!” =”oldboy eitboy”。通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
支持正则表达式的程序:
Linux正则表达式:grep、awk、sed (egrep,awk 支持扩展正则表达式)
PHP、JAVA、Perl、Python(Perl兼容PCRE)
学习目的(作用):可以帮助运维,从过多的文件内容当中,获取你想要的任何数据
3.基础正则表达式:(常见正则表达式例子)
^word 搜索以word开头的。vi/vim中 ^ 一行的开头。
word$ 搜索以word结尾的。vi/vim中 $ 一行的结尾。
^$ 表示空行
. 代表且只能代表任意一个单个字符
\ 例:\. 只代表点本身,转义符号,让有特殊身份意义的字符,脱掉马甲,还原;
\n 换行符
\r 匹配回车
\w 匹配任意一个字符和数字
* 重复0次或多次前面的一个字符。
.* 匹配所有字符。例:^.* 以任意多个字符开头,.*$以任意多个字符结尾。
[abc] 匹配字符集内的任意一个字符。
[^abc] 不要abc这三个字符排列组合成的任意一个字符串。中括号里的 ^ 为取反。
[1-9] 只要包含1-9之内的数字,就打印该行
a\{n,m\} 重复n到m次前一个重复的字符。若用egrep、sed -r可以去掉斜线。
\{n,\} 重复至少n 次前一个重复的字符。若用egrep、sed -r可以去掉斜线。
\{n\} 只打印前边出现n次的字符。若用egrep、sed -r可以去掉斜线
\{,n\} 打印前边的那个最多出现n次的字符
grep、egrep的常见用法及选项
grep 正则表达式 文件
常见选项 -A 前几行 -B 后几行 -C 前后几行 -E 扩展正则表达式 -v 取反
egrep 扩展正则表达式 文件
+ 重复一次或一次以上前面的一个字符。等同于\{n,}
? 重复0次或一次前面的一个字符。等同于\{,m}
| 或者的意思,用或的方式查找多个符合的字符串。
() 找出括号内的字符串。
sed流编辑器:
在shell脚本中vi、vim、是不能用的,因为这两个命令是交互式的,
sed的作用就是能够通过非交互式来完成对文件的增删改查操作的
法:sed 选项 '操作符' 文件名
选项:
-n sed默认输出全部内容,-n只输出匹配到的内容;
-i 修改文件内容;
-r 支持扩展正则表达式;
-e 匹配多个command
操作符:
a 在当前行的下一行添加内容
c 将选定行替换为指定内容
d 删除选定的行
i 在当前行的上一行添加内容
p 打印指定行内容
s 替换选定字符为指定字符
awk:报告生成器:
1.awk的作用:一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入stdin、一个或多个文件,或其它命令的输出。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。擅长取行、取列、过滤。
2.语法:
awk [选项] '模式{ 动作(action) }' 文件1 文件2 ...
选项: -F 指定输入分隔符,可以是字符串或正则表达式;
最常见的动作: print、printf
Awk以-F为域分隔符,当分隔符为空格的时候,是不用写-F的
3.awk的基本原理特征:
1)每一次取一行
2)根据指定的分隔符(不指定是位空白字符)将该行切割位列,使用$0(整行),$1,$2,$3...(第一列,第二列,...)
awk的匹配范围
$1=="" ##精确匹配等于
$1!="" ##精确匹配不等于
$1~"" ##包含匹配等于
$1!~"" ##包含匹配不等于
awk区块原理
区域构成:
BEGIN { 动作 } ##开始处理第一行文本之前的操作
{ 动作 } ##针对每一行文本的处理操作
END { 动作 } ##处理完最后一行文本之后的操作
awk的变量:
awk变量:
FS:列分隔符,默认位空白 相当于选项-F
RS:行分隔符,默认位换行符
OFS:输出列分隔符
ORS :输出行分隔符
awk内置变量:
NR:处理中行数
FNR:单个文件的行数
NF:列的个数
还有些awk的高级用法,自行了解