阶段九:shell脚本之Shell小工具与判断语法

一、Shell编程小工具(重点)

1、cut工具

作用:cut是截取工具,用于列的截取

语法:

cut 选项  文件名

常见选项:

-c:        以字符为单位进行分割,截取
-d:        自定义分隔符,默认为制表符\t
-f:        与-d一起使用,指定截取哪个区域

举例说明:

cut -d: -f1 1.txt                         以:冒号分割,截取第1列内容
cut -d: -f1,6,7 1.txt                     以:冒号分割,截取第1,6,7列内容
cut -c4 1.txt                             截取文件中每行第4个字符
cut -c1-4 1.txt                           截取文件中每行的1-4个字符
cut -c4-10 1.txt                          截取文件中每行的4-10个字符
cut -c5- 1.txt                            从第5个字符开始截取后面所有字符

案例:提取出当前服务器上所有用户的用户名进行权限管理审查,但只需提取 /etc/passwd 文件中的用户名信息,而不需要其他字段。

解决方案:通过 cut 命令,使用 : 作为分隔符,仅提取用户名列。

cut -d: -f1 /etc/passwd

小结:

cut作用?用于截取指定列的信息

-c:字符

-d、-f:-d指定分隔符,-f指定截取第几列

2、sort工具

作用:sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

语法和选项:man sort

-u :uniq去除重复行
-r :reverse降序排列,默认是升序
-o :  将排序结果输出到文件中,类似重定向符号>
-n :以数字排序,默认是按字符排序
--------------------------------------------------
-t :分隔符
-k :第N列
-R :随机排序,每次运行的结果均不同

举例说明:

sort -n -t: -k3 1.txt                          按照用户的uid进行升序排列
sort -nr -t: -k3 1.txt                         按照用户的uid进行降序排列
sort -n 2.txt                                                   按照数字排序
sort -nu 2.txt                                             按照数字排序并去重
sort -nr 2.txt                                                  按照数字进行降序排列
sort -nru 2.txt                       按照数字进行降序排列并去重
sort -n 2.txt -o 3.txt                         按照数字排序并将结果重定向到文件
sort -R 2.txt                           随机排序
sort -u 2.txt                                                   去除重复行

sort作用?就是用于日常排序操作,默认按照字符升序,可以使用(-n)参数按照数字排序?如果想降序,使用(-r)

3、uniq工具

uniq用于去除连续的重复行
常见选项:
    -i:  忽略大小写
    -c: 在每一行的前面显示该行在文件中出现的次数 => 统计这一行出现频率频次 => 数据统计
    -d: 只显示重复行

举例说明:
    uniq 2.txt
    uniq -d 2.txt
    uniq -dc 2.txt

案例:在 CentOS Stream 9 的服务器上,运维团队检测到多次失败的登录尝试,怀疑存在潜在的恶意入侵。为了提高服务器的安全性,运维团队需要快速找到频繁失败登录的IP地址,以便采取进一步的安全措施(如阻止IP、加强认证机制等)

第一步:从日志中提取失败登录的IP地址

使用 grep 查找失败的登录尝试: 登录失败的相关日志通常包含 "Failed password" 关键字。

grep "Failed password" /var/log/secure | cut -d ' ' -f 13

执行结果:

关键参数:

注意事项:

双向操作:

基本语法





2c2
备注说明:
2左边文件行号
c(change)修改
2右边文件的行号

选项:-r选项代表递归操作


案例3:生成补丁文件(保证两个文件内容高度一致)

选项:-u选项以统一模式显示差异,这种格式在创建补丁时常用



我们还可以借助于diff补丁功能,保证两个文件内容的高度一致!



一般用于多日志合并分析

常用选项:
-d:delimiter,自定义间隔符,默认是tab
-s:串行处理,非并行

准备数据

1 2 3


**注意事项:**

效果


案例2:使用自定义分隔符

效果

a,1 b,2 c,3

效果


运维场景:在服务器上进行日志分析时,运维人员需要将不同日志文件的内容按行合并,以便比较同一时间段内发生的事件。

paste主要作用就是把文件进行(逐行)合并

实际生产环境中,通过把一些日志、文件进行逐行合并,方便分析。

tr用于字符转换,替换和删除;主要用于==删除文件中控制字符==或进行==字符转换==

基本语法

用法1:命令的执行结果交给tr处理,其中set1用于查询,set2用于转换处理 注:'set1'要替换或处理的字符集,'set2'将字符替换为的目标字符集

用法2:tr处理的内容来自文件,记住要使用"<"标准输入

用法3:匹配string1进行相应操作,如删除操作 常用选项:


常用正则表达式:


案例1:小写转大写

注意事项:


**注意事项:**

注意事项:

itheima/readme.txt


案例:

判断是否有读权限

判断是否有写权限


判断是否有执行权限

案例演示:

小结

通过新旧比较,了解两个文件的创建信息


案例:

a=5
b=5

案例:

a=8 b=7


小结:

由于在Shell脚本中,很多数学符号都有特殊含义,如果要进行日常比较,只能使用字母形式的比较符号!

案例演示:

1

0

1

0


**注意事项:**



逻辑判断符号:







生产应用:代替if...else语句

执行原理:

因为中间&&,必须两边同时为真,同时执行; 如果左边是假的,则右边完全不需要执行了, 因为逻辑与,必须两边同时成立,只要有一边为假,最终结果肯定是假的。

要想获取最终结果必须执行右边表达式,才能获取最终结果


**注意事项:**





&&:前面的表达式为真
||:前面的表达式为假

注意事项:

在日常运维中,管理员往往需要定期执行一系列检查操作,例如:

检查系统负载、活动进程和日志信息。

目前,手动执行这些检查任务耗时且容易出错,因此需要一个自动化脚本来定期执行这些任务,并将检查结果保存为日志,以供运维人员查看和分析。

#!/bin/bash

LOG_FILE="/var/log/centos_stream_9_health_check.log"


**注意事项:**




安装后打开,如下图所示:

![](/assets/feishu-images/031b85da52fd980e6486b95c.png)

点击左下角扩展模块(积木小图标)

![](/assets/feishu-images/cbebdae8e5921eae1ccf5bec.png)

在搜索框中,输入Tongyi关键词,安装通义灵码插件

![](/assets/feishu-images/fd02c462c2b4a68d47b86b04.png)

安装完成后,点击Login登录,使用阿里云账号即可登录并免费使用通义灵码工具

![](/assets/feishu-images/e217cf9e5aff82c9f79efe1e.png)

使用通义灵码,辅助运维开发工作

![](/assets/feishu-images/6847dc88e62703bc44d9fe73.png)



官网地址:[https://kimi.moonshot.cn/](https://kimi.moonshot.cn/)

![](/assets/feishu-images/fc23c2c93bd1c2cf1c53a9ed.png)

基于以上按钮上传课程讲义,然后让大模型帮助我们做核心内容的总结:

![](/assets/feishu-images/c4f63ab8d869b64be40251ea.png)

辅助学习:

![](/assets/feishu-images/bc6fcd39dbfd227d3cc513c3.png)


![](/assets/feishu-images/bddaa48f0b555d704f342ef5.png)