一、shell(计算机壳层)
- 在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器), 它类似于DOS下的command.com和后来的cmd.exe,它接收用户命令,然后调用相应的应用程序,同时它又是一种程序设计语言,作为命令语言, 它交互式(从键盘输入,并且可以立即得到响应)解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令,作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。在排序算法中,Shell是希尔排序的名称 简单来说,其实shell就是用户和系统交互的工具。
- shell包在Linux内核的外面,为用户和内核之间的交互提供了一个接口。
- shell脚本:脚本是一种解释型语言,用shell脚本保存执行动作,用脚本判定命令的执行条件,用脚本来实现动作的批量执行
- 交互式模式 :shell等待你的输入,并且执行你提交的命令
- 非交互式模式: 在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们,当它读到文件的结尾,shell也就终止了,也就是一个自动执行的脚本
二、shell中常用的基本命令
1、diff 命令(比对文件)
1.1 基本概念以及命令的格式
- diff 命令是用来比较两个文件或目录的不同,够借由 diff 创建的分析档,以处理补丁(patch)功能的文件
diff file1 file2 | 比较两个文件的不同之处
diff direcory1 directory2 | 比较两个目录的不同之处
1.2 结果读取方式
[num1,num2][a|c|d][num3,num4]
- num1,num2 表示在第一个文件中的行数 num3,num4 表示在第二个文件中的行数
- a表示添加 ----add; c表示更改 ----change ;d 表示删除 ----delete
- < 表示第一个文件中的内容 ; > 表示第二个文件中的内容 ; — 分割线
- 2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中(表示第一个文件和第二个文件的不同之处在于第二行和第四行)
1.3 diff中常用的参数
| 参数 | 含义 |
|---|---|
| -b 或 --ignore-space-change | 不检查空格字符的不同 |
| -B 或 --ignore-blank-lines | 不检查空白行 |
| -c | 显示全部内文,并标出不同之处 |
| -i 或 --ignore-case | 不检查大小写的不同 |
| -p | 若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称 |
| -q 或 --brief | 仅显示有无差异,不显示详细的信息 |
| -r 或 --recursive | 比较子目录中的文件 |
| -u | 以合并的方式来显示文件内容的不同 |
- -q和-c的不同之处 ,-c更智能一些
实验 :

(1)diff file1 file2

(2)diff -b file1 file 对比忽略空格

(3)diff -B file1 file 对比忽略空行

(4)diff -c file1 file 显示全部,并用+,!标出不同之处

(5)diff -i file1 file 对比忽略大小写

(6)diff -q file1 file 对比仅显示有无差异,不显示详细信息

(7)diff -r /ranran/file1 /ranram/file 递归比较子母录中的文件

(8)diff -u file2 file1

2、patch命令(打补丁)
2.1基本概念以及命令的用法
- 用于不同文件打布丁,这个指令常与 diff 配合使用,先比较新旧版本的差异,并将差异档制作成为补丁文件,再由补丁文件更新旧文件。
- patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。
- 打补丁的软件: patch
patch [options] file.old(旧文件) file.path(补丁文件)
2.2patch常用参数
| 参数 | 含义 |
|---|---|
| -b或–backup | 备份每一个原始文件。在修补文件时,重命名或复制原始文件,而不是删除它 |
| -p | 后面可以接“取消几层目录”的意思。 |
| -R | 代表还原,将新的文件还原成原来旧的版本 |
(1)yum install patch -y 安装打补丁的软件

(2)diff -u file1 file2 >file.path 生成补丁文件
(3)patch -b file1 file.path 修补文件test1
3、cut命令(字符截取)
- cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
| 命令 | 含义 |
|---|---|
| cut -d | 指定分隔符 |
| cut -f 1,7 | 截取1和7列 |
| cut -c 1,4 | 1-4 指定截取的字符位置 |
(1)cut -d :-f 1 passwd 截取以:为分隔符的第一列

(2)cut -d :-f 1-3 passwd 截取以:为分隔符的第1列到第3列

(3)cut -d :-f 1,3 passwd 截取以:为分隔符的第1列和第3列

(4)cut -c 1,3 passwd 截取第1个和第3个字符

