1.diff
用法:diff [options] files|directorys
输出信息:
[num1,num2] [a|c|d] [num3,num4]
num1,num2 ##第一个文件中的行
a ##添加
c ##更改
d ##删除
< ##第一个文件中的内容
> ##第二个文件中的内容
num3,num4 ##第二个文件中的行
常用参数:
-b ##忽略空格
-B ##忽略空行
-i ##忽略大小写
-c ##显示文件所有内容并标示不同
-r ##对比目录
-u ##合并输出
2.patch
patch 原文件 布丁文件
-b ##备份原文件
3.cut
cut
-d : ##指定:为分隔符
-f ##指定显示的列 5第五列| 3,5 3和5列|3-5 3到5列|5- 第五列以后|-5 到第五列
-c ##指定截取的字符(数字用法同-f)
4.sort
-n ##纯数字排序
-r ##倒叙
-u ##去掉重复
-o ##输出到指定文件
-t ##指定分隔符
-k ##指定排序的列
5.uniq
-c #合并重复并统计重复个数
-d #显示重复的行
-u #显示唯一的行
6.tr
tr 'a-z' 'A-Z' ##小写转大写
tr 'A-Z' 'a-z' ##大写转小写
vim westos
hello word
tr 'l' 'a' < westos
heaao word
tr 'a-z' 'A-Z' < westos
HELLO WORD
7.&& ||
&& 符合条件作动作
|| 不符合条件作动作
ping -c1 -w1 172.25.254.17 #ping 这个ip等待一秒且执行一次
ping -c1 -w1 172.25.254.17 &> /dev/null #执行完放到系统垃圾箱里
ping -c1 -w1 172.25.254.17 &> /dev/null && echo yes || echo no #如果ping这个命令可以成功则执行yes,如果不能成功则执行no
vim test.sh #编写如要执行的脚本
ping -c1 -w1 172.25.254.17 &> /dev/null &&{
echo yes
echo hello westos
date
cal
}||{
echo no
}
sh test.sh #执行刚才编写的脚本
vim ~/.vimrc #设置显示文件里面的行数
set nu ts=2 ai et sw=2 #显示行数,tab键相当于两个字符,
8.test
test = [] ##[] 就相当于test命令
"test $a = $b" = [ "$a" = "$b" ]
test数字对比
=
!=
-eq ##等于
-ne ##不等于
-le ##小于等于
-lt ##小于
-ge ##大于等于
-gt ##大于
实验:
a=1
b=1
test "$a" = "$b" && echo yes || echo no #a=b的话,显示yes,否则显示no
[ "$a" = "$b" ] && echo yes || echo no #a=b的话,显示yes,否则显示no
[ "$a" != "$b" ] && echo yes || echo no #a不等于b如果成立,显示yes,否则显示no
a=2
[ "$a" != "$b" ] && echo yes || echo no #a不等于b如果成立,显示yes,否则显示no
[ "$a" -gt "$b" ] && echo yes || echo no #a大于b如果成立,显示yes,不成立显示no
[ "$a" -ge "$b" ] && echo yes || echo no #a大于等于b如果成立,显示yes,不成立显示no
b=3
[ "$a" -ge "$b" ] && echo yes || echo no #a大于等于b如果成立,显示yes,不成立显示no
[ "$a" -lt "$b" ] && echo yes || echo no #a小于b如果成立,显示yes,不成立显示no
[ "$a" -le "$b" ] && echo yes || echo no #a小与等与b如果成立,显示yes,不成立显示no
[ "$a" -ne "$b" ] && echo yes || echo no #a不等于b如果成立,显示yes,不成立显示no
[ "$a" -eq "$b" ] && echo yes || echo no #a等于b如果成立,显示yes,不成立显示no
test的条件关系
-a ##并且
-o ##或者
实验:
c=5
a=1
b=8
[ "$c" -ge "$a" -a "$c" -le "$b" ] && echo yes || echo no #c大于等于a 并且 c小于等与b ,如果成立,显示yes,不成立显示no
[ "$c" -le "$a" -o "$c" -ge "$b" ] && echo yes || echo no #c小于等于a 或者 c大于等与b ,如果成立,显示yes,不成立显示no
c=20
[ "$c" -le "$a" -o "$c" -ge "$b" ] && echo yes || echo no #c小于等于a 并且 c大于等与b ,如果成立,显示yes,不成立显示no
test对空的判定
-n ##nozero 判定内容不为空
-z ##zero 判定内容为空
[ -z "$d" ] && echo no || echo yes #如果d的值是空的,成立的话,显示no,不成立显示yes
[ -n "$d" ] && echo yes || echo no #如果d的值是不是空的,成立的话,显示yes,不成立显示no
test对于文件的判定
-ef ##文件节点号是否一致(硬链)
-nt ##文件1是不是比文件2新
-ot ##文件1是不是比文件2老
-d ##目录
-S ##套结字
-L ##软连接
-e ##存在
-f ##普通文件
-b ##快设备
-c ##字符设备
rm -rf *
touch westos
touch westos1
ls -i #查看文件节点号
[ "westos" -nt "westos1" ] && echo yes || echo no #westos文件比westos1文件新,是的话显示yes,不是显示no
[ "westos" -ot "westos1" ] && echo yes || echo no #westos文件比westos1文件老,是的话显示yes,不是显示no
[ -f "westos" ] && echo yes || echo no #westos是不是普通文件,是的话显示yes,不是显示no
[ -e "westos" ] && echo yes || echo no #westos是不是存在,是的话显示yes,不是显示no
[ -d "westos" ] && echo yes || echo no #westos是不是目录,是的话显示yes,不是显示no
[ -d "/mnt" ] && echo yes || echo no #/mnt是不是目录,是的话显示yes,不是显示no
[ -L "westos" ] && echo yes || echo no #westos是不是软连接,是的话显示yes,不是显示no
ln -s /mnt/westos /mnt/test #创建软连接
[ -L "test" ] && echo yes || echo no #test是不是软连接,是的话显示yes,不是显示no
[ -b "test" ] && echo yes || echo no #test是不是块设备,是的话显示yes,不是显示no
[ -b "/dev/vda" ] && echo yes || echo no #/dev/vda是不是软连接,是的话显示yes,不是显示no
[ -c "/dev/vda" ] && echo yes || echo no #/dev/vda是不是字符设备,是的话显示yes,不是显示no
[ -c "/dev/pts/0" ] && echo yes || echo no #/dev/pts/0是不是字符设备,是的话显示yes,不是显示no
[ -S "/dev/pts/0" ] && echo yes || echo no #/dev/pts/0是不是套接字,是的话显示yes,不是显示no
dnf install mariadb-server -y #下载mariadb
systemctl start mariadb #开启mariadb服务
[ -S "/var/lib/mysql/mysql.sock" ] && echo yes || echo no #/var/lib/mysql/mysql.sock是不是套接字,是的话显示yes,不是显示no
测试题:
1.ifconfig 网卡 可以显示此网卡的信息
显示信息中包含此网卡使用的ip地址
请用命令过滤此ip并在输出时只显示ip其他信息不显示ifconfig ens3 | head -n 2 | tail -n 1 | cut -d " " -f 10
2.找出能登陆系统用户中UID最大的用户,并显示其名称
编写脚本完成以下条件
file_check.sh 在执行时
如果脚本后未指定检测文件报错“未指定检测文件,请指定”
如果脚本后指定文件不存在报错“此文件不存在”
当文件存在时请检测文件类型并显示到输出中