shell脚本常用命令讲解(diff、patch、cut、sort、uniq、test、tr、&&、||)

一、diff命令
1、概念知识
diff用来比较两个文件。diff分析两个文件,并输出两个文件的不同的行。diff的输出结果表明需要对一个文件做怎样的操作之后才能与第二个文件相匹配。diff并不会改变文件的内容,但是diff可以输出一个ed脚本来应用这些改变。
2、diff中常用参数

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

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

[num1,num2][a|c|d][num3,num4]
num1,num2表示在第一个文件中的行数
a 表示添加 --add
c表示更改 --change
d表示删除 --delete
< 第一个文件中需要修改行的内容
> 第二个文件中需要修改行的内容
num3,num4表示在第二个文件中的行数

例:2,4c2,4表示改变第一个文件中的第二行和第四行才能匹配第二个文件中的第二行和第四行
4、diff命令的使用
【1】

vim ly1
 hello ly
vim ly2
 hello ly haha
diff ly1 ly2  #显示要更改添加的内容

在这里插入图片描述
【2】

diff -c ly1 ly2  #比较两个文件中全部内容,标出不同行

在这里插入图片描述
【3】

vim ly2
  hello ly
  Hi
vim ly1
  hello ly
  hi
diff -c ly1 ly2  #显示所有内容,标出不同行
diff -ci ly1 ly2  #忽略大小写

在这里插入图片描述
【4】

diff -cb ly1 ly2  #对比全文内容忽略空格,显示所有内容,标出不同行

在这里插入图片描述
【5】

diff -q ly1 ly2 #对比两个文件内容,仅显示不同,不显示具体内容

在这里插入图片描述

mkdir text1 text2
diff -r /mnt/text1 /mnt/text2  #比较子目录文件

在这里插入图片描述
【6】

diff -u ly1 ly2 > ly.path  #以合并的方式来显示文件内容的不同,将内容导入ly.path文件
cat text.path

在这里插入图片描述
去掉第二个文件空格后在执行一次:
在这里插入图片描述
二、patch命令
用于文件不同时打布丁,进行修改

patch[options]file.old file.path
yum install patch -y
patch --help
patch -b file.path file

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
三、cut命令
多用与字符截取

cut -d         指定分隔符
cut -f 1,7|1-7 指定截取的列,两个分隔符之间算一列 172.25.254.119:ly: 指分隔符为 :的两列内容 
cut -c 1,4|1-4 指定截取的字符位置

例:使用cut命令截取eth0查询到的IP

ifconfig eth0 | cut -c 14-27|head -n 2| tail -n 
ifconfig eth0 | cut -f 10 -d " " |head -n 2 | tail -n 1  #" "表示空格 

在这里插入图片描述
四、sort命令
多用于字符排列

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

五、uniq命令
对重复字符做出相应的处理

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

awk 报告生成器,抓取
awk ‘{print $5}’ #抓取第五个字符串
例:统计/etc/*.conf文件中最小的前五个文件名称

ll  /etc/*.conf |cut -c 26-70 |sort -nr -t " " -k 1|cut -c 18-60| head -n 5   #查看/etc所有.conf结尾的文件属性,截取第26-70列,将里边的第一列纯数字列倒叙排序,分隔符为空格,截取第18到60列,将前五行展示出来

在这里插入图片描述

ls -l /etc/*.conf | sort -t " " -k 5 -nr | head -n 5 | cut -c 43-

在这里插入图片描述

ls -S /etc/*.conf | head -n 5  #-S将文件由大到小排列查看

在这里插入图片描述
六、test命令
1、test比较命令

-eq等于
-ne不等于
-le小于等于
-lt小于
-ge大与等于
-gt大于
-a两条件都要满足
-o两条件最少满足一个
-z为空
-n不为空
-ef判断节点区是否一致 #ls -i 查看节点号,节点号一致节点区不一致
-ntA比B建立时间晚
-otA比B建立时间早
[ "$A" -ge "$B" ]  #变量A的值等于B
[ "$A" -gt "$B" ]
[ "$A" -ne "$B" -a "$A" -gt "$B" ]
[ "$A" -ne "$B" -o "$A" -gt "$B" ]
[ -z "$A" ]
[ -n "$A" ]
[ "file1" -ef "file2" ]
[ "file1" -nt "file2" ]

在这里插入图片描述
在这里插入图片描述
测试:

[ "ping.sh" -ef "check_file.sh" ] && echo yes || echo no
 ls -i

在这里插入图片描述
例:监控挂载在根的使用大小,超过30%发出报警命令

vim /mnt/check_root.sh
#!/bin/bash
[`df / | tail -n 1 | awk '{print $5}' | cut -d % -f 1` -ge "30" ]&&{
  echo "`date +%b\ %d\ %T` Waring: System root is full !!" >> /var/log/messages
}
at now+1min <<EOF   #定时任务
/mnt/check_root.sh   #执行脚本内容
EOF

chmod +x /mnt/check_root.sh  #给文件加执行权限
sh -x /mnt/check_root.sh #检查执行
cat /var/log/messages

在这里插入图片描述
在这里插入图片描述
或:

vim /mnt/check_root.sh
#!/bin/bash
[`df / | tail -n 1 | awk '{print $5}' | cut -d % -f 1` -ge "30" ]&&{
  logger Waring: System root is full !!  #日志编写语句
}
at now+1min <<EOF
/mnt/check_root.sh
EOF

在这里插入图片描述
在这里插入图片描述
2、test判断命令

-e存在
-f文件
-L软链接(快捷方式)
-S套接字
-b块设备(硬盘/dev/vdb,u盘)
-d目录设备
-c字符设备

生成/mnt/westos的软链接/mnt/test

ln -s /mnt/westos /mnt/test

例:写脚本检测文件、目录或其他类型

vim /mnt/check_file.sh
[ -z "$1" ] &&{
 echo please input filename following scripts!!
 exit
}
[ -e "$1" ] ||{
 echo $1 is not exit 
 exit
}
[ -L "$1" ] && {
 echo $1 is softlink file
 exit
}
[ -f "$1" ] && {
 echo $1 is common file
 exit
}
[ -d "$1" ] && {
 echo $1 is a directory
 exit
}
[ -b "$1" ] && {
 echo $1 is a block
 exit
}
[ -c "$1" ] && {
 echo $1 is acharacter device
 exit
}

在这里插入图片描述
测试:
在这里插入图片描述

3、tr大小写转换命令

echo hello HELLO
echo hello HELLO | tr 'a-z' 'A-Z'
echo hello HELLO | tr 'A-Z' 'a-z'

在这里插入图片描述
4、&&(表示true条件为真)命令和||(表示false条件为假)命令

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值