Shell脚本中的条件语句(if、case、echo),正则表达式,grep

91 阅读3分钟

条件语句

一、if语句

1. if语句的结构

  if     判段条件
  then   条件为真的分支代码
  elif   判断条件2
  else   条件为假的分支代码
  fi     结尾

2.单分支结构

3f878b93d71dbd93b204c3bfbcbc0c2.jpg

单分支语句格式

 if  判断条件

 then  条件成立的分支代码

 fi                         
 
 注意:条件不成立直接结束

示例

image.png

image.png

3.双分支结构

99aa152c469cd206e9340172f2f5e09.jpg

双分支语句格式

 if 判断条件
 
 then
     条件成立的分支代码
 else
     条件不成立的分支代码
 fi

示例

image.png

4.多分支结构

37d79a13c322852f5d9217dca5d327d.jpg

多分支语句格式:

 if 判断条件1
 then
     条件1为真的分支代码

 elif 判断条件2
 then
     条件2为真的分支代码

 elif 判断条件3
 then
     条件3为真的分支代码

 ...
 else
     以上条件都为假的分支代码

 fi

示例

image.png

image.png

二、case语句

case语句格式

 case 变量引用 in
 模式1)
     命令分支1
     ;;
 模式2)
     命令分支2
     ;;
 ...
 *)
     默认命令分支
 esac

注意:case支持glob风格的通配符

  • :任意长度任意字符

? :任意单个字符

[0-9] :指定范围内的任意单个字符

| :“或者”的意思,如: a|b

示例

image.png

image.png

三、echo

echo命令

echo -n :表示不换行输出

echo -e :表示输出转义符

常用的转义符:

选项作用
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键,制表符
\n输出换行
\f换行,但光标仍停留在原处
\表示插入""本身转义
\b表示退格 不显示前一个字符
\c抑制更多的输出或不换行

四、正则表达式过滤文本

1.元字符

元字符(字符匹配): . :匹配任意单个字符,可以是一个汉字。

[ ] :匹配指定范围内的任意单个字符,例如[zhou]: zhou中其中一个字符,[0-9] :数字0-9之间任意一个字符。

[^ ] :匹配指定范围外的任意单个字符,例如[^zhou]:除了zhou这几个字符以外的单个别的字符,[^a.z]:除了a和z之间还有一个字符不匹配外,匹配其他字符。

常用的正则表达式

[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广

\w #匹配单词构成部分,等价于[_[:alnum:]]
\W #匹配非单词构成部分,等价于[^_[:alnum:]]
\S     #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意
Unicode 正则表达式会匹配全角空格符

五、grep

grep命令格式: grep [选项]... 查找条件 目标文件

选项

-i:查找时忽略大小写

-v:反向查找,输出与查找条件不相符的行
 grep -Ev '^[[:space:]]*#|^$' /etc/fstab

-o 只显示匹配项

-f 对比两个文件的相同行

-c 匹配的行数
 [root@localhost ky15]# grep -c root passwd 2
 
 -color=auto #对匹配到的文本着色显示

-m  # 匹配#次后停止
 grep -m 1 root /etc/passwd   #多个匹配只取第一个

-n 显示匹配的行号

-q 静默模式,不输出任何信息

-A # after, 后#行 
grep -A3 root /etc/passwd   #匹配到的行后3行业显示出来

-B # before, 前#行

-C # context, 前后各#行

-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
grep -e root -e bash /etc/passwd #包含root或者包含bash 的行

-w 匹配整个单词

-E 使用ERE,相当于egrep

-F 不支持正则表达式,相当于fgrep

-f   file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件

-r   递归目录,但不处理软链接

-R   递归目录,但处理软链接