第10章shell基础知识
shell是系统跟计算机系统硬件交互时使用的中间介质,是系统的一个工具。
10.1shell
10.1.1记录历史的命令
!!:连续两个!表示执行上一条指令
!n:n代表数字,表示执行历史命令中的第n个指令
!字符串:执行命令历史中最近一次以pw开头的命令。
10.1.2tab
自动补全命令和文件名
10.1.3 alias
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7YbkWDJm-1646658749083)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211113111151657.png)]
unalias 取消别名
10.1.4 通配符
*来匹配零个或者多个字符,用?匹配一个字符
10.1.5输入/输出重定向
输入重定向<;输出重定向>;
错误重定向2>以及追加重定向>>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWokfQfD-1646658749084)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211113111551563.png)]
10.1.6 | 管道符
| 将前一个指令的输出作为后一个指令的输入
并不是所有命令都可以,一般针对文档操作的命令比较常用,如 cat、less、head、tail、grep、wc、sort、uniq、tr、split、sed、awk。
10.1.7 作业控制
Ctrl + Z 暂停
fg 恢复
bg (background的简写)
Ctrl + C 结束
kill 【pid】 :结束进程
10.2变量
echo 变量名 ;显示变量名
10.2.1env
直接输入,用来查看系统预设的全部系统变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FCAJQ9XC-1646658749084)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211113112333031.png)]
10.2.2 set
set和env命令类似,直接输入,用来输出环境变量
10.3 shell特殊符号
10.3.1 * 代表零个或者多个任意字符
*代表零个或者多个任意字符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Za4ZF8Jb-1646658749084)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115162045088.png)]
10.3.2 ?代表一个任意字符
?代表一个任意字符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MtTu20oT-1646658749085)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115162121256.png)]
10.3.3 # 注释符号
井号 后面内容会被忽略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VE5DZu6C-1646658749085)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115162253994.png)]
10.3.4 \脱义字符
将后面的的特殊符号 (如*)还原为普通字符
10.3.5 cut
用来截取某一个字段
格式: cut -d’分隔符’【cf】n n为数字
-d:后面跟分隔字符,分隔字符要用单引号括起来
-c:后面接的是第几个字符
-f:后面接第几个区块。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yV7Eu7oy-1646658749085)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115163209605.png)]
10.3.6sort
用于排序
格式: sort 【-t 分隔符】【-kn,n2】【-nru】n1 n2为数字
-t:后面跟分隔字符,与cut的-d相似
-n:表示使用纯数字排序
-r:表示反向排序
-u:表示去重复
-kn1,n2:表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序。
不加任何选项,则从首字符向后一次按ASCII进行比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oyGSzhEt-1646658749085)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115163730860.png)]
10.3.7wc
用于统计文档的行数、字符数或词数
格式: wc 【-l-m-w】文档名
-l:统计行数 -m:统计字符;-w:统计词数
10.3.9 uniq
用来删除重复的行 只有-c比较常用,表示统计重复的行
格式: uniq -c 文档名
使用uniq前,必须进行排序,否则不管用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-om5WgY2n-1646658749086)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115164325377.png)]
10.3.10 tee
类似于重定向>,可以把文件写入后面所跟的文件,还显示在屏幕上。常用于管道符之后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fThh0kgS-1646658749086)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115164443940.png)]
10.3.11 tr
用于替换字符
-d:删除某个字符,后面跟删除的字符
-s:删除重复的字符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4UJOzWYV-1646658749086)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115164614934.png)]
10.3.12 split
用于切割文档,不知道文档名,则会以xaa、xab这样的文件名来命名
格式: spilt 【-l-b】 文档名
-b:依据大小来分割文档,单位为字节
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fsLWipp-1646658749086)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115164756877.png)]
-l:依据行数来分割文档
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ilBSSvPk-1646658749087)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115164843035.png)]
10.3.13 $
表示用作变量前面的标识符,可以结合!起来使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bi8HH4wq-1646658749087)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115165022781.png)]
!$ 表示上调命令的最后一个变量
10.3.14 ;
分隔符,用于分割命令,不用换行
10.3.15 ~
表示用户家目录,root用户目录是/root,普通用户则是/home/username
10.3.16&
表示吧该条命令放入后台执行,则在本条命令后面加速&
10.3.17 > 、>> 和2> 、2>>
'>'和>>,表示取代和追加的意思,当我们运行一个错误命令是,报错信息会输出在当前屏幕。
2> 、2>>表示错误重定向和错误追加重定向
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2Neo9OI-1646658749087)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115165533189.png)]
10.3.18 []
中括号内为字符组合,代表字符组合中的任何一个,可以是一个范围(1-3,a-z)
10.3.19&&和||
逻辑运算符,且和或
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j77CJF56-1646658749087)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115165726337.png)]
第11章 正则表达式
11.1grep/egrep
用于查找文档里规定的字符串
格式: grep 【-cinvABC】‘word’ filename
-c :表示打印符合要求的行数
-i:忽略大小写
-n:输出符号要求的行及行号
-v:打印不符合要求的行
-A:后跟一个数字(有无空格都可以),A-2 表示打印符合要求的行及下面两行
-B:后跟一个数字(有无空格都可以),B-2 表示打印符合要求的行及上面两行
-C:后跟一个数字(有无空格都可以),C-2 表示打印符合要求的行及上面和下面两行
eg:
- 过滤关键行,输出行号:grep -n ‘root’ filename
- 过滤不带由某些关键字的行,并输出行号:grep -nv ‘word’ filename
- 过滤所有包含数字的行,grep ‘【0-9】’ filename
- 过滤所有不包含数字的行,grep -v ‘【0-9】’ filename
- 过滤所有空行和以#开头的行,grep -v ‘^#’ filename**^表示行的开始,KaTeX parse error: Expected group after '^' at position 13: 表示行的结尾,空行可以用^̲表示**
- 过滤出任意一个字符和重复字符,grep ‘r.o’ filename
- 指定要过滤出的字符出现次数,grep ‘o‘’\‘{2}’ filename
- {},其内部为数字,表示前面的字符要重复的次数,{}作业都需要加速转义字符\,表示一个范围,具体格式为{n1,n2}
- 过滤出一个或者多个指定的字符,egrep ‘o+’ filename +表示匹配七个或多个+前面的字符,+不支持被grep使用,包括上面的{},egrep可以直接使用,且不用转义字符
- 过滤零个或一个指定的字符 egrep ‘o?’ filename
- 过滤字符串1或者字符串2 egrep ‘aaa|111|ooo’ filename
- egrep中的应用 egrep ‘r(oo|at)o’ filename 把rooo或者rato的行过滤出来
11.2sed
用于查找或则替换字符
格式: sed -n ’n‘p filename 单引号中的n为一个数字,表示第几行 。-n表示只显示我们要打印的行
-
打印某行 sed -n '1$'p filename
-
打印包含字符串的行 sed -n '/root/'p filename 删除包含root的行
-
删除某些行 sed '1’d filename d表示删除的命令
-
替换字符或者字符串 sed ‘1,2s/ot/to/g’ 文件名 s表示替换的动作,g表示本行全局替换,与vim类似,除了可以使用/,还可以使用#和@
-
调换两个字符串位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YiZo89Uc-1646658801862)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115183429500.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IejVejwX-1646658801863)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115184035078.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EbPf27bO-1646658801863)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115184420701.png)]
-
直接修改文件的内容 sed -i ‘s/ot/to/g’ filename
11.3awk
流式编辑器,针对文档中的行来操作,一行一行的执行,awk具有sed所有功能
-
截取文档中的某一段 head -n2 filename1 | awk -F ‘:’ {print $1} $1为第一个字段 $2为第二个字段 -F后面紧跟单引号,单引号后面为分隔符,print动作要用{}括起来
-
匹配字符或者字符串 awk ’ /oo/’ filename 与sed用法类似
-
条件操作符 awk -F ‘:’ ‘$3==“0”’ 还有>、<等
-
awk 内置变量 常用变量有 OFS、 NF和NR OFS和-F有类似的功能,用来定义分隔符,NF表示分隔符后一共有多少段,NR表示行号
OFS用法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9gPoloPc-1646658801863)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115185735104.png)]
-
awk中的数学运算
awk可以更改段值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkSV5H2X-1646658801864)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115185811496.png)]
第12章shell脚本
12.1什么是shell脚本
12.1.1shell的创建和执行
shell脚本基本以.sh为后缀的文件
创建:第一行为 #! /bin/bash 开头,表示使用bash语法。
执行: sh 脚本名
12.1.2 date
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tt4XmV3j-1646658801864)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115190540714.png)]
eg: date ’%y-%m-%d %H:%M:%S‘
12.2 shell 脚本中的变量
变量定义格式: 变量名=变量值
引用变量之前要加$
12.2.1数学运算
数学运算要用【】括起来,并且前面要加$
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDUDdLgY-1646658801864)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115191210323.png)]
12.2.2 和用户交互
read 用于与客户交互,他把输入的字符串作为变量值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mjLTA4WH-1646658801864)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115191313050.png)]
12.2.3 shell脚本预设变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-anC3FFHw-1646658801864)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115191909180.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DeoBzC8n-1646658801865)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115191916528.png)]
$1 $2的值就是在分别执行时的1和2,$1为第一个参数, $2为第二个参数,shell预设变量的参数时没有限制的
12.3 shell中的逻辑判断
12.3.1不带else
格式: if 判断语句;then
command
fi
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RzQDQLYp-1646658801865)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115192222180.png)]
12.3.2带else
格式: if 判断语句;then
command
else
command
fi
12.3.3带有elif
格式: if 判断语句;then
command
elif 判断语句
command
else
command
fi
12.3.4和文档相关的判断
shell中的if经常还用于判断文档的属性
-e:判断文档是否存在
-d:判断是不是以目录形式存在
-f:判断是不是普通文件以及是否存在
-r:判断是否有读权限
-w:判断是否有写权限
-x:判断是否可执行
格式: if 【-e filename】;then
command
fi
12.3.5 case
格式: case 变量 in
value1)
command
;;
value2)
command
;;
value3)
command
;;
esac
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DigPtOKd-1646658801865)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115192937953.png)]
12.4shell 脚本中的循环
12.4.1 for 循环
格式: for 变量 in 循环条件;do
command
done
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oooH2ZNy-1646658801865)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115193126863.png)]
12.4.2while循环
格式: while 条件;do
command
done
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LXzgAmTI-1646658801865)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115193219419.png)]
12.5shell中的函数
格式:
function 函数名()
{
command1
command2
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97nJAIPz-1646658801866)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115193326016.png)]
12.6shell脚本中的中断和继续
12.6.1 break
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UPDOiEHZ-1646658801866)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115193855911.png)]
用于退出 for和while循环
12.6.2 continue
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02g9jwdX-1646658801866)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115193931115.png)]
用于退出本次循环
12.6.3 exit
用于退出整个shell