shell脚本常用命令

一.diff命令

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

diff [options] target1 target2
diff file1 file2
diff direcory1 directory2

diff 在比较文件过程中结果读取方式

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

在这里插入图片描述
diff 在比较目录过程中结果的读取

Only in directroy/: filename
directory 表示在那个目录中
filename 表示在这个目录

diff 中常用的参数

可用man diff查询具体用法

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

-b 不检查空格字符的不同

test与test不同之处在于多了空格,使用-b则发现没有不同。
在这里插入图片描述
-B 不检查空白行

在这里插入图片描述

-c 显示全部内文,并标出不同之处
在这里插入图片描述
-i 不检查大小写的不同
在这里插入图片描述
-q 仅显示有无差异,不显示详细的信息
在这里插入图片描述
-r 或 --recursive :比较子目录中的文件
在这里插入图片描述
-u 以合并的方式来显示文件内容的不同
在这里插入图片描述

二.pacth

patch 命令读取如何更改文件的源文件指示信息,然后应用这些更改。源文件包含由 diff 命令产生的差别列表(或者 diff 列表)。差异列表是比较两个文件和构建关于如何纠正差别的指示信息的结果。缺省情况下,patch 命令使用从标准输入读入的源文件,但是使用 -i 标志和 PatchFile 变量可以覆盖此设置。

-b或–backup  备份每一个原始文件。在修补文件时,重命名或复制原始文件,而不是删除它
-p        后面可以接“取消几层目录”的意思。
-R :代表还原,将新的文件还原成原来旧的版本
patch [options] file.old file.path

首先要安装patch服务

yum install patch -y
diff -u test test1 > test.patch           ##以合并方式生成文件内容不同并导入test.patch
patch test test.patch                     ##给test打补丁

在这里插入图片描述

三.cut

cut 命令多用与字符截取

cut -d指定分隔符
cut -f指定截取的列
cut -c指定截取的字符位置

以:为分隔符截取文件passwd第一列
在这里插入图片描述
以:为分隔符截取文件passwd第一,三列
在这里插入图片描述
截取passwd文件位置第二个字符
在这里插入图片描述
截取passwd文件位置第二,三字符
在这里插入图片描述截取passwd文件位置第二到四中的所有字符
在这里插入图片描述

四.sort

多用于字符排序

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

创建文件file写入数字
在这里插入图片描述
sort -n纯数字排列
在这里插入图片描述
sort -nr file 纯数字倒序排列
在这里插入图片描述
sort -nu file去掉重复数字纯数字排列
在这里插入图片描述
sort -nu file -o westos 将上一个排列好的文件导入westos
在这里插入图片描述
vim file 创建新的file
在这里插入图片描述
以:为分隔符并以第二列按纯数字排列
在这里插入图片描述

五.uniq

对重复字符做相应的处理

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

在这里插入图片描述
在这里插入图片描述
实验:
抓取登陆你的主机的ip并显示最多的次数

last -i | grep 0.0.0.0 -v | cut -d " " -f 14 | uniq -c | sort -nr  | head -n 1
含义:显示ip,过滤0.0.0.0的行,取第14个字符开始的ip列,统计每个ip出现的次数,反向排序,取最高的值也就是第一行
或者
last -i | grep -E "0.0.0.0|wtmp " -v | awk '{print $3}' | uniq -c |sort -nr | head -n 1

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

六.&&和||

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

测试:
编写一个脚本,测试网络的通畅

-w wait 等待时间  不通的话时间会很长
-c count 次数
-e 颜色的设定
0m 关掉颜色的设定属性

没有颜色
在这里插入图片描述
在这里插入图片描述

有颜色显示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七.tr命令

tr,translate的简写,意思是转化,转变,转换。用来从标准输入中通过替换或删除操作进行字符转换。
在这里插入图片描述
编写脚本将小写转化成大写

vim upper.sh

#!/bin/bash
echo $1 | tr 'a-z' 'A-Z'

在这里插入图片描述

八.test命令

功能:检查文件类型和比较值。
lt 小于,le小于等于,ge 大于等于,gt 大于
在shell中,test命令 = [ ],=和==效果一样。

a=1
b=1    ##先赋值

test "$a" = "$b" && echo yes || echo no     ##判断a=b
[ "$a" = "$b" ] && echo yes || echo no       ##判断a=b
[ ! "$a" = "$b" ] && echo yes || echo no     ##判断a=b不成立是真还是假
[ "$a" != "$b" ] && echo yes || echo no      ##判断a不等于b

[ "$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小于1,且b大于5,两个都成立才输出yes
[ "$a" -lt "1" -o "$b" -gt "5" ] && echo yes || echo no     ##a小于1或b大于5,有一个成立则输出yes

在这里插入图片描述在这里插入图片描述
测试:
要求:当根分区使用量大于80%报警,并监控脚本执行情况将结果输出到日志文件/var/log/messages中。
在这里插入图片描述

vim checkstorage.sh

#!/bin/bash
[ "`df -h / | tail -n 1 | cut -d " " -f 15 | cut -d "%" -f 1 `" -ge "30" ] && {         ##为了实验效果明显写的30
        echo "Warning: /is full!" >> /var/log/messages
}
at now+1min <<-EOF        设置定时任务
checkstorage.sh
EOF

chmod +x checkstorage.sh     给脚本添加执行权限
ls -l checkstorage.sh
at -l    查看定时任务列表
at -c  +num    查看任务内容

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值