Linux系列——深入学习Shell

本文介绍了shell脚本的基础知识,包括命令记录、自动补全、alias与通配符的使用、输入输出重定向、管道运算、作业控制、变量管理、特殊符号、正则表达式(grep、sed、awk)、以及shell脚本、逻辑判断和循环。
摘要由CSDN通过智能技术生成

第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:

  1. 过滤关键行,输出行号:grep -n ‘root’ filename
  2. 过滤不带由某些关键字的行,并输出行号:grep -nv ‘word’ filename
  3. 过滤所有包含数字的行,grep ‘【0-9】’ filename
  4. 过滤所有不包含数字的行,grep -v ‘【0-9】’ filename
  5. 过滤所有空行和以#开头的行,grep -v ‘^#’ filename**^表示行的开始,KaTeX parse error: Expected group after '^' at position 13: 表示行的结尾,空行可以用^̲表示**
  6. 过滤出任意一个字符和重复字符,grep ‘r.o’ filename
  7. 指定要过滤出的字符出现次数,grep ‘o‘’\‘{2}’ filename
  8. {},其内部为数字,表示前面的字符要重复的次数,{}作业都需要加速转义字符\,表示一个范围,具体格式为{n1,n2}
  9. 过滤出一个或者多个指定的字符,egrep ‘o+’ filename +表示匹配七个或多个+前面的字符,+不支持被grep使用,包括上面的{},egrep可以直接使用,且不用转义字符
  10. 过滤零个或一个指定的字符 egrep ‘o?’ filename
  11. 过滤字符串1或者字符串2 egrep ‘aaa|111|ooo’ filename
  12. egrep中的应用 egrep ‘r(oo|at)o’ filename 把rooo或者rato的行过滤出来

11.2sed

用于查找或则替换字符

格式: sed -n ’n‘p filename 单引号中的n为一个数字,表示第几行 。-n表示只显示我们要打印的行

  1. 打印某行 sed -n '1$'p filename

  2. 打印包含字符串的行 sed -n '/root/'p filename 删除包含root的行

  3. 删除某些行 sed '1’d filename d表示删除的命令

  4. 替换字符或者字符串 sed ‘1,2s/ot/to/g’ 文件名 s表示替换的动作,g表示本行全局替换,与vim类似,除了可以使用/,还可以使用#和@

  5. 调换两个字符串位置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

  6. 直接修改文件的内容 sed -i ‘s/ot/to/g’ filename

11.3awk

流式编辑器,针对文档中的行来操作,一行一行的执行,awk具有sed所有功能

  1. 截取文档中的某一段 head -n2 filename1 | awk -F ‘:’ {print $1} $1为第一个字段 $2为第二个字段 -F后面紧跟单引号,单引号后面为分隔符,print动作要用{}括起来

  2. 匹配字符或者字符串 awk ’ /oo/’ filename 与sed用法类似

  3. 条件操作符 awk -F ‘:’ ‘$3==“0”’ 还有>、<等

  4. awk 内置变量 常用变量有 OFS、 NF和NR OFS和-F有类似的功能,用来定义分隔符,NF表示分隔符后一共有多少段,NR表示行号

    OFS用法:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9gPoloPc-1646658801863)(C:\Users\崔常菲\AppData\Roaming\Typora\typora-user-images\image-20211115185735104.png)]

  5. 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值