shell:
1.shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用shell来启动,挂起,停止甚至是编写一些程序.
2.shell还是一个功能强大的编程语言,易编写,易调试,灵活性强。Shell是解释执行的脚本语言,在shell中可以直接调用Linux系统命令.
结构:
1.#!执行指定脚本的shell
2.#注释行
3.命令和控制结构
变量类型:
临时变量:是shell程序内部定义的,其使用范围仅限于定义它的程序,对其他程序不可见。包括:用户自定义变量,位置变量。
永久变量:是环境变量,其值不随shell脚本的执行结束而消失
变量定义规则:
用户定义的变量由字母或下划线开头,由字母/数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。
在使用变量时,要在变量名前加上前缀$.
| 
 set 
 | 
 列出所有的变量 
 | 
| 
 unset 
 | 
 删除一个变量 
 | 
| 
 双引号 
 | 
 若双引号间内容有引用定义的变量则会解析输出该变量 
 | 
| 
 单引号 
 | 
 单引号之间的内容原封不动地指定给了变量 
 | 
| 
 read 
 | 
 从键盘读入数据赋值给变量 
-p 提示信息:在等待输入时,输出提示信息 
-t   秒数:指定read等待时间 
-n  字符数:read命令只接受指定的字符数,就会执行 
-s :隐藏输入的数据,适用于机密信息的输入 
 | 
| 
 expr 
 | 
 对整数型变量进行算术运算 
 | 
| 
 export 
 | 
 申明环境变量 变量名=变量值 
 | 
| 
 env 
 | 
 查询系统中的环境变量 
 | 
| 
 $? 
 | 
 最后一次执行的命令的返回状态。如果这个变量值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确. 
 | 
| 
 $$ 
 | 
 当前进程的进程号 
 | 
| 
 $! 
 | 
 后台运行的最后一个进程的进程号 
 | 
| 
 declare 
 | 
 declare  [选项]  变量名 -:给变量设定类型属性                +:取消变量的类型属性 -i:将变量声明为整数型 -x:将变量声明为环境变量 -p:显示指定变量的被声明的类型 
 | 
Bash常用快捷键:
| 
 Ctrl + a 
 | 
 把光标移动到命令行开头 
 | 
| 
 Ctrl + e 
 | 
 把光标移动到命令行尾部 
 | 
| 
 Ctrl + c 
 | 
 强制终止当前的命令 
 | 
| 
 Ctrl + l 
 | 
 清屏,相当于clear命令 
 | 
| 
 Ctrl + u 
 | 
 删除或剪切光标之前的内容 
 | 
| 
 Ctrl + k 
 | 
 删除或剪切光标之后的内容 
 | 
| 
 Ctrl + y 
 | 
 粘贴Ctrl + u 或Ctrl + k剪切的内容 
 | 
| 
 Ctrl + r 
 | 
 在历史命令中搜索 
 | 
| 
 Ctrl + d 
 | 
 退出当前终端 
 | 
| 
 Ctrl + z 
 | 
 暂停并放入后台 
 | 
| 
 Ctrl + s 
 | 
 暂停屏幕输出 
 | 
| 
 Ctrl  + q 
 | 
 恢复屏幕输出 
 | 
输出重定向:
| 
 类型 
 | 
 符号 
 | 
 作用 
 | 
| 
 标准输出重定向 
 | 
 命令 >文件 
 | 
 以覆盖的方式把命令的正确输出输出到指定的文件或设备当中 
 | 
| 
 | 
 命令 >> 文件 
 | 
 以追加的方式,把命令的正确输出输出到指定的文件或设备当中 
 | 
| 
 标准错误输出重定向 
 | 
 错误命令  2> 文件 
 | 
 以覆盖的方式把错误输出输出到指定的文件或设备当中 
 | 
| 
 | 
 错误命令 2>> 文件 
 | 
 以追加的方式把错误输出输出到指定的文件或设备当中 
 | 
| 
 | 
 | 
 | 
| 
 正确输出和错误输出同时保存 
 | 
 命令 &>文件 
 | 
 以覆盖的方式把正确输出和错误输出都保存到同一个文件当中 
 | 
| 
 | 
 命令 &>>文件 
 | 
 以追加的方式把正确输出和错误输出都保存到同一个文件当中 
 | 
| 
 | 
 命令 >>文件1  2>>文件2 
 | 
 把正确的输出追加到文件1,把错误的输出追加到文件2 
 | 
正则表达式:
| 
 元字符 
 | 
 作用 
 | 
| 
 * 
 | 
 匹配*之前的0个或多个字符 例如: r*ed 会匹配 ed,rred,rrred,red等 
 | 
| 
 ? 
 | 
 匹配位于?之前的0个或一个字符  例如:r?ed 会匹配ed,red 
 | 
| 
 + 
 | 
 匹配位于+之前的一个或多个字符 例如:r+ed会匹配rred,rrred 
 | 
| 
 | 
 | 
 匹配位于|之前或者之后的字符 例如:red|blue 会匹配red,blue 
 | 
| 
 . 
 | 
 匹配除了换行符外任意一个字符 
 | 
| 
 ^ 
 | 
 匹配行首. 例如:^hello 会匹配以hello开头的行 
 | 
| 
 $ 
 | 
 匹配行尾. 例如:hello$会匹配以hello结尾的行 
 | 
| 
 [] 
 | 
 匹配中括号中指定的任意一个字符,只匹配一个字符。例如:[abcdef]匹配任意一个字母,[0-9]匹配任意一个数字,[a-z][0-9]匹配小写和一位数字构成的两位字符 
 | 
