Shell编程2_常用命令

Shell编程2_常用命令


1.diff命令:

用来比较两个文件或目录的不同

格式:
diff [options] [target1] [target2]
diif --help 查看帮助

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

这里写图片描述
这里写图片描述

2.patch:

“你知道最强的英雄是什么吗?那就是补丁!” - - - From Jax LOL
打补丁!
yum install patch -y ##下载patch命令

用于文件不同文件打布丁
patch [options] file.old file.path -b

这里写图片描述

3.cut | head | tail

cut -d         指定分隔符
cut -f 1,7|1-7 指定截取的列
cut -c 1,4|1-4 指定截取的字符位置
cut -b 1,4|1-4 指定截取的字节位置

head -n 10 + 文件名    截取该文件的前10行

tail -n 5 + 文件名 截取该文件的最后5

复制/etc/passwd 到当前目录下

head -n 5 passwd  | cut -d : -f 1  ##查看passwd前5行内容,并截取分割符:的第一列内容
head -n 5 passwd  | cut -d : -f 17  ##查看passwd前5行内容,并截取分割符:的第一列第7列内容
head -n 5 passwd  | cut -d : -f 1-3  ##查看passwd前5行内容,并截取分割符:的第一列到第3列内容

这里写图片描述

3-2【练习】编写脚本ip_show.sh输入eth0看其ip

#!/bin/bash
ifconfig $1 | head -n 2 | tail -n 1 | cut -d " " -f 10

这里写图片描述

4.sort 多用于排序

sort -n 纯数字排列正序号
sort -nr 倒序(纯数字)
sort -r 倒序排列按每个数字的第一个字符
sort -u 去掉重复数字
sort -o 输出到指定文件
sort -t 指定分隔符
sort -k 指定要排序的列
-----------------
对重复字符的处理
uniq -u 显示唯一的行不重复
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数

这里写图片描述

可用关键字进行组合
sort -u file1 去掉重复字排序
sort -un file1 去掉重复字按正序排列
sort -ur file1 去掉重复字按第一个数字倒序排列
sort -urn file1 去掉重复字按纯数字正序排列

这里写图片描述

sort -o  新文件名  输出指定文件 常和其他参数配合使用
和 > 方法效果一致

这里写图片描述

sort -t 分隔符 -k num   指定分隔符,按第num列排序
举个栗子:
sort -n file1 -t " " -k 1  对于文件file1按分割符空格前第一列正序排序

这里写图片描述

扫描二维码关注公众号,回复: 1854730 查看本文章

4-2.uniq对重复字符的处理(常配合sort使用)

uniq -u 显示唯一的行不重复(重复的数字行与行之间未挨着算不重行)
uniq -d 显示重复的行(重复的n行紧挨着)
uniq -c 每行显示一次并统计重复次数

这里写图片描述

4-3【练习】显示正序排列后显示唯一的不重行

这里写图片描述

5.&& 和 ||

&& 用来执行条件成立后执行的命令(正确输出)

|| 用来执行条件不成立后执行的命令(错误输出)

这里写图片描述

5-2【练习】编写脚本ping.sh 执行脚本平通某个id输出该ip is net up,否则该ip is net down

提示:
ping -c1 -w1 172.17.243.246 && echo up 
ping -c1 -w1 172.17.243.245 || echo down

这里写图片描述
这里写图片描述

6.text测试

test 命令和[]等同

test"$A" == "$B" 等同于 [ "$A" == "$B" ]
[ "$A" = "$B" ] A等于B
[ "$A" !="$B" ] A不等于B
[ "$A" -ne "$B" ]  -ne等于
[ "$A" -eq "$B" ] -eq等于
[ "$A" -le "$B" ] -le小于等于
[ "$A" -lt "$B" ] -lt小于
[ "$A" -ge "$B" ] -ge大于等于
[ "$A" -gt "$B" ] -gt大于
[ "$A" -ge "$B" -a "$A" -le "$C" ]  -a且 A大于等于B且A小于等于C
[ "$A" -ge "$B" -o "$A" -le "$C" ]  -o或 A大于等于B或A小于等于C

[ -z "$A" ] A为空
[ -n "$A" ] A不为空

[ "file1" -ef "file2" ]第一个档案与第二个档案为同一个档案( link 之类的档案)
[ "file1" -ot "file2" ]第一个档案比第二个档案旧
[ "file1" -nt "file2" ]第一个档案比第二个档案新

[ -e "file" ]   file文件存在否
[ -f "file" ]   file为普通文件
[ -L "file" ]   file为连接
[ -S "file" ]   file套接字
[ -b "file" ]   file块设备 
[ -d "file" ]   file目录
[ -c "file" ]   file字符设备

这里写图片描述

6-2【练习】

实验1:-a 和 -o

输入三个数A=6,B=4,C=7若A大于等于B且A小于等于C显示yes,否则显示no

提示
[ "$A" -ge "$B" -a "$A" -le "$C" ]  -a且 A大于等于B且A小于等于C
[ "$A" -ge "$B" -o "$A" -le "$C" ]  -o或 A大于等于B或A小于等于C

这里写图片描述

输入三个数A=4,B=6,C=7若A大于等于B且A小于等于C显示yes,否则显示no

输入三个数A=4,B=6,C=7若A大于等于B或A小于等于C显示yes,否则显示no
这里写图片描述

实验2:判断A是否为空

[ -z "$A" ]  空字符
[ -n "$A" ]  非空字符

这里写图片描述

实验3:判断文件的新旧

[ "file1" -ot "file2" ]第一个档案比第二个档案旧
[ "file1" -nt "file2" ]第一个档案比第二个档案新

这里写图片描述

实验4:判断文件是否为同一类型

[ "file1" -ef "file2" ]第一个档案与第二个档案为同一个档案( link 之类的档案)

这里写图片描述

实验5:新建脚本check_filestyle.sh判断文件的属性

[ -e "file" ]   file文件存在否
[ -f "file" ]   file为普通文件
[ -L "file" ]   file为连接
[ -S "file" ]   file套接字
[ -b "file" ]   file块设备 
[ -d "file" ]   file目录
[ -c "file" ]   file字符设备

实验6:新建cpu_use.sh当/目录使用率大于20%时发邮件给root用户

#!/bin/bash
USER=`df / | tail -n 1 | cut -d " " -f 14 | cut -d % -f 1`
[ "$USER" -gt "80" ] && echo  "CPU USED RATE TOO MUCH" | mail -s warning root || echo &>/dev/null

查看使用量和创建大文件
这里写图片描述

设置关键语句
这里写图片描述

实验7:新建脚本clean_logs.sh root用户可以执行该脚本清空日志,显示清理成功显示内容字体为红色;普通用户则不能清理日志,显示内容为绿色

vim check_file.sh
#!/bin/bash
[ "$USER" = "root" ] &&
          (
            >/var/log/messages 
            echo -e "\033[31;1mRoot clean logs!!\033[0m"
       )||(
           echo -e "\033[32;1mYou are not root,Don't clean logs!!\033[0m"
           )

这里写图片描述

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zwhzwh0228/article/details/80822042