Shell中常用命令整理(diff、patch、cut、sort、uniq、tr、test、&&、||)

1、diff

diff命令用于对比两个文件的不同。

demo:
在这里插入图片描述

可以使用vimdiff进行比较:

对于实验所用文件,直接使用命令vimdiff xxx.conf xxx.conf.new 来对比两者的不同:
在这里插入图片描述
可以看到,两文件在使用vimdiff进行对比时,两文件的不同之处会高亮显示,可用于日常排错。
vimdiff在使用时,不仅可以对比两个文件,也可以对比多个文件,方法相同:
在这里插入图片描述

直接使用diff命令进行比较

diff描述两个文件不同的方式是告诉我们怎么样改变第一个文件之后与第二个文件匹配。
demo:
还是上面的实验素材,这次我们直接使用diff进行比较:
在这里插入图片描述
可以看到,使用diff命令后,出现

3a4
> ccccccc
4a6
> pppppp

其中,3a4 3代表第一个文件中的第3行,a(add)代表增加,4代表第二个文件中的行。
> ccccccc ,ccccccc代表增加的内容(第二个文件的第四行),后就与第二个文件内容相同。

理解起来就是:第一个文件的第3行后增加ccccccc(第二个文件的第4行)内容, 第一个文件的第4行后增加pppppp(第二个文件的第6行)内容,第一个文件才会与第二个文件一样。
那么,除了这种情况还有其他情况:
demo:在这里插入图片描述
输出内容

3d2
< aaaaaa

代表第一个文件删除第3行内容(aaaaaa)后与文件二相同。

< aaaaaa代表第一个文件中须删除的内容。

demo:
在这里插入图片描述
输出内容为:

4c4
< ddddd
---
> eeeee

表示 第一个文件的第4行变为第二个文件的第4行。< ddddd第一个文件该去除第4行的内容。
--- 表示分割第一个文件和第二个文件。
> eeeee表示第二个文件增加了第4行的内容。

diff常用参数:

diff的所有参数可以使用man diff进行查看,这里列出常用参数。

参数作用
-b不检测空格
-B不检测空白行
-c显示文件所有内容并标识不同
-i不检测大小写
-r对比目录
u以合并的方式来显示文件内容的不同

-b:不检测空格
插入图片描述
这里第二个文件中的第一行后比第一个文件中多一个空格,在使用diff命令可以对比出来。
此时使用-b参数可以不检测空格进行对比:
在这里插入图片描述


-B:不检测空行进行对比
在这里插入图片描述
第一个文件与第二个文件完全相同。这里在第二个文件后插入一空行,使用diff命令可以看到能够检测出空格:
在这里插入图片描述
使用参数-B进行跳过空行:
在这里插入图片描述


-c:显示文件所有内容并标识不同
在这里插入图片描述
这里依然沿用-B参数的例子,第二个文件比第一个文件多一个空行,使用-c参数可以显示文件所有内容并标识不同。


-i:不检测大小写
在这里插入图片描述


-r:对比目录
首先建立实验素材:
创建两个目录dir1、dir2。在dir1中建立新文件file1:
在这里插入图片描述
使用diff -r 参数进行对比:
在这里插入图片描述


-u:以合并的方式来显示文件内容的不同
在这里插入图片描述
可以看到,第一个文件与第二个文件只有中间的b大小写不同,在使用-u参数可以合并所有内容输出,并显示怎么操作才能与模板相同(模板是第二个文件),第一次对比:模板为xxx.conf.new 对比文件为xxx.conf。对比结果为-bbbbbxxx.conf应该删除bbbbb,+BBBBB 增加BBBBB。
第二次将两文件调换位置,模板为xxx.conf,对比文件为xxx.conf.new。对比结果与第一次不同,-BBBBB 删去BBBBB,+bbbbb 增加bbbbb 才能与模板文件相同。

可以使用diff -u参数将合并的内容及不同输出到一个文件中做补丁文件:

diff -u xxx.conf xxx.conf.new> xxx.conf.path

在这里插入图片描述
这里就用到了patch


2、patch

patch 命令用于打补丁,补丁文件是使用diff产生的。
所谓打补丁,就是当有补丁文件时(一般由diff命令产生),将补丁打在需要变更的文件上,没有变动的内容不动,只动有变化的部分。大大提高文件更新的效率。

关于patch命令的用法,详细内容及更多参数查看man patch。

patch 【参数】 原文件 补丁文件

在使用patch命令前,首先安装patch:
在这里插入图片描述
使用diff生成补丁后,对文件打补丁:
在这里插入图片描述
但是,可以看到结果是文件根据补丁内容做了修改,但是xxx.conf原文件已经没有了,xxx.conf目前是已经修改过的文件。

这里可以使用-b参数来进行备份原文件
在这里插入图片描述
在这里插入图片描述
可以看到,在打完补丁后,生成一个以.orig后缀的文件,即补丁前原文件。
在这里插入图片描述

3、cut

cut主要用于截取数据

用法:
cut 参数 文件
详细用法参考 man cut

常用参数:

参数作用
-d指定分隔符,缺省状态分隔符为空格
-f指定列数
-c切割字符
–complement提取指定字段之外的列

cut 主要用于对列的截取,对于数据的截取,一般是截取指定行和指定列来达到截取数据目的。
实验素材:将系统passwd文件拷贝出用作实验
在这里插入图片描述
数据内容:
在这里插入图片描述
可以看到,文件内的数据都以:为分隔。

对于行的截取,可以使用head 和 tail这两个命令:
截取第四行的内容:
在这里插入图片描述
可以使用head -n 4来截取前四行的内容,再通过管道符对已经截取的内容使用tail -n 1 截取最后一行,来达到截取行的目的。

对于截取列,可以使用cut命令,参数 -d为指定分隔符,-f为指定列数:
在这里插入图片描述
所以,可以使用head tail cut 命令来截取我们想要的数据。

数字表达方式:
截取第一列到第三列:cut -d : -f 1-3 passwd
在这里插入图片描述
截取第一列和第三列:cut -d : -f 1,3 passwd
在这里插入图片描述
截取第二列到最后一列:
在这里插入图片描述

截取第一列到第五列:
在这里插入图片描述
截取第一列字母到第六列字符:
在这里插入图片描述
截取第一列字符和第六列字符:
在这里插入图片描述
cut -d : -f2 --complement passwd 提取指定第二列字段之外的列:
在这里插入图片描述
练习:输出网卡的ip地址,只能有ip:
在这里插入图片描述

4、sort

sort是用来排序的命令
用法:sort 参数 文件
常用参数:

参数含义
-n以纯数字进行排列
-r倒叙排列
-u去除重复项
-t指定分隔符
-k指定列数
-o输出到指定文件

新建素材文件:

在这里插入图片描述
可以看到,所有数字为乱序,使用sort进行排序:
在这里插入图片描述
可以看到,直接使用sort是对第一列的数字进行了排序。


使用参数-n是以纯数字进行排序:
在这里插入图片描述


使用-r参数进行逆序:
在这里插入图片描述
使用-u参数进行去重:
在这里插入图片描述
使用 -o参数可以将排序结果输出到文件中:
在这里插入图片描述


有的时候排序是对某一列进行排序,该怎么排序?
素材文件:
在这里插入图片描述
-t指定分隔符,-k指定列数:
在这里插入图片描述

5、uniq

uniq 可检查文本文件中重复出现的行列。
实验素材:
在这里插入图片描述
使用uniq直接可以对文件内容的连续重复行去重,使用-c参数可以统计重复行的重复次数,使用-d参数则可以显示文件中的重复行:
在这里插入图片描述



这里我们以/etc目录来查找:
第一步:ls -l显示目录中所有文件的属性
在这里插入图片描述
可以看到第五大列为大小,使用sort对第五列进行逆序排序:

ls -l | sort -nrt ' ' -k 8 

在这里插入图片描述
得到大小逆序排列后使用head -n2命令将排名前两个截取:
在这里插入图片描述
然后使用cut将最后一列的文件名进行截取:
在这里插入图片描述

6、tr

tr命令常被用作大小写转换

cat passwd |tr 'a-z' 'A-Z'  ## 将passwd中的小写转为大写

在这里插入图片描述
同理,将大写换为小写为:

cat passwd |tr 'A-Z' 'a-z'  ## 将passwd中的大写转为小写

7、&&和||

&&和||在shell中代表的是 是非判断
使用方法:条件&& 条件成立做的事情||条件不成立做的事情

8、test

test命令功能:用于查看某个条件是否成立,它可对数值,字符,文件进行测试 。

demo:
在这里插入图片描述
在shell脚本中,[ ]也为test命令:
在这里插入图片描述
注意:在使用[ ]当作test时,中括号内格式问题,左右两边有空格!

test对数字的判定

参数作用
-eq等于
-ne不等于
-le小于等于
-lt小于
-ge大于等于
-gt大于

在这里插入图片描述

test的条件关系:

Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。
在这里插入图片描述

test的字符判定

命令作用
test –n(nozero) 字符串字符串的长度非零
test –z (zero)字符串字符串的长度为零
test 字符串1=字符串2字符串相等
test 字符串1!=字符串2字符串不等

在这里插入图片描述

test对于文件的判定

参数作用
-ef判断文件节点好是否一致(硬链)
-nt文件1是否比文件2新
-ot文件1是否比文件2老
-d是否为目录
-s文件存在且为套接字
-L(-h)判断文件存在且为软连接
-e判断文件是否存在
-f判断是否为普通文件
-b判断文件存在且为块设备
-c判断文件存在且为字符设备

-nt:文件1是否比文件2新
在这里插入图片描述


-ot:文件1是否比文件2老
在这里插入图片描述


-ef|判断文件节点好是否一致(硬链)
在这里插入图片描述


-d:是否为目录
在这里插入图片描述


-s:文件存在且为套接字
在这里插入图片描述


-L(-h):判断文件存在且为软连接
在这里插入图片描述


-e:判断文件是否存在
在这里插入图片描述


-b|判断文件存在且为块设备
在这里插入图片描述
-c:判断文件存在且为字符设备
在这里插入图片描述


练习:
编写脚本完成以下条件:
file_chech.sh在执行时,未指定检测文件报错:未指定检测文件,请指定!若指定文件不错在 报错:此文件不存在!
当文件存在时,检测文件类型并输出。

[root@node1 mnt]# cat check_file.sh 
#!/bin/bash

[ -n "$1" ] || {
	echo "未指定检测文件,请指定!"
	exit
}

[ -e "$1" ] || {
	echo "此文件不存在!"
	exit
}

[ -d "$1" ] && {
echo "此文件为目录"
exit
}

[ -S "$1" ] && {
echo "此文件为套接字文件"
exit
}

[ -S "$1" ] && {
echo "此文件为套接字文件"
exit
}

[ -L "$1" ] && {
echo "此文件为软连接文件"
exit
}

[ -f "$1" ] && {
echo "此文件为普通文件"
exit
}

[ -b "$1" ] && {
echo "此文件为块设备文件"
exit
}

[ -c "$1" ] && {
echo "此文件为字符设备文件"
exit
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值