1.shell中常用的基础命令
1.diff
用法:
diff file1 file2 ##比较两文件的不同
输出信息:
[num1,num2] [a|c|d] [num3,num4]
num1,num2 ##第一个文件中的行
a ##添加
c ##更改
d ##删除
< ##第一个文件中的内容
> 第二个文件中的内容
num3,num4 ##第二个文件中的行
常用参数 | 描述 |
---|---|
-b | 忽略空格 |
-B | 忽略空行 |
-i | 忽略大小写 |
-c | 显示文件所有内容并标识不同 |
-r | 对比目录的不同 |
-u | 合并输出 |
2.path
diff -u一般用来生成补丁,安装patch。可以用patch命令给指定文件打补丁,-b备份原文件
diff -u file1 file2 > file.path
patch -b file1 file.path ##给file1打补丁让file1与file2相同
ls file1.orig ##备份文件
3.cut
-d : ##指定:为分隔符
-d " " ##指定空格为分隔符
-f ##指定显示的列
5 ##第五列
3,5 ##3和5列
3-5 ##3到5列
5- ##第五列以后
-5 ##开始到第五列
-c ##指定截取第几个字符(数字用法同-f)
cut -d : -f 3-5 /etc/passwd ##显示以:为分隔符的3到5列
cut -d : -f 3,5 /etc/passwd ##3和5列
cut -d : -f 3- /etc/passwd ##3列及往后
cut -c -7 /etc/passwd ##显示7个字符往前
.ifconfig 网卡 可以显示此网卡的信息,显示信息中包含此网卡使用的ip地址,请用命令过滤此ip并在输出时只显示ip其他信息不显示。
ifconfig ens3 | head -n 2 | tail -n 1 | cut -d " " -f 10
4.sort
-n ##纯数字排序
-r ##倒叙
-u ##去掉重复
-o ##输出到指定文件
-t ##指定分隔符
-k ##指定排序的列
sort -n westos ##按数字排顺序
sort -nr westos ##按数字排倒序
sort -nru westos ##-u去除重复
sort -nru westos -o test ##-o保存到test
sort -t : -k 2 westos ##以:为分隔符,以第2列为基准进行排序
找出能登陆系统用户中UID最大的用户,并显示其名称
grep bash /etc/passwd | sort -nr -t : -k 3 | cut -d : -f 1 | head -n 1
5.uniq
sort -n westos | uniq -c ##合并重复并统计重复个数
sort -n westos | uniq -d ##显示重复的行
sort -n westos | uniq -u ##显示不重复的行
6.tr
tr 'a-z' 'A-Z' < westos ##将westos里的内容转换为大写
tr 'l' 'X' < westos ##将L换为X
7.text
test = [] ##[] 就相当于test命令
“test $a =
b
"
相
当
于
[
"
b" 相当于[ "
b"相当于["a” = “$b” ]
test数字对比
-eq ##等于
-ne ##不等于
-le ##小于等于
-lt ##小于
-ge ##大于等于
-gt ##大于
test的条件关系
-a ##并且
-o ##或者
test对空的判定
-n ##nozero 判定内容不为空
-z ##zero 判定内容为空
test对于文件的判定
-ef ##文件节点号是否一致(硬链)
-nt ##文件1是不是比文件2新
-ot ##文件1是不是比文件2老
-d ##目录
-S ##套结字
-L ##软连接
-e ##存在
-f ##普通文件
-b ##快设备
-c ##字符设备
[ -e “/mnt/file” ] && echo yes || echo no ##判定文件是否存在
[ -b “/dev/vda” ] && echo yes || echo no ##判定目标是否为块设备
[ -f “/mnt/file” ] && echo yes || echo no ##判定目标是否为文件
[ -d “/mnt/dir” ] && echo yes || echo no ##判定目标是否为目录
[ -L “/mnt/file” ] && echo yes || echo no ##判定连接
[ -c “/dev/pts/0” ] && echo yes || echo no ##判定目标是否为字符设备
[ -S “/var/lib/mysql/mysql.sock” ] && echo yes || echo no ##判定目标是否为套节字
[ “/mnt/file” -ef “/mnt/file1” ] && echo yes || echo no ##判定两个文件是否为相同的节点号
[ “/mnt/file” -nt “/mnt/file1” ] && echo yes || echo no ##判定file文件是否比file1文件新
[ “/mnt/file” -ot “/mnt/file1” ] && echo yes || echo no ##判定file文件是否比file1文件老
TEXT
1.编写脚本test.sh 识别用户是否存在
#!/bin/bash
id $1 &> /dev/null && {
echo $1 is exist
} || {
echo $1 is not exist
}
2. 编写脚本判断数字是否在0-9之间
#!/bin/bash
[ "$1" -ge "0" -a "$1" -le "9" ] && {
echo $1 is in 0-9
}||{
echo $1 is not in 0-9
}
3.编写脚本判断文件类型
#!/bin/bash
[ -z "$1" ] && {
echo "未指定检测文件,请输入文件名称"
exit
}
[ -e "$1" ] || {
echo "文件不存在"
exit
}
[ -d "$1" ] && {
echo "此文件为目录"
exit
}
[ -S "$1" ] && {
echo "此文件为套接字"
exit
}
[ -L "$1" ] && {
echo "此文件为软连接"
exit
}
[ -f "$1" ] && {
echo "此文件为普通文件"
exit
}
[ -b "$1" ] && {
echo "此文件为块设备"
exit
}
[ -c "$1" ] && {
echo "此文件为字符设备"
exit
}