21-Shell编程
21.1 正则表达式
21.1.4 字符集和单词
“单词”指的是两侧由非单词字符分隔的字符串。非单词字符指的是字母、数字、下划线以外的任何字符。
21.1.5 字符类
POSIX正则表达式中的字符类
类 | 匹配字符 |
---|---|
[[:alnum:]] | 文字、数字字符 |
[[:alpha:]] | 字母字符 |
[[:lower:]] | 小写字符 |
[[:upper:]] | 大写字符 |
[[:digit:]] | 小数 |
[[:xdigit:]] | 十六进制数字 |
[[:punct:]] | 标点符号 |
[[:blank:]] | 制表符和空格 |
[[:space:]] | 空格 |
[[:cntrl:]] | 所有控制符 |
[[:print:]] | 所有可打印的字符 |
[[:graph:]] | 除空格外所有可打印的字符 |
21.1.6 位置匹配
21.1.7 字符转义
21.1.8 重复
用于重复模式的元字符
元字符 | 描 述 |
---|---|
* | 重复0次或更多次 |
+ | 重复1次或更多次 |
? | 重复0次或1次 |
重复n次 | |
重复n次或更多次 | |
重复不少于n次,不多于m次 |
21.1.9 子表达式
21.1.10 反义
21.1.11 分支
21.1.12 逆向引用
21.2 Shell脚本编程
21.2.3 变量和运算符
- 变量的赋值和使用
- 变量替换
- 位置变量
- BASH引号规则
- 运算符
21.2.4 表达式求值
21.2.5 脚本执行命令和控制语句
- if选择结构
if test-command-1 then commands-1 elif test-command-2 then commands-2 elif test-command-3 then commands-3 ... else commands fi
- case多选结构
case word in pattern-1) commands-1 ;; pattern-2) commands-2 ;; ... pattern-N) commands-N ;; esac
21.2.6 条件测试
- if判断的依据
- test命令和空格的使用
test
和[
命令可以对3类表达式进行测试。- 字符串比较
用于字符串比较选项
选 项 | 描 述 |
---|---|
-z str | 当字符串str长度为0时返回真 |
-n str | 当字符串str长度大于0时返回真 |
str1 = str2 | 当字符串str1和str2相等时返回真 |
str1 != str2 | 当字符串str1和str2不相等时返回真 |
- 文件测试
用于文件测试的选项
选 项 | 描 述 |
---|---|
-b file | 当file是块设备文件时返回真 |
-c file | 当file是字符文件时返回真 |
-d pathname | 当pathname是一个目录时返回真 |
-e pathname | 当pathname指定的文件或目录存在时返回真 |
-f file | 当file是常规文件(不包括符号链接、管道、目录等)的时候返回真 |
-g pathname | 当pathname指定的文件或目录设置了SGID位时返回真 |
-h file | 当file是符号链接文件时返回真 |
-p file | 当file是命名管道时返回真 |
-r pathname | 当pathname指定的文件或目录设置了可读权限时返回真 |
-s file | 当file存在且大小为0时返回真 |
-u pathname | 当pathname指定的文件或目录设置了SUID位时返回真 |
-w pathname | 当pathname指定的文件或目录设置了可写权限时返回真 |
-x pathname | 当pathname指定的文件或目录设置了可执行权限时返回真 |
-o pathname | 当pathname指定的文件或目录被当前进程的用户拥有时返回真 |
- 数字比较
用于数字比较的选项
选 项 | 对应的英语单词 | 描 述 |
---|---|---|
-eq | equal | 如果相等,返回真 |
-ne | not equal | 如果不相等,返回真 |
-lt | lower than | 如果int1小于int2,返回真 |
-le | lower or equal | 如果int1小于或等于int2,返回真 |
-gt | greater than | 如果int1大于int2,返回真 |
-ge | greater or equal | 如果int1大于或等于int2,返回真 |
- 复合表达式
复合表达式操作符
操作符 | 描 述 |
---|---|
!expr | “非”运算,当expr为假时返回真 |
expr1 -a expr2 | “与”运算,当expr1和expr2同时为真时才返回真 |
expr1 -o expr2 | “或”运算,expr1或expr2为真时返回真 |
21.2.7 循环结构
- while语句
while test-commands do commands done
- until语句
until test-commands do commands done
- for语句
for variable [in list] do commands done
21.2.8 读取用户输入
21.2.9 脚本执行命令
21.2.10 创建命令表
命令表的表示形式
表示形式 | 说 明 |
---|---|
a&&b | “与”命令表。当且仅当a执行成功,才执行b |
a||b | “或”命令表。当且仅当a执行失败,才执行b |
a;b | 顺序命令表,先执行a,再执行b |
21.2.11 其他有用的Shell编程工具
其他常用的Shell命令
命 令 | 描 述 |
---|---|
cut | 以指定的方式分割行,并输出特定的部分 |
diff | 找出两个文件的不同点 |
sort | 对输入的行进行排序 |
uniq | 删除已经排好序的输入中的重复行 |
tr | 转换或删除字符 |
wc | 统计字符、单词和行的数量 |
substr | 提取字符串中的一部分 |
seq | 生成整数数列 |