shell脚本基础(二:条件语句、正则表达式)

目录

1 条件语句

1.1 测试

1.2 比较整数数值

1.3 if语句的结构

1.4 case

 1.5 echo

 2 正则表达式 过滤文本

2.1 作用

2.2 元字符(字符匹配)

2.3 表示次数

 2.4 位置锚定

 2.5 扩展正则表达式(表示字符相差不大)


1 条件语句

1.1 测试

test 测试文件的表达式 是否成立

操作符:

-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-a测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-W测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为软连接文件

属性测试补充

-sFILE #是否存在且非空
-tfd #fd 文件描述符是否在某终端已经打开
-NFILE #文件自从上一次被读取之后是否被修改过
-OFILE #当前有效用户是否为文件属主
-GFILE #当前有效用户是否为文件属组

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成

测试过程,实现评估布尔声明,以便用在条件性环境下进行执行

若真,则状态码变量 $? 返回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

#表示邮箱

 #表示手机号

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尔尔辞暮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值