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 1,7 ##查看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按分割符空格前第一列正序排序
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"
)