(5)cut -c 1-3 passwd 截取第1个到第3个字符

4、sort(字符排序)
| 命令 | 含义 |
|---|---|
| sort -n | 纯数字排序 |
| sort -r | 倒序 |
| sort -u | 去掉重复数字 |
| sort -o | 输出到指定文件中 |
| sort -t | 指定分隔符 |
| sort -k | 指定要排序的列 |
(1)sort file 仅对第一列数字排序

(2)sort -n file 对数字排序

(3)sort -nr file 对数字倒序排序

(4)sort -nru file 去掉重复的数字且对数字倒序排序

(5)sort -nru file -o test 指定排序结果到test文件中

(6)sort -t(指定分隔符) : -k(指定列) 3 -n passwd 对以:为分隔符的第3列数字进行排序

5、uniq(处理重复的字符)
| 命令 | 含义 |
|---|---|
| uniq -u | 显示唯一的行 |
| uniq -d | 显示重复的行 |
| uniq -c | 每行显示一次并统计重复次数 |
(1)sort -n file | uniq -c 每行仅显示一次,并且显示出现的次数

(2)sort -n file | uniq -d 显示重复的行并且进行排序

(3)sort -n file | uniq -u 显示唯一的行并且排序

6、&&(表示true条件为真)命令和||(表示false条件为假)命令
- &&命令:用来执行条件成立后执行的命令
- ||命令: 用来执行条件不成立后执行的命令
7、test命令 (test 是 Shell 内置命令,用来检测某个条件是否成立)
- test “ A " = = " A" == " A"=="B” 等同 [ “ A " = = " A" == " A"=="B” ]
| 命令 | 含义 |
|---|---|
| [ “ A " = " A" = " A"="B” ] | 相等 |
| [ “ A " ! = " A" != " A"!="B” ] | 不相等 |
| [ “ A " − e q " A" -eq " A"−eq"B” ] | 等于 |
| [ “ A " − n e " A" -ne " A"−ne"B” ] | 不等于 |
| [ “ A " − l e " A" -le " A"−le"B” ] | 小于等于 |
| [ “ A " − l t " A" -lt " A"−lt"B” ] | 小于 |
| [“ A " − g e " A" -ge " A"−ge"B” ] | 大于等于 |
| [“ A " − g t " A" -gt " A"−gt"B” ] | 大于 |
| [“ A " − n e " A" -ne " A"−ne"B” -a “ A " − g t " A" -gt " A"−gt"B” ] | 与条件(必须条件都满足才成立) |
| [“ A " − n e " A" -ne " A"−ne"B” -o “ A " − g t " A" -gt " 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” ] | 判断是否为字符设备 |
(1)[ “ A " = " A" = " A"="B” ] A等于B

(2)[ “
A
"
−
e
q
"
A" -eq "
A"−eq"B” ] A等于B

(3)[ “
A
"
!
=
"
A" != "
A"!="B” ] A不等于B

(4)[ “
A
"
−
n
e
"
A" -ne "
A"−ne"B” ] A不等于B

(5)[ “
A
"
−
g
e
"
A" -ge "
A"−ge"B” ] A大于等于B

(6)[ “
A
"
−
g
t
"
A" -gt "
A"−gt"B” ] A大于B

(7)[ “
A
"
−
l
e
"
A" -le "
A"−le"B” ] A小于等于B

(8)[ “ A " − l t " A" -lt " A"−lt"B” ] A小于B

(9)[ -z “$A” ] 字符串的长度为空

(10)[ -n “$A” ] 字符串的长度非空

8、tr命令(转换大小写)

三、脚本
1、过滤出本机的ip
(1)方法一

(2)方法二

(3)方法三

2、查看 / cpu% 使用率且超过 30% 报警,报警信息导入到日志



本文介绍了Linux shell脚本中的基本命令,包括diff、patch、cut、sort、uniq、逻辑运算符(&&与||)、test命令以及tr命令的使用方法,通过实例演示了如何在shell脚本中应用这些命令,帮助读者掌握shell脚本的基础操作。
8182

被折叠的 条评论
为什么被折叠?



