一学就会之shell中常用的基础命令 (diff + patch + cut + sort + uniq + tr +test命令)

1.diff 对比不同

【1】实验环境
vimdiff westos westos.new此时不同的地方就会高亮(在排错的过程中可能会使用)
在这里插入图片描述
man diff查询(以下只截取了部分内容)
在这里插入图片描述
在不知道命令的使用方法时,可以man 查询。这是一个非常实用的做法,在下面一道练习中,印证了其有效性

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

【3】输出信息:
[num1,num2][a|c|d][num3,num4]

内容 作用
num1,num2 第一个文件中的行
a 添加
c 更改
d 删除
> 第二个文件中的内容
< 第一个文件中的内容
num3,num4 第二个文件中的行

练习:
在这里插入图片描述

【4】常用参数:

参数 作用
-b 忽略空格
-B 忽略空行
-i 忽略大小写
-c 显示文件所有内容分并表示不同
-r 对比目录
-u 合并输出

练习:

  • 忽略空格
    在这里插入图片描述
  • 忽略空行
    在这里插入图片描述
  • 忽略大小写
    在这里插入图片描述
  • 显示文件所有内容分并表示不同
    在这里插入图片描述
  • 对比目录
    在这里插入图片描述
  • 合并输出(生成补丁的时候可使用)
    在这里插入图片描述

2.patch

yum install patch -y
命令 作用
patch 原文件 补丁文件 给原文件打补丁
patch -b 原文件 补丁文件 备份原文件

练习:

  • patch 原文件 补丁文件
    在这里插入图片描述
    在原文件上打补丁,原来的lyq就变为了LINUX
    在这里插入图片描述
  • -b 备份原文件
    直接使用上述命令后,原文件就不见了。所以使用参数备份原文件就很重要了。westos.orig就是原文件
    在这里插入图片描述
    注意:当orig文件已经存在时,就不要再次使用-b去备份了

3.cut

参数 作用
-d : 指定:为分隔符
-f 指定显示的列
-c 指定截取的字符(用法同-f)

-f与-c用法相同,所以此处只写了一种,大家可以替代理解

-f用法 作用
-f 5 显示第5列
-f 2,5 显示第2列和第5列
-f 2-5 显示2到5列
-f 5- 显示第5列以后
-f -5 显示到第5列

练习:

  • cp /etc/passwd .准备好练习文件
    在这里插入图片描述

  • -f 指定显示的列
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • -c 指定显示的字符
    在这里插入图片描述

学员命令测试:

  • ifconfig 网卡 可以显示此网卡的信息
  • 显示信息中包含此网卡使用的ip地址
  • 请用命令过滤此ip并在输出时只显示ip其他信息不显示
    脚本编写:
    在这里插入图片描述
    结果:
    在这里插入图片描述
    反思:在练习的过程中,我才真正的理解了-d 指定分隔符是如何使用的。在写脚本的过程中要是可注意到自己想要实现的作用是什么:“ 如果网卡名称为空,要提示网卡名称;如果网卡名称正确,则得到正确的结果;如果网卡名称错误,报错即可”

4.sort

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

练习:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

学员命令测试:

  • ls -l 目录 可以显示目录中所有文件案的属性
  • 请按照文件大小进行排序并找出最大的2个文件并显示其名称
    方法一:
    在这里插入图片描述
    方法二:
    使用man ls查询ls的使用方法可以发现,直接使用ls -S即可进行排序!!
    在这里插入图片描述
    在这里插入图片描述

5.uniq

参数 作用
-c 合并重复并统计重复个数
-d 显示重复的行
-u 显示唯一的行

练习:
在这里插入图片描述
在这里插入图片描述

6.tr

命令 作用
tr ‘a-z’ ‘A-Z’ 小写转大写
tr ‘A-Z’ 'a-z 大写转小写

练习:
在这里插入图片描述

7.&& ||

  • && 符合条件做动作

  • || 不符合条件做动作
    练习:
    可以当作‘与’和‘非’来理解

8.test

test = [] ##[] 就相当于test命令
"test $a = $b" = [ "$a" = "$b" ]

【1】test数字对比

命令 作用
-eq 等于
-ne 不等于
le 小于等于
-lt 小于
-ge 大于等于
-gt 大于

练习:
在这里插入图片描述
在这里插入图片描述

注意:这两种的判断次数不相同

[root@xixi mnt]# [ "$a" -eq "$b" ] && echo yes || echo no
no   一次判断,效率高
[root@xixi mnt]# [ ! "$a" -eq "$b" ] && echo yes || echo no
yes  两次判断:1.条件是否成立;2.条件不成立的时候  可以理解为条件判断后取非
[root@xixi mnt]# 

【2】test的条件关系

参数 作用
-a 并且
-o 或者

练习:

  • -a 并且
    **t

  • -o 或者
    在这里插入图片描述

【3】test对空的判定

参数 作用
-n nozero 判定内容不为空
-z zero 判定内容为空

在这里插入图片描述

【4】test对于文件的判定
软链接和硬链接的作用和区别

参数 作用
-ef 文件节点号是否一致(硬链)
-nt 文件1是不是比文件2新
-ot 文件1是不是比文件2老
-d 是否为目录
-S 套接字
-L 软链接
-f 普通文件
-b 块设备
-c 字符设备

练习:

  • 对比哪个文件更新
    在这里插入图片描述
  • 文件节点号一致

在这里插入图片描述

  • 软连接
    在这里插入图片描述
  • -s 套接字
    套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。
    套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中,使这段信息能传送到其他程序中。因此,两个应用程序之间的数据传输要通过套接字来完成。
    在这里插入图片描述
  • -b块设备 -c 字符设备

在这里插入图片描述

学员检测:
file_check.sh 在执行时

  • 如果脚本后没有检测文件报错“未指定检测文件,请指定”
  • 如果脚本后指定文件不存在报错“此文件不存在”
  • 当文件存在时请检测文件类型并显示到输出中
    一开始(没有完成单纯的显示文件类型)
    在这里插入图片描述
    在这里插入图片描述
    修改后
    在这里插入图片描述
    在这里插入图片描述

反思:编写脚本的时候,“没有检测文件”和“指定文件不存在”这两部分当时除了点问题。错误原因是使用了[ -f "$1" -o -d "$1" ]来查验是否存在文件或目录,但是这样就与[ -e "$1" ]的作用相重复后,后来仔细思考了一下其中的逻辑关系:

  • 文件是否存在 [ -e “$1”]
  • "$1"是否为空 [ -z “$1”]
发布了64 篇原创文章 · 获赞 4 · 访问量 3423

猜你喜欢

转载自blog.csdn.net/ly_qiu/article/details/105112497