Shell编写常用命令
{}表示中内容属于哪一个程序
()表示括号中内容表示一个整体
1、diff命令
1)diff 命令时用俩比较两个文件或者目录的不同
diff file file1
diff dir dir1
2)diff中常用的参数
-b 或 --ignore-space-change ##不检查空格字符的不同
-B 或--ignore-blank-lines ##不检测空白行
-c ##显示全部内容,并标出不同之处
-i 或--ignore-case ##不检查大小写的不同
-p ##若比较的文件为c语言的程序码文件时,显示差异所在的函数名称
-q 或--brief ##仅显示有无差异,不显示详细的信息
-r 或--recursive ##比较子目录中的文件
-u ##以合并的方式来显示文件内容中的不同
3)diff在比较文件过程中结果读取方式
[num1,num2][a|c|d][num3,num4]
num1,num2表示在第一个文件中的行数
a表示添加-----add
c表示更改-----change
d表示删除-----delete
例:
[email protected] mnt]# diff text text1
3c3
< 123 ##<表示第一个文件中的内容
--- ##分割线
> 1233 ##>表示第二个文件中的内容
表示第一个文件的第三行和第二个文件的第三行不同,
4)补丁:
diff -u file file1 > file.path ##file.path 就是补丁
yum install patch -y
patch file file.path ##添加补丁,不保留源文件
或patch -b file file.path ##-b 保留原文件,原文件为file.orig,即*.orig
2、cut
cut 命令多用于字符截取
cut -d ##指定分隔符
cut -f 1,7|1-7 ##指定截取的列,1,7表示第1列和第7列,1-7表示截取1到7列
cut -c 1,4|1-4 ##指定截取的字符位置
3、sort
多用于字符排序
sort -n ##纯数字排序
sort -r ##倒序
sort -u ##去掉重复数字
sort -o ##输出到指定文件中
sort -t ##指定分隔符
sort -k ##指定要排序的列
uniq
对重复字符做相应的处理
uniq -u ##显示唯一的行
uniq -d ##显示重复的行
uniq -c ##每行显示一次并统计重复次数
一般sort和uniq组合时用,如
sort -rn westos | uniq -u
4、$$和||
||表示条件不成立
&&表示不成立
ping -c1 -w1 172.25.254.333 && echo yes ||echo no ##成立输出yes,不成功输出no,-c1 -w1 表示刷新一次,等待时间为一秒
5、test
test命令和[]等同
test "$A" ="$B" 等同于 [ "$A" = "$B" ]
[ "$A" = "$B" ] ##等于
[ "$A" != "$B" ] ##不等于
[ "$A" -eq "$B" ] ##等于
[ "$A" -ne "$B" ] ##不等于
[ "$A" -le "$B" ] ##小于等于
[ "$A" -lt "$B" ] ##小于
[ "$A" -ge "$B" ] ##大于等于
[ "$A" -gt "$B" ] ##大于
-a ##且
-o ##或
-z ##表示为空
例:当cpu使用超过80%时,会在日志中出现报错提示。
测试:
截取数据
dd if=/dev/vdb of=/bigfile1 bs=100M count=30
dd if=/dev/vdb of=/bigfile2 bs=100M count=30
df
清空日志便于查看
例:运行sh ping.sh,要求检测是有输入ip,并检测网络情况
[ -n "$1" ]&& {
ping -c1 -w1 $1 &> /dev/null && echo $1 is up || echo $1 is down ## -c1 -w1 表示刷新一次,等待时间为一秒
}||{
echo "请在命令后加入您要检测的IP"
}
-nt 表示比较两个文件哪个时间新
-ef 表示这两个文件是不是同一个
-ot 表示哪个文件时间老
[ -z "$1" ] ##是否是空
[ -e "$1" ] ##是否存在
[ -f "$1" ] ##纯文本
[ -L "$1" ] ##链接
[ -b "$1" ] ##块设备
[ -c "$1" ] ##字符设备
[ -d "$1" ] ##目录
[ -S "$1" ] ##套接字
tr 'a-z' 'A-Z' < westos ##替换大小写
例子:编写shell 执行sh check_file.sh 时,检测是否有输入,以及输入的文件或者目录的类型
vim check_file.sh
#!/bin/bash
[ -z "$1" ]&& {
echo "Please show me a file after script !!!"
exit
}
[ -e $1 ] || {
echo "$1 is not exist"
exit
}
[ -L "$1" ]&& {
echo "$1 is a link file"
exit
}
[ -f "$1" ]&& {
echo "This is a file"
exit
}
[ -c "$1" ]&& {
echo "$1 zifushebei"
exit
}
[ -d "$1" ]&& {
echo "$1 is a diretcort"
exit
}
[ -b "$1" ]&& {
echo "$1 is a block"
exit
}