一、diff
diff命令是用来比较两个文件或者目录的不同
diff [options] target1 target2
diff file1 file2
diff directory1 diirectory2diff在比较文件过程中结果读取方式
[num1,num2][a|c|d][num3,num4]
num1,num2表示在第一个文件中的行数
a 表示添加 ---add
c 表示更改 ---change
d 表示删除 ---delete
< 表示第一个文件中的内容,>表示第二个文件中的内容,--分割线num3.num4表示在第二个文件中的行数2,4c2,4表示改变第一个文件中的第二行和第四行才能匹配第二个文件中的第二行和第四行
diff中常用的参数
-b或--ignore-space-change | 不检查空格字符的不同 |
-B或--ignore-blank-lines | 不检查空白行 |
-c | 显示全部内文,并标出不同 |
-i 或--ignore-case | 不检查大小写的不同 |
-p | 若比较的文件为C语言程序码文件时,显示差异所在的函数名称 |
-q或者--brief | 仅显示有无差异,不显示详细的信息 |
-r或--recursive | 比较子目录中的文件 |
-u | 以合并的方式来显示文件内容的不同 |
-b不检查空格字符
-B不检查空白行
-c 显示全部内文,并标出不同之处
-i 不检查大小写的不同
-p 若比较的文件为C语言程序码文件时,显示差异所在的函数名称
-q 仅显示有无差异,不显示详细的信息
-r 比较子目录中的文件
-u以合并的方式来显示文件内容的不同
二、patch
旧文件升级为新文件时怎么做?
通过diff比较其不同,将不同之处生成补丁文件,再由补丁文件更新旧文件即可
yum install patch -y
diff test test1 > test.patch
patch test test.patch #不保留原来的
patch -b test test.patch #补丁修正后,保留原来的,test.orig即备份文件
没有输入备份指令,系统提示是否备份
输入备份-b,直接备份
三、cut
cut -d | 指定分隔符 |
cut -f 1,7 | 指定截取的字符列数。第1列和第7列 |
cut -c 1,4 | 指定截取的字符位置,第1个和第4个 |
显示测试文件
按列截取
1到3行都显示
按字符截取
四、sort
多用于字符排序
sort -n | 纯数字排序 |
sort -r | 倒序 |
sort -u | 去掉重复数字 |
sort -o | 输出到指定文件 |
sort -t | 指定分割符 |
sort -k | 指定要排序的列 |
测试文件
不加参数,,默认只排每行的第一个数字
纯数字排序:sort -n number
去掉重复数字:sort -u number
更换测试数:
默认按第一列排序
指定按第二列排序:
输出到指定文件:
五、uniq
对重复字符做相应的处理
unip -u | 显示唯一的行 |
unip -d | 显示重复的行 |
uniq -c | 每行显示一次并统计重复次数 |
测试数列:
;
每行显示一次并统计重复次数:-c
显示重复的行:-d
显示唯一的行: -u
六、tr--大小写字母转换
tr 'A-Z' 'a-z' < file #将file文件中所有字母转化为小写
tr 'a-z' 'A-Z' < file #将file文件中所有字母转化为大写
'
七、test
1.test命令和[]等同
test "&A" == "$B" 等同 [ "$A" == "$B"]
2.[ "$A" = "$B"] #判定A的值是否等于B的值
[ "$A" -eq "$B"]
3.["$A" != "$B"] #判定A的值和B的值是否不等
[ "$A" -ne "$B" ]
4.[ "$A" -le "$B" ] #判定A的值是否小于等于B的值
[ "$A" -lt "$B" ] #判定A的值是否小于B的值
5.[ "$A" -ge "$B" ] #判定A的值是否大于等于B的值
[ "$A" -gt "$B" ] #判定A的值是否大于B的值
6.[ -z "$A" ] #判定A是否为空,是的话为真
[ -n "$A" ] #判定A是否为非空,的话为真
7.[ "file1" -ef "file2" ] #判定两个文件是否相互为硬链接
[ -L "file" ] #判定file是否为软链接,是为真
[ "file1" -nt "file2" ] #判定file1是否比file2新
[ "file1" -ot "file2" ] #判定file1是否比file2旧
8.[ -S "file" ] #判定file是否为套接字
[ -b "file" ] #判定file是否为块设备
[ -d "file" ] #判定file是否为目录
[ -c "file" ] #判定file是否为字符设备
[ -e "file" ] #判定file是否存在
判断a是否小于b: [ "$a" = "$b" ] && echo yes || echo no
7.
8.
八、&&和 ||
&&用来执行条件成立后执行的命令
||用来执行条件不成立后执行的命令
牛刀小试:
牛刀小试1:
显示cpu使用率排行前5的pid
ps ax -o %cpu,pid |grep PID -v |sort -t " " -k 1 -nr| head -n 5
分析:-o 表示操作,%cpu表示cpu进程使用率,grep PID表示过滤PID,-v显示。-t 指定分隔符为空格,-k 1表示以空格为分隔符的第一列。-n表示纯数字排序, -r表示倒排序。
上面只能做到这。
法2:
顶头显示:
牛刀小试2:
df -h / #当cpu使用达到80%以上就报警
牛刀小试3:编写一个check_filestyle.sh 判断文件类型
程序:
#!/bin/bash
2 [ -z "$1" ] && {
3 echo Please input file
4 exit
5 }
6
7 [ -e "$1" ] || {
8 echo $1 is not exit !!
9 exit
10 }
11
12 [ -L "$1" ] && {
13 echo $1 is ruanlink file
14 exit
15 }
16
17 [ -f "$1" ] && {
18 echo $1 is common file
19 exit
20 }
21
22 [ -d "$1" ] && {
23 echo $1 is a directory
24 exit
25 }
结果: