shell脚本中常用的命令(diff,patch,cut,sort,uniq,tr,test,&&和||)

一、diff

diff命令是用来比较两个文件或者目录的不同
diff  [options] target1 target2
diff   file1  file2
diff  directory1  diirectory2

diff在比较文件过程中结果读取方式
[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 }

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值