shell脚本常用命令

一.diff命令

diff 命令:是用来比较两个文件或目录的不同,并且是以行为单位来比对的。一般是用在 ASCII 纯文本文件的比对上。由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上对比上,能够借由 diff 创建的分析档,以处理补丁(patch)功能的文件。

diff [options] target1 target2
diff file1 file2
diff direcory1 directory2

diff 在比较文件过程中结果读取方式

[num1 , num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件中的行数
a 表示添加 ----add
c 表示更改 ----change
d 表示删除 ----delete
< 表示第一个文件中的内容, > 表示第二个文件中的内容, --- 分割线
num3,num4 表示在第二个文件中的行数
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中
的第二行和第四行

shell脚本常用命令_第1张图片
diff 在比较目录过程中结果的读取

Only in directroy/: filename
directory 表示在那个目录中
filename 表示在这个目录

diff 中常用的参数

可用man diff查询具体用法

-b 或 --ignore-space-change  不检查空格字符的不同
-B 或 --ignore-blank-lines  不检查空白行
-c  显示全部内文,并标出不同之处
-i 或 --ignore-case  不检查大小写的不同
-p :若比较的文件为 C 语言的程序码文件时,显示差异所在的
函数名称;
-q 或 --brief :仅显示有无差异,不显示详细的信息
-r 或 --recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同pacth

-b 不检查空格字符的不同

test与test不同之处在于多了空格,使用-b则发现没有不同。
shell脚本常用命令_第2张图片
-B 不检查空白行

shell脚本常用命令_第3张图片

-c 显示全部内文,并标出不同之处
shell脚本常用命令_第4张图片
-i 不检查大小写的不同
shell脚本常用命令_第5张图片
-q 仅显示有无差异,不显示详细的信息
shell脚本常用命令_第6张图片
-r 或 --recursive :比较子目录中的文件
shell脚本常用命令_第7张图片
-u 以合并的方式来显示文件内容的不同
shell脚本常用命令_第8张图片

二.pacth

patch 命令读取如何更改文件的源文件指示信息,然后应用这些更改。源文件包含由 diff 命令产生的差别列表(或者 diff 列表)。差异列表是比较两个文件和构建关于如何纠正差别的指示信息的结果。缺省情况下,patch 命令使用从标准输入读入的源文件,但是使用 -i 标志和 PatchFile 变量可以覆盖此设置。

-b或–backup  备份每一个原始文件。在修补文件时,重命名或复制原始文件,而不是删除它
-p        后面可以接“取消几层目录”的意思。
-R :代表还原,将新的文件还原成原来旧的版本
patch [options] file.old file.path

首先要安装patch服务

yum install patch -y
diff -u test test1 > test.patch           ##以合并方式生成文件内容不同并导入test.patch
patch test test.patch                     ##给test打补丁

shell脚本常用命令_第9张图片

三.cut

cut 命令多用与字符截取

cut -d 指定分隔符
cut -f 指定截取的列
cut -c 指定截取的字符位置

以:为分隔符截取文件passwd第一列
shell脚本常用命令_第10张图片
以:为分隔符截取文件passwd第一,三列
shell脚本常用命令_第11张图片
截取passwd文件位置第二个字符
shell脚本常用命令_第12张图片
截取passwd文件位置第二,三字符
shell脚本常用命令_第13张图片截取passwd文件位置第二到四中的所有字符
shell脚本常用命令_第14张图片

四.sort

多用于字符排序

sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复数字
sort -o 输出到指定文件中
sort -t 指定分隔符
sort -k 指定要排序的列

创建文件file写入数字
shell脚本常用命令_第15张图片
sort -n纯数字排列
shell脚本常用命令_第16张图片
sort -nr file 纯数字倒序排列
shell脚本常用命令_第17张图片
sort -nu file去掉重复数字纯数字排列
shell脚本常用命令_第18张图片
sort -nu file -o westos 将上一个排列好的文件导入westos
shell脚本常用命令_第19张图片
vim file 创建新的file
shell脚本常用命令_第20张图片
以:为分隔符并以第二列按纯数字排列
shell脚本常用命令_第21张图片

五.uniq

对重复字符做相应的处理

uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数

shell脚本常用命令_第22张图片
shell脚本常用命令_第23张图片
实验:
抓取登陆你的主机的ip并显示最多的次数

last -i | grep 0.0.0.0 -v | cut -d " " -f 14 | uniq -c | sort -nr  | head -n 1
含义:显示ip,过滤0.0.0.0的行,取第14个字符开始的ip列,统计每个ip出现的次数,反向排序,取最高的值也就是第一行
或者
last -i | grep -E "0.0.0.0|wtmp " -v | awk '{print $3}' | uniq -c |sort -nr | head -n 1

shell脚本常用命令_第24张图片在这里插入图片描述

六.&&和||

&& 用来执行条件成立后执行的命令
|| 用来执行条件不成立后执行的命令

测试:
编写一个脚本,测试网络的通畅

-w wait 等待时间  不通的话时间会很长
-c count 次数
-e 颜色的设定
0m 关掉颜色的设定属性

没有颜色
shell脚本常用命令_第25张图片
shell脚本常用命令_第26张图片

有颜色显示:
shell脚本常用命令_第27张图片
shell脚本常用命令_第28张图片
shell脚本常用命令_第29张图片

七.tr命令

tr,translate的简写,意思是转化,转变,转换。用来从标准输入中通过替换或删除操作进行字符转换。
shell脚本常用命令_第30张图片
编写脚本将小写转化成大写

vim upper.sh

#!/bin/bash
echo $1 | tr 'a-z' 'A-Z'

shell脚本常用命令_第31张图片

八.test命令

功能:检查文件类型和比较值。
lt 小于,le小于等于,ge 大于等于,gt 大于
在shell中,test命令 = [ ],=和==效果一样。

a=1
b=1    ##先赋值

test "$a" = "$b" && echo yes || echo no     ##判断a=b
[ "$a" = "$b" ] && echo yes || echo no       ##判断a=b
[ ! "$a" = "$b" ] && echo yes || echo no     ##判断a=b不成立是真还是假
[ "$a" != "$b" ] && echo yes || echo no      ##判断a不等于b

[ "$a" -eq "$b" ] && echo yes || echo no    ##相等
[ "$a" -ne "$b" ] && echo yes || echo no       ##不相等

[ "$a" -lt "$b" ] && echo yes || echo no      ##小于
[ "$a" -le "$b" ] && echo yes || echo no      ##小于等于

[ "$a" -gt "$b" ]  && echo yes || echo no      ##大于
[ "$a" -ge "$b" ] && echo yes || echo no     ##小于等于

[ "$a" -lt "1" -a "$b" -gt "5" ] && echo yes || echo no     ##a小于1,且b大于5,两个都成立才输出yes
[ "$a" -lt "1" -o "$b" -gt "5" ] && echo yes || echo no     ##a小于1或b大于5,有一个成立则输出yes

shell脚本常用命令_第32张图片shell脚本常用命令_第33张图片
测试:
要求:当根分区使用量大于80%报警,并监控脚本执行情况将结果输出到日志文件/var/log/messages中。
shell脚本常用命令_第34张图片

vim checkstorage.sh

#!/bin/bash
[ "`df -h / | tail -n 1 | cut -d " " -f 15 | cut -d "%" -f 1 `" -ge "30" ] && {         ##为了实验效果明显写的30
        echo "Warning: /is full!" >> /var/log/messages
}
at now+1min <<-EOF        设置定时任务
checkstorage.sh
EOF

chmod +x checkstorage.sh     给脚本添加执行权限
ls -l checkstorage.sh
at -l    查看定时任务列表
at -c  +num    查看任务内容

在这里插入图片描述shell脚本常用命令_第35张图片shell脚本常用命令_第36张图片
shell脚本常用命令_第37张图片

你可能感兴趣的:(shell)