目录
1、循环语句
1、for
2、while
3、until
2、正则表达式
1、元字符
2、表示次数
3、位置锚定
4、分组
5、扩展正则表达式
1、循环语句
循环含义
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
-
循环次数事先已知
-
循环次数事先未知
1、for
for 为已知循环数
for tlj(变量) 循环次数(取值列表)
do 需要循环的事件
done
或者
for (( 表达式1; 表达式2; 表达式3 )); do 命令; done
表达式1:定义变量并赋初值
表达式2:决定是否循环
表达式3:决定循环变量如何改变,决定循环什么时候退出
2、while
相对于for,需要知道循环次数
我们只知道停止条件,不知道次数,就需要使用while
直到达到条件
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
let sum+=$i
let i++
done
echo $sum
1到100相加
3、until
基本和while相同 但是 until 是当命令判断为真时停止
#!/bin/bash
i=0
sum=0
until [ $i -gt 100 ]
do
let sum+=$i
let i++
done
echo $sum
1到100相加
2、正则表达式
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。
正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等
主要用来匹配字符串(命令结果,文本内容),
通配符匹配文件(而且是已存在的文件)
-
基本正则表达式
-
扩展正则表达式
1、元字符
. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的任意单个字符,示例:[zhou] [0-9] [] [a-zA-Z] [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z][:alnum:] 字母和数字
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白
2、表示次数
* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符,不包括0次
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\} #匹配前面的字符至多n次,<=n
\{n,\} #匹配前面的字符至少n次
3、位置锚定
^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行 只有root)
^$ #空行
^[[:space:]]*$ # 空白行\< 或 \b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\> 或 \b #词尾锚定,用于单词模式的右侧
\<PATTERN\> #匹配整个单词
4、分组
分组:() 将多个字符捆绑在一起,当作一个整体处理
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名
5、扩展正则表达式
grep -E 或者 egrep
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n} #匹配前面的字符至多n次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0