| 
 [^] 
 | 
 匹配除中括号的字符外的任意一个字符. 例如:[^0-9]匹配任意一个非数字字符,[^a-z]表示任意一伪非小写字母 
 | 
| 
 \ 
 | 
 匹配位于\之后的转义字符 
 | 
| 
 \{n\} 
 | 
 表示其前面的字符恰好出现n次.例如:[0-9]\{4\}匹配4位数字,[1][3-8][0-9]\{9\}匹配手机号码 
 | 
| 
 \{n,\} 
 | 
 表示其前面的字符出现不小于n次.例如:[0-9]\{2,\}表示两位以以上的数字 
 | 
| 
 \{n,m\} 
 | 
 表示其前面的字符至少出现n次,最多出现m次.例如:[a-z]\{6,8\}匹配6到8位的小写字母 
 | 
字符处理命令:
| 
 cut 
 | 
 用来显示行中的指定部分,删除文件中指定字段 -f 显示指定字段的内容 -d 指定字段的分隔符,默认的字段分隔为TAB 
 | 
| 
 printf 
 | 
 格式化输出. printf   输出格式  输出内容 %ns:输出字符串,n是数字指定输出几个字符 %ni:输出整数,n是数字指定输出几个数字 %m,nf:输出浮点数,m和n是数字,指定输出的整数位数和小数位数。如%8.2f代表输出8位数,其中2位是小数,6位是整数. 
 | 
| 
 sed 
 | 
 是一种轻量级流编辑器。sed主要是用来将数据进行选取,替换,删除,新增的命令 sed [选项] '[动作]'  文件名 -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕 -e:允许对输入数据应用多条sed命令编辑 -i:把sed修改的结果直接保存到文件,而不是由屏幕输出. 动作: a \:追加,在当前行后添加一行或多行。添加多行时,除最后一行外每行末尾需要用“\”代表数据未完结。 c \:行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。 i \:插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“\” 戴博阿数据未完结 d:删除指定的行 p:打印输出指定的行 s:字符替换,用一个字符串替换另外一个字符串。格式为:“行范围s/旧字符/新字符/g”和vim中的字符替换类似 
 | 
| 
 sort 
 | 
 排序命令  sort [选项]  文件名 -f:忽略大小写 -n:以数值型进行排序,默认使用字符串排序 -r:反向排序 -t:指定分隔符,默认是分隔符是制表符 -k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾) 
 | 
条件判断
| 
 判断文件类型 
 | 
 作用 
 | 
| 
 -d 文件 
 | 
 判断该文件是否存在,并且是否为目录 
 | 
| 
 -e 文件 
 | 
 判断文件是否存在 
 | 
| 
 -f 文件 
 | 
 判断该文件是否存在,并且是否为普通文件 
 | 
| 
 -L 文件 
 | 
 判断该文件是否存在,并且是否为符号连接文件 
 | 
例如: test -e file 或者 [ -e file ]
| 
 判断文件权限 
 | 
 作用 
 | 
| 
 -r 文件 
 | 
 判断该文件是否存在,并且该文件是否具有读权限 
 | 
| 
 -w  文件 
 | 
 判断该文件是否存在,并且该文件是否具有写权限 
 | 
| 
 -x 文件 
 | 
 判断该文件是否存在,并且该文件是否具有执行权限 
 | 
例如:test -r file 或者 [ -r file ]
| 
 文件之间比较 
 | 
 作用 
 | 
| 
 文件1 -nt 文件2 
 | 
 判断文件1的修改时间是否比文件2的新 
 | 
| 
 文件1 -ot 文件2 
 | 
 判断文件1的修改时间是否比文件2的旧 
 | 
| 
 文件1 -ef 文件2 
 | 
 判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法 
 | 
例如: test file1 -nt file2 或者 [ file1 -nt file2 ]
| 
 整数之间比较 
 | 
 作用 
 | 
| 
 num1 -eq num2 
 | 
 相等 
 | 
| 
 num1 -ne num2 
 | 
 不相等 
 | 
| 
 num1 -gt num2 
 | 
 大于 
 | 
| 
 num1 -lt num2 
 | 
 小于 
 | 
| 
 num1 -ge num2 
 | 
 大于等于 
 | 
| 
 num1 -le num2 
 | 
 小于等于 
 | 
例如: test 1 -eq 2 或者 [ 1 -eq 2 ]
| 
 字符串之间比较 
 | 
 作用 
 | 
| 
 -z 字符串 
 | 
 判断字符串是否为空,为空返回真 
 | 
| 
 -n 字符串 
 | 
 判断字符串是否为非空,非空返回真 
 | 
| 
 str1 == str2 
 | 
 判断str1 是否和str2相等 
 | 
| 
 str1 != str2 
 | 
 判断字符串是否不相等 
 | 
例如: test a == 'a' 或者[ 'a' == 'a' ]
| 
 多重条件判断 
 | 
 作用 
 | 
| 
 条件1 -a 条件2 
 | 
 相当于逻辑与 
 | 
| 
 判断1 -o 条件2 
 | 
 相当于逻辑或 
 | 
| 
 !判断 
 | 
 逻辑非 
 | 
流程控制
| 
 单分支If条件语句 
 | 
 双分支if条件语句 
 | 
 多分支if条件语句 
 | 
![]()  | 
![]()  | 
![]()  | 
| 
 case条件语句 
 | 
 | 
 | 
![]()  | 
 | 
 | 
| 
 循环语句 
 | 
 | 
 | 
| 
 
 
  | 
![]()  | 
![]()  | 
_20240722100606A106.png)

_20240722100652A108.png)
_20240722100705A109.png)
_20240722100723A110.png)
_20240722100741A111.png)
_20240722100801A112.png)
_20240722100811A113.png)