==========diff===========
基本参数:
a ##添加 c ##更改 d ##删除 <:第一个文件中的内容 >:第二个文件中的内容
[num1,num2][a][d][c][num3][num4] ###[num1][num2]:第一个文件中的行 [num3][num4]:第二个文件中的行
1c1 第一个文件的第一行和第二个文件的第一行不同:更改
< Hello westos
---
> hello westos
2a3 ##第一个文件第二行和第二个文件的第三行:添加
> 456 ###第二个文件的456
diff westos westos1 ##对比
diff -i westos westos1 ##忽略大小写
diff -b westos westos1 ##忽略空格
diff -B westos westos1 ##忽略空行
diff -c westos westos1 ##显示所有内容并显示不同
diff -u westos westos1 ##合并输出(用于补丁)
diff -r file file1 ##对比目录
patch补丁
patch 原文件 补丁文件
diff -u westos westos1 > westos.patch ###合并输出生成补丁文件
dnf install patch -y ###下载服务
patch -b westos westos.patch ###给westos打补丁并备份原文件
2.==========cut================
-d : ###指定':'为分隔符 -c #指定截取的字符 -f ##指定截取的列
head -n1 passwd ###查看文件第一行
head -n3 passwd | tail -n1 ###查看前三行 | 再看前三行的最后一行=查看第三行
cut -c 1-3 passwd ###查看第1-3个字符
cut -c 5- passwd ###查看第五个字符之后
cut -c -2 passwd ###查看前两个字符
cut -d : -f 1,4 passwd ###指定:为分隔符,查看第1列和第4列
3. ============sout========
sort westos ###按第一个字符排序
sort -n westos ###数字排序
sort -nr westos ###数字倒序
sort -nru westos ###去掉重复数字倒序
sort -nru westos -o westos1 ###去掉重复数字倒序输出为westos1 '-o'='>'
sort -t : -k 2 -n westos ###指定:为分隔符,指定第二列按纯数字排序
sort -n westos | uniq -d ###显示重复的行
sort -n westos | uniq -u ###显示唯一的行
sort -n westos | uniq -c ###合并重复并统计重复个数
sort -t : -k 2 -n westos | uniq -c ###指定:为分隔符,指定第二列按纯数字排序,合并重复并统计重复个数
5.=========tr================
tr 'a-z' 'A-Z' < westos ###将westos中a-z转换为大写
tr 'l' 'g' < westos ###将wesots中l换为g
6.==========&&/||=============
ping -c1 -w1 172.25.254.3 &> /dev/null && echo yes || echo no ###等待1秒ping一次,成功输出yes,失败输出no
7.=============test==============
a=1
b=1
test "$a" = "$b" && echo yes || echo no 等效于[ "$a" = "$b" ] && echo yes || echo no ###a=b:yes,否则为no
[ "$a" != "$b" ] && echo yes || echo no ###不等于
a=2
[ "$a" != "$b" ] && echo yes || echo no
b=3
[ "$a" -ge "$b" ] && echo yes || echo no ###大于等于 greater or equal
[ "$a" -gt "$b" ] && echo yes || echo no ###大于 greater than
[ "$a" -lt "$b" ] && echo yes || echo no ###小于 less than
[ "$a" -le "$b" ] && echo yes || echo no ###小于等于 less or equal
[ "$a" -ne "$b" ] && echo yes || echo no ###不等于 not equal
[ "$a" -eq "$b" ] && echo yes || echo no ###等于 equal
c=5
a=2
b=7
[ "$c" -ge "$a" -a "$c" -le "$b" ] && echo yes || echo no ###-a:并且 c大于等于a且c小于等于b
[ "$c" -ge "$a" -o "$c" -le "$b" ] && echo yes || echo no ###-o:或
[ "$c" -le "$a" -o "$c" -ge "$b" ] && echo yes || echo no
[ ! "$c" -le "$a" -o "$c" -ge "$b" ] && echo yes || echo no ###!:非
[ -z "$d" ] && echo no || echo yes ###-z:为空,输出no
[ -n "$d" ] && echo yes || echo no ###-n:非空,输出yes
[ ! -n "$d" ] && echo yes || echo no ###非空的非:不是非空,输出yes
文件中的test:
touch westos westos1
ls -i
[ "westos" -ef "westos1" ] && echo yes || echo no ####文件节点号是否一致
rm -fr westos1
ln /mnt/westos /mnt/westos1 ###复制
[ "westos" -ef "westos1" ] && echo yes || echo no
rm -fr westos1
touch westo1
[ "westos" -nt "westos1" ] && echo yes || echo no ###new time ##westos是否比westos1新
[ "westos" -ot "westos1" ] && echo yes || echo no ###old time westos是否比westos1老
[ -f "westos" ] && echo yes || echo no ###-f 普通文件
[ -d "/mnt" ] && echo yes || echo no ###-d 目录
ln -s /mnt/westos /mnt/test1
[ -L "test1" ] && echo yes || echo no ###-L软链接
[ -b "/dev/vdb" ] && echo yes || echo no ###-b块设备
[ -c "/dev/pts/0" ] && echo yes || echo no ###-c 字符设备
-S 套结字
练习:
1.ifconfig ens3 显示网卡信息时只显示ip信息,其他不显示
ifconfig ens3 | head -n2 | tail -n1 | cut -c 14-27
ifconfig ens3 | head -n2 | tail -n1 | cut -d " " -f 10
2.运行脚本test.sh,找出能登陆系统用户中最大UID的用户,并显示其名称
#!/bin/bash
cat /etc/passwd | grep -e /bin/bash -e /bin/sh | sort -t : -k 3 -nr | cut -d : -f 1 | head -n1 ###过滤以bash或sh结尾的行,第三列以数字倒序,cut第一列,查看第一行
3.脚本file_check.sh在执行时。若脚本后未指定文件,显示:请指定文件,若指定了文件,但文件不存在,则显示:文件不存在,若文件存在请检测类型并显示到输出中
vim file_check.sh
1 #!/bin/bash
2 [ -z "$*" ] && {
3 echo please input file for check
4 exit
5 }
6
7 [ ! -e "$*" ] && {
8 echo "$* is not exist"
9 exit
10 }
11
12 [ -L "$*" ] && {
13 echo "$* is a symbolic link"
14 exit
15 }
16
17 [ -f "$*" ] && {
18 echo "$* is a regular file"
19 exit
20 }
21
22 [ -d "$*" ] && {
23 echo "$* is a directory"
24 exit
25 }
26
27 [ -b "$*" ] && {
28 echo "$* is a block special"
29 exit
30 }
31
32 [ -c "$*" ] && {
33 echo "$* is a character special"
34 exit
35 }
36
37 [ -S "$*" ] && {
38 echo "$* is a socket"
39 exit
40 }