目录
1 条件语句
1.1 测试
test 测试文件的表达式 是否成立
操作符:
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-a | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-W | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-L | 测试是否为软连接文件 |
属性测试补充:
-s | FILE #是否存在且非空 |
-t | fd #fd 文件描述符是否在某终端已经打开 |
-N | FILE #文件自从上一次被读取之后是否被修改过 |
-O | FILE #当前有效用户是否为文件属主 |
-G | FILE #当前有效用户是否为文件属组 |
条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成
测试过程,实现评估布尔声明,以便用在条件性环境下进行执行
若真,则状态码变量 $? 返回0
若假,则状态码变量 $? 返回非0
条件测试命令
1.2 比较整数数值
[ 整数1 操作符 整数2 ] 公式
-
-eq:第一个数等于(Equal)第二个数
-
-ne:第一个数不等于(Not Equal)第二个数
-
-gt:第一个数大于(Greater Than)第二个数
-
-lt:第一个数小于(Lesser Than)第二个数
-
-le:第一个数小于或等于(Lesser or Equal)第二个数
-
-ge:第一个数大于或等于(Greater or Equal)第二个数
1.3 if语句的结构
多分支
if 判断条件1
then
条件1为真的分支代码elif 判断条件2
then
条件2为真的分支代码elif 判断条件3;then
条件3为真的分支代码...
else
以上条件都为假的分支代码fi
单分支
双分支
多分支
1.4 case
格式
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;yes no
case支持glob风格的通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
| 或者,如: a|b
1.5 echo
echo命令
- echo -n 表示不换行输出
- echo -e 表示输出转义符
常用的转义符
选项 | 作用 |
---|---|
\r | 光标移至行首,并且不换行 |
\s | 当前shell的名称,如bash |
\t | 插入Tab键,制表符 |
\n | 输出换行 |
\f | 换行,但光标仍停留在原处 |
\ | 表示插入"\"本身转义 |
\b | 表示退格 不显示前一个字符 |
\c | 抑制更多的输出或不换行 |
echo -e "n\n\n\n\n\nw" | fdisk /dev/sdb #自动硬盘分区
2 正则表达式 过滤文本
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。
正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等
2.1 作用
主要用来匹配字符串(命令结果,文本内容),
通配符匹配文件(而且是已存在的文件)
-
基本正则表达式
-
扩展正则表达式
可用 man 7 regex man手册帮助
2.2 元字符(字符匹配)
元字符
. 匹配任意单个字符,可以是一个汉字
[ ] 匹配指定范围内的任意单个字符,示例:[zhou] [0-9] [] [a-zA-Z] [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]
字符 | 作用 | 示例 |
. | 匹配指定范围内的任意单个字符 | |
[ ] | 匹配指定范围内的任意单个字符 | [zhou] [0-9] [] [a-zA-Z] [:alpha:] |
[^] | 匹配指定范围外的任意单个字符 | [^zhou] [^a.z] [a.z] |
[:alnum:] | 字母和数字 |
[:alpha:] | 代表任何英文大小写字符,亦即 A-Z, a-z |
[:lower:] | 小写字母,示例:[[:lower:]],相当于[a-z] |
[:upper:] | 大写字母 |
[:blank:] | 空白字符(空格和制表符) |
[:space:] | 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围 |
[:cntrl:] | 不可打印的控制字符(退格、删除、警铃...) |
[:digit:] | 十进制数字 |
[:graph:] | 可打印的非空白字符 |
[:print:] | 可打印字符 |
[:punct:] | 标点符号 |
[:xdigit:] | 十六进制数字 |
元字符点(.)#此处的点代表字符
#r..t ..代表任意两个字符
#点值表示点需要转义
2.3 表示次数
- * #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
- .* #任意长度的任意字符,不包括0次
- \? #匹配其前面的字符出现0次或1次,即:可有可无
- \+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
- \{n\} #匹配前面的字符n次
- \{m,n\} #匹配前面的字符至少m次,至多n次
- \{,n\} #匹配前面的字符至多n次,<=n
- \{n,\} #匹配前面的字符至少n次
2.4 位置锚定
^ | 行首锚定, 用于模式的最左侧 |
$ | 行尾锚定,用于模式的最右侧 |
^PATTERN$ | 用于模式匹配整行 (单独一行 只有root) |
^$ | 空行 |
2.5 扩展正则表达式(表示字符相差不大)
表示次数
* | 匹配前面字符任意次 |
? | 0或1次 |
+ | 1次或多次 |
{n} | 匹配n次 |
{m,n} | 至少m,至多n次 |
{,n} | 匹配前面的字符至多n次,<=n,n可以为0 |
{n,} | 匹配前面的字符至少n次,<=n,n可以为0 |
#表示邮箱
#表示手机号