Shell 基础命令简介
diff 命令的使用
diff命令是在比较文件过程中结果读取方式
diff - compare files line by line 对文件逐字逐句的对比
[num1,num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件的行数
a 表示添加 add
c 表示更改 change
d 表示删除 delete
< 表示第一个文件中的内容,
表示第二个文件的内容
num3,num4 表示在第二个文件中的行数
2,4a2,4 表示改变第一个文件中的第二行和第四行,才能匹配第二个文件的第二行和第四行
2-4 表示第二行到第四行
2,4 表示第二行和第四行
diff test1 test2
diff命令常用的参数
-b 不检查空格字符的不同
diff -b test1 test2
test2 文件 test 后面有一个空格
-B 不检查空白行
-c 显示全部内文,并标出不同之处
-i 不检查大小写的不同
-p 若比较的文件为c语言的程序码文件时,显示差异所在的名称
patch
安装patch文件
yum install patch -y
patch 的用法
patch -b test1 test.path
给 test1 文件打 test.path 补丁 使 test1 文件与 test2 文件相同
cat test1 test2
cut 命令多用于字符的截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取的列
cut -c 1,3|1-3 指定截取字符的位置
示例:
截取eth0的ip地址:
ifconfig eth0 | head -n 2 | tail -n 1 | cut -c 14-28
截取 /etc/passwd 文件中第二行的 “nologin
cat passwd | head -n 2 | tail -n 1 | cut -d : -f 7 | cut -d / -f 3
head -n 2 | tail -n 1 | cut -d : -f 1,3,5
头部 2 行 | 尾部 1行 | 分别截取以 : 分隔的第一、三、五列
sort 多用于字符的排序
sort -n 纯数字排序
sort -r 倒序
sort -u 去除重复的数字
sort -o 输出到指定的文件中
sort -t 指定分隔符
sort -k 指定要排序的列
sort -nr test | uniq -c | sort -t " " -k 2
指定每行显示一次并且按照分隔符空格排序两列
sort -nr test | uniq -c | sort -t " " -k 2 -r
指定每行显示一次并且按照分隔符空格排序两列并且倒序排列
sort -nr test | uniq -c | sort -t " " -k 2 -r | head -1
指定每行显示一次并且按照分隔符空格排序两列并且倒序排列抓取第一行
uniq 对重复的字符作相应的处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复的次数
‘&&’ and ‘||’
&& 用来执行条件成立后的执行命令
|| 用来执行条件不成立的执行命令
例如:
ping -c1 -w1 172.25.254.111 && echo up
ping -c1 -w1 172.25.254.111 || echo down
test 命令 ##用来判断的命令
文件名、类型判断
-e 该文件名是否存在
-f firename 判断该文件名是否存在并且是否是普通文件
-d 该文件是否存在并且是否是目录
-b 该文件是否存在并且是否是块设备
-c 该文件是否存在且是否是一个character device设备
-S 该文件是否存在且是一个套接子socket文件
-p 该文件是否是FIFO(pipe)文件
-L 该文件是否是一个链接文件
文件权限判断
-r 检测文件是否可读取的权限
-w 检测文件是否可写
-x 检测文件是否可执行
-u 检测文件是否有SUID的权限
-g 检测文件是否有SGID的权限
-k 检测文件是否有sticke bit的权限
-s 检测文件名是否为空
两个文件的比较
[“file1”-nt"file2"] (newer than) 判断file1是否比file2新
[“file1”-ot"file2"] (older than) 判断file1是否比file2旧
[“file1”-ef"file2"] 判断file1 file2是否是一个文件,可用在判定hard link上
数字之间的判定
test 命令和[] 等同
test “
A
"
=
=
"
A"=="
A"=="B” 等同与 [“
A
"
=
=
"
A"=="
A"=="B”]
[“
A
"
=
"
A"="
A"="B”] ##判断
A
是
否
等
于
A是否等于
A是否等于B
[“
A
"
!
=
"
A"!="
A"!="B”] ##判断
A
是
不
等
于
A是不等于
A是不等于B
[“
A
"
−
e
q
"
A"-eq"
A"−eq"B”] ##(equal)等于
[“
A
"
−
n
e
"
A"-ne"
A"−ne"B”] ##(not equal)不等于
[“
A
"
−
g
t
"
A"-gt"
A"−gt"B”] ## (greater than)大于
[“
A
"
−
l
t
"
A"-lt"
A"−lt"B”] ## (less than) 小于
[“
A
"
−
g
e
"
A"-ge"
A"−ge"B”] ## (greater than or equal)大于或等于
[“
A
"
−
l
e
"
A"-le"
A"−le"B”] ## (less than or equal) 小于或等于
判断字符串的数据
test -z 判断字符串是否为0,若为空返回truestring
test -n 判断字符串是否为0,若为空返回falsestring
test str1=str2 判断str1是否等于str2 若相等就返回 truestring
test str1!=str2 判断str1是否不等于str2 若不相等就返回falsestring
多重条件判断
-a 两个条件同时成立
-o 任何一个条件成立
! 反向状态
tr大小写转换
示例:
vim /root/check_file.sh
[ -z “$1” ] && {
echo “Please input your filename”
exit
}
[ -e “$1” ] || {
echo “$1 is not exist”
exit
}
[ -f “$1” ] && {
echo “$1 is file”
exit
}
[ -d “$1” ] && {
echo “$1 is directory”
exit
}
[ -L"$1" ] && {
echo “$1 is softlinks”
exit
}
[ -S “$1” ] && {
echo “$1 is socket”
exit
}
[ -b “$1” ] && {
echo “$1 is block dev”
exit
}
[-c “$1” ] && {
echo “$1 is character dev”
exit
}
cat /root/check_file.sh
测试