shell 脚本中的常用命令(编写脚本的前提)(diff+patch+cut+sort+uniq+tr+test+&&+||)

本文详细介绍如何在Linux环境下搭建实验环境,包括虚拟机重置、网络配置及本地YUM源搭建。同时深入解析Shell中关键命令,如diff、patch、cut、sort、uniq、条件判断、tr等,通过实验步骤加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建实验环境

注意:每次实验之前都要搭建一个纯净的实验环境,这样有利于将实验效果很好的展现给大家
(1)在真机中重置并且打开我的desktop虚拟机

rht-vmctl reset desktop
rht-vmctl start desktop
rht-vmctl view desktop

在这里插入图片描述
(2)给desktop虚拟机配置网络

cd /etc/sysconfig/network-scripts
ls
vim ifcfg-eth0编辑
systemctl restart network

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)给desktop虚拟机搭建本地yum源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接下来学习shell中一些常用的基本命令

1.diff命令

(1)基本概念以及命令的格式

diff 命令是用来比较两个文件或目录的不同
格式:diff   [options]   target1   target2
diff file1 file2比较两个文件的不同之处
diff direcory1 directory2比较两个目录的不同之处
diff 命令是用来比较两个文件或目录的不同,并且是以行为单位来比对的,一般是用在 ASCII 纯文本文件的比对上
由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上对比上,能够借由 diff 创建的分析档,以处理补丁(patch)功能的文件

在这里插入图片描述
在这里插入图片描述
(2)diff在比较文件过程中结果读取方式,读取结果每一项的意思

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

2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中(表示第一个文件和第二个文件的不同之处在于第二行和第四行)

(3)diff在比较目录过程中结果的读取,读取结果每一项表示什么

Only in directroy/: filename只有directroy这个目录有filename这个文件
directory 表示在这个目录中
filename 表示在这个目录的文件

(4)diff中常用的参数

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

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

2.patch命令

(1)基本概念以及命令的用法

Linux patch命令用于修补文件,用于文件不同文件打布丁,这个指令常与 diff 配合使用,diff 可以用来分辨两个版本之间的差异
我们将旧的文件升级成为新的文件时,应该要怎么做?
就是“先比较新旧版本的差异,并将差异档制作成为补丁文件,再由补丁文件更新旧文件“即可,也就是我们俗称的打补丁
patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行
如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一
-b或–backup:备份每一个原始文件。在修补文件时,重命名或复制原始文件,而不是删除它
-p :后面可以接“取消几层目录”的意思。
-R :代表还原,将新的文件还原成原来旧的版本
用于不同文件打补丁
命令格式 patch   [options]     file.old(旧文件)    file.path(补丁文件)使用补丁文件来完善旧文件

(2)实验步骤

yum install patch -y   ##安装打补丁的软件
diff -u test1 test2 > test.patch      ##生成补丁文件 test.patch 
patch -b test1 test.patch   ##修补文件test1

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

3.cut命令:cut 命令多用于字符截取

cut -d指定分隔符
cut -f 1,71-7
cut -c 1,41-4 指定截取的字符位置

注意:1,7表示第一列和第七列;1-7表示第一列到第七列
cut命令实验演示步骤如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cut -d(分隔符) : -f(列) 1(第一列) passwd
在这里插入图片描述
cut -d(分隔符) : -f(列) 1,3(1和3) passwd
在这里插入图片描述
cut -d(分隔符) : -f(列) 1-3(1到3) passwd
在这里插入图片描述
cut -c(位置) 2-4(2到4) passwd
在这里插入图片描述
cut -c(位置)2,4(2和4) passwd
在这里插入图片描述

4.sort命令:sort多用于字符排序

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

实验步骤如下
cd /meng
vim test(竖着写一些数字)
在这里插入图片描述
在这里插入图片描述
cat test查看文件内容
sort test仅对第一列数字排序
在这里插入图片描述
sort -n test对数字排序
在这里插入图片描述
sort -nr test对数字倒序排序
在这里插入图片描述
sort -nru test去掉重复的数字对数字倒序排序
在这里插入图片描述
sort -nru test -o westos指定排序结果到westos文件中
cat westos查看
在这里插入图片描述
vim test
加上分隔符,前面再加一列
在这里插入图片描述
在这里插入图片描述

sort -n test仅仅对分隔符前的数字进行排序
在这里插入图片描述
sort -t(指定分隔符) : -k(指定列) 2 -n test
在这里插入图片描述

5.uniq命令:对重复的字符做相应的处理

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

实验步骤如下
vim test 删除第一列和分隔符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sort test
在这里插入图片描述
sort -n test
在这里插入图片描述
sort -nu test
在这里插入图片描述
sort n test | uniq -c 每个数字只显示一次,并且显示出现的次数
在这里插入图片描述
sort n test | uniq -d显示重复的行并且进行排序
在这里插入图片描述
sort n test | uniq -u显示唯一的行并且排序
在这里插入图片描述

6.&&(表示true条件为真)命令和||(表示false条件为假)命令

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

实验如下
ping -c1 -w1 172.25.254.8(我的真机,肯定通) && echo up
在这里插入图片描述
ping -c1 -w1 172.25.254.88(随便写的,肯定不通) || echo down
在这里插入图片描述
ping -c1 -w1 $1 &> /dev/null && echo yes || echo no如果成立就是yes,如果不成立就是no

7.test命令:test 是 Shell 内置命令,用来检测某个条件是否成立

test命令(=和 == 均是相等的意思,与c语言不一样,c语言中 = 是赋值的意思,==是相等的意思)
test 命令 和 [ ] 等同,功能一样

test "$A" == "$B" 等同 [ "$A" == "$B" ]
[ "$A" = "$B" ]相等
[ "$A" != "$B" ]不相等
[ "$A" -eq "$B" ]等于
[ "$A" -ne "$B" ]不等于
[ "$A" -le "$B" ]小于等于
[ "$A" -lt "$B" ]小于
["$A" -ge "$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" ]判断前面的硬链接是否与新
["file1" -ot "file2" ]判断前面的硬链接是否旧
[-e "file" ]判断文件是否存在
[-f "file" ]判断文件是否为普通文件
[-L "file" ]是否为软链接
[-S "file" ]判断是否为套接字
[-b "file" ]判断是否为块设备
[-d "file" ]判断是否为目录
[-c "file" ]判断是否为字符设备

实验步骤如下

a=1
b=1
test "$a" = "$b" && echo yes || echo no

在这里插入图片描述

m=3
n=4
["$m"="$n"] && echo yes || echo no

在这里插入图片描述

m=3
n=4
["$m"!="$n"] && echo yes || echo no

在这里插入图片描述

m=3
n=4
[!"$m"="$n"] && echo yes || echo no

在这里插入图片描述

["$a" -eq "$b"] && echo yes || echo no

在这里插入图片描述

["$a" -ne "$b"] && echo yes || echo no

在这里插入图片描述

["$a" -lt "$b"] && echo yes || echo no

在这里插入图片描述

["$a" -le "$b"] && echo yes || echo no

在这里插入图片描述

["$a" -gt "$b"] && echo yes || echo no

在这里插入图片描述

["$a" -ge "$b"] && echo yes || echo no

在这里插入图片描述

["$a" -lt "1" -a "$b" -gt "5"] && echo yes || echo no

在这里插入图片描述

["$a" -lt "1" -o "$b" -gt "5"] && echo yes || echo no

在这里插入图片描述

[ -z "$a"] && echo yes || echo no 

在这里插入图片描述

[ -n "$a"] && echo yes || echo no 

在这里插入图片描述

cd /meng/
ls
ln /meng/westos /mnt/westos1

在这里插入图片描述

["/mnt/westos" -nt "/mnt/ping.sh"] && echo yes || echo no
["/mnt/westos" -ot "/mnt/ping.sh"] && echo yes || echo no

在这里插入图片描述

[ -e "/mnt"] && echo yes || echo no
[ -e "/mnt/linux"] && echo yes || echo no

在这里插入图片描述

[ -f "/mnt/"] && echo yes || echo no
[ -f "/mnt/westos"] && echo yes || echo no

在这里插入图片描述

[ -L "/etc/system-release"] && echo yes || echo no
ls -l /etc/system-release

在这里插入图片描述

yum install mariadb-server -y
systemctl start mariadb
ls -l /var/lib/mysql/mysql.sock
[ -S "/var/lib/mysql/mysql.sock"] && echo yes || echo no

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

[ -b "/dev/vda"] && echo yes || echo no

在这里插入图片描述

[ -d "/dev/vda"] && echo yes || echo no
[ -d "/dev/"] && echo yes || echo no

在这里插入图片描述

[ -c "/dev/pts/0"] && echo yes || echo no

在这里插入图片描述

8.tr命令:tr是translate的简写,只能翻译单个字符,不能翻译句子

tr --help
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值