业务环境中Shell常用于对数据进行采集,或对系统健康进行监控,由于其效率过低而不用于开发软件等目的.
diff比较命令
diff
命令用于比较文件或目录之间的不同.
##命令用法
diff [options] files | directorys
##输出结构
[num1,num2] [a/c/d] [num3,num4]
num1,num2 第一个文件中的行
a 增加
c 修改
d 删除
< 第一个文件中的内容
> 第二个文件中的内容
num3,num4 第二个文件中的行
##常用参数[options]
-b 忽略空格
-B 忽略空行
-i 忽略大小写
-c 显示文件所有内容并标示不同
-r 对比目录
-u 合并输出
对于-B
参数,如果文件中空行前的内容存在不同,会导致比较时空行无法准确对应,因此也无法忽略空行,所以-B
参数要保证空行前的内容是一致的.
Patch
patch
常用于使用补丁文件对原文件内容修改,通过添加-b
参数还能在打补丁时对原文件进行备份.
##命令结构
patch 原文件 补丁文件
##常用参数
-b 备份元文件
patch
在系统中默认是没有的,需要自行安装.
dnf install patch.x86_64 -y
Cut
cut
命令可以对文件内容分割,分割时可以指定分割符按列分割或直接指定截取的字符数.
##常用参数
-d : ##指定:为分割符
-f ##指定现实的列
##-f 5 显示第五列
##-f 3,5 显示第三列和第五列
##-f 3-5 显示第三列到第五列
##-f -5 显示第五列以前(包括第五列)
-c ##-f 5- 显示第五列以后(包括第五列)
##cut命令演示
##截取Test文件中每行的1-10个字符
cut -c 1-10 Test
##:TestFil
##:TestFil
##:TestFil
##:TestFil
Sort排序命令
sort
命令可以对文件内容进行排序,通过指定参数可以选择排序方法/去除重复/排序结果输出等等效果.
##常用参数
-n ##纯数字排序
-r ##倒叙排序
-u ##去除重复
-o ##输出到指定文件
-t ##指定分割符
-k ##指定排序的列
##sort排序命令演示
##查看Test文件原始内容
cat Test
5
4
11
15
7
2
8
1
##默认排序输出,可以看到只以每一行第一位为标准排序
sort Test
1
11
15
2
4
5
7
8
##将内容视作纯数字进行排序
sort -n Test
1
2
4
5
7
8
11
15
##纯数字倒叙排序
sort -nr Test
15
11
8
7
5
4
2
1
对Test文件进行编辑,使之有内容相同的行后进行如下操作.
##排序可看到内容相同的行
sort -n Test
1
2
4
4
5
5
7
8
11
11
15
15
##纯数字排序,同时去除重复的行
sort -nu Test
1
2
4
5
7
8
11
15
##纯数字排序,同时将结果输出到TestFile文件
##世纪效果与sort -n Test > TestFile相同
sort -n Test -o TestFile
[root@Node1 Desktop]# ls
Test TestFile
[root@Node1 Desktop]# cat TestFile
1
2
4
4
5
5
7
8
11
11
15
15
编辑Test文件,使之不止具有一列.
默认情况下都是按第一列进行排序,但也可以用参数指定分割符以及排序的列.
##查看编辑过的文件内容
cat Test
1:5
5:4
4:11
11:15
12:7
5:2
4:8
7:1
8:11
##默认排序为按照第一列进行排序
sort -n Test
1:5
4:11
4:8
5:2
5:4
7:1
8:11
11:15
12:7
##指定分割符为:,采用第二列进行排序
sort -n -t : -k 2 Test
7:1
5:2
5:4
1:5
12:7
4:8
4:11
8:11
11:15
同时,排序命令也可以与uniq
命令结合,对重复项和唯一项进行分离.
##纯数字排序浏览文件内容
sort -n Test
1
2
2
4
5
5
8
11
11
##对Test进行排序,合并重复并统计重复个数后输出
##能看到2/5/11分别出现了2次
sort -n Test | uniq -c
1 1
2 2
1 4
2 5
1 8
2 11
##只显示重复的行
sort -n Test | uniq -d
2
5
11
##只显示唯一的行
sort -n Test | uniq -u
1
4
8
ifconfig ens3
查看ens3
网卡设备的信息,通过上述命令使得只输出ens3
设备的IP地址.
ifconfig ens3 | head -n 2 | tail -n 1 | cut -d ' ' -f 10
172.25.254.136
TR字符替换命令
tr
没有显示文件的能力,只有替换字符的能力.
即使对文件中内容作出了替换也不会在终端中提示或告知.
顾若需要查看文件内容需要与其他命令组合使用.
tr 'a-z' 'A-Z' ##将所有小写字母替换为大写字母
tr 'a' 'b' ##将文件中所有小写a替换为小写b
cat /root/Desktop/TestFile | tr 'a-z' 'A-Z'
将root用户桌面上的TestFile文件中内容全部改为大写并查看
但tr
命令对于字符串的支持很差,通常只用来替换单个字符.
&& ||
&&
和||
都是条件分支选择符.
&& 条件成立时做后续动作
|| 条件不成立时做后续动作
##额外内容,与本章内容无关
##普通输出项
echo $1 is exist.
##有色彩表示的输出项
echo -e "\033[31m$1 is exist\033[0m"
Test比较命令
Test
命令可以对对象进行比较,如两个变量是否相等.
test
命令与[ ]
的含义相同.
##表意作用相同,均为比较变量a与b是否相同
test "$a" = "$b"
[ "$a" = "$b" ]
Test的数字对比
= ##等于
!= ##不等于
-eq ##等于
-ne ##不等于
-lt ##小于
-gt ##大于
-le ##小于等于
-ge ##大于等于
当需要符合条件时可以选择与
逻辑或者或
逻辑.
如0-10之间需要同时满足大于0的条件和小于10的条件,不在0-10之间需要满足小于0或者大约10的条件.
-a ##与逻辑,并且
-o ##或逻辑,或者
##举例 判断是否满足C大于0小于10
["$c" -gt "0" -a "$c" -lt "10"]
同时,test
命令还能判断是否为空
-n ##nozero 判定内容不为空
-z ##zero 判定内容为空
##举例
##判断是否传参,当$*为空时说明没有传参
[ -z "$*" ] && {
echo 未指定检测文件,请指定
exit
}
Test命令关于文件的判定
##常用参数
-ef ##文件节点号是否一致(硬链接)
-nt ##文件1是否比文件2新
-ot ##文件2四否比文件1新
-d ##目录
-S ##套接字
-L ##软链接
-e ##存在
-f ##普通文件
-b ##快设备
-c ##字符设备