以下参考卡提供了某些脚本概念的有用概要。 前文更深入地探讨了这些问题,并给出了用法示例。
表 B-1. 特殊 Shell 变量
| 变量 | 含义 |
|---|---|
| $0 | 脚本文件名 |
| $1 | 位置参数 #1 |
| $2 - $9 | 位置参数 #2 - #9 |
| ${10} | 位置参数 #10 |
| $# | 位置参数的数量 |
| "$*" | 所有位置参数(作为一个单词)* |
| "$@" | 所有位置参数(作为单独的字符串) |
| ${#*} | 位置参数的数量 |
| ${#@} | 位置参数的数量 |
| $? | 返回值 |
| $$ | 脚本的进程 ID (PID) |
| $- | 传递给脚本的标志 (使用 set) |
| $_ | 上一个命令的最后一个参数 |
| $! | 在后台运行的最后一个作业的进程 ID (PID) |
* 必须用引号引起来,否则默认为$@.
表 B-2. TEST 运算符:二元比较
| 运算符 | 含义 | ----- | 运算符 | 含义 |
|---|---|---|---|---|
| 算术比较 | 字符串比较 | |||
| -eq | 等于 | = | 等于 | |
| == | 等于 | |||
| -ne | 不等于 | != | 不等于 | |
| -lt | 小于 | \< | 小于 (ASCII) * | |
| -le | 小于或等于 | |||
| -gt | 大于 | \> | 大于 (ASCII) * | |
| -ge | 大于或等于 | |||
| -z | 字符串为空 | |||
| -n | 字符串不为空 | |||
| 算术比较 | 在双括号内 (( ... )) | |||
| > | 大于 | |||
| >= | 大于或等于 | |||
| < | 小于 | |||
| <= | 小于或等于 |
* 如果在双中括号 [[ ... ]] 测试结构中,则无需转义 \ 。
表 B-3. TEST 运算符:文件
| 运算符 | 测试是否 | ----- | 运算符 | 测试是否 |
|---|---|---|---|---|
| -e | 文件存在 | -s | 文件大小不为零 | |
| -f | 文件是普通文件 | |||
| -d | 文件是目录 | -r | 文件具有读取权限 | |
| -h | 文件是符号链接 | -w | 文件具有写入权限 | |
| -L | 文件是符号链接 | -x | 文件具有执行权限 | |
| -b | 文件是块设备 | |||
| -c | 文件是字符设备 | -g | sgid 标志已设置 | |
| -p | 文件是管道 | -u | suid 标志已设置 | |
| -S | 文件是套接字 | -k | "sticky bit" 标志已设置 | |
| -t | 文件与终端关联 | |||
| -N | 文件自上次读取后已修改 | F1 -nt F2 | 文件 F1 比 F2 新 * | |
| -O | 您拥有该文件 | F1 -ot F2 | 文件 F1 比 F2 旧 * | |
| -G | 文件的组 ID 与您的相同 | F1 -ef F2 | 文件 F1 和 F2 是同一文件的硬链接 * | |
| ! | NOT (反转上述测试的意义) |
* 二元运算符(需要两个操作数)。
表 B-4. 参数替换和展开
| 表达式 | 含义 |
|---|---|
| ${var} | 的值var(与$var) |
| ${var-$DEFAULT} | 如果var未设置,则将表达式 求值 为$DEFAULT * |
| ${var:-$DEFAULT} | 如果var未设置或为空,则将表达式求值为$DEFAULT * |
| ${var=$DEFAULT} | 如果var未设置,则将表达式求值 为$DEFAULT * |
| ${var:=$DEFAULT} | 如果var未设置或为空,则将表达式求值 为$DEFAULT * |
| ${var+$OTHER} | 如果var已设置,则将表达式求值 为$OTHER,否则为 null 字符串 |
| ${var:+$OTHER} | 如果var已设置,则将表达式求值 为$OTHER,否则为 null 字符串 |
| ${var?$ERR_MSG} | 如果var未设置,打印$ERR_MSG并中止脚本,退出状态为 1。* |
| ${var:?$ERR_MSG} | 如果var未设置,打印$ERR_MSG并中止脚本,退出状态为 1。* |
| ${!varprefix*} | 匹配所有先前声明的以varprefix |
| ${!varprefix@} | 匹配所有先前声明的以varprefix |
* 如果var 已设置,则将表达式求值 为$var,没有副作用。
# 注意 运算符的某些上述行为已从 Bash 的早期版本更改。
表 B-5. 字符串操作
| 表达式 | 含义 |
|---|---|
| ${#string} | 的长度$string |
| ${string:position} | 从$string位置$position |
| ${string:position:length} | 提取$length个字符的子字符串,从$string位置$position[零索引,第一个字符位于位置 0] |
| ${string#substring} | 从$substring的前面剥离最短匹配项$string |
| ${string##substring} | 剥离最长匹配项$substring的前面剥离最短匹配项$string |
| ${string%substring} | 从$substring从$string |
| ${string%%substring} | 剥离最长匹配项$substring从$string |
| ${string/substring/replacement} | 替换第一个匹配项$substring为$replacement |
| ${string//substring/replacement} | 替换所有匹配项$substring为$replacement |
| ${string/#substring/replacement} | 如果$substring匹配$string的前端,替换$replacement为$substring |
| ${string/%substring/replacement} | 如果$substring匹配$string的前端,替换$replacement为$substring |
| 的后端 | expr match "$string" '$substring'$substring匹配$string |
| * 开头的长度 | expr match "$string" '$substring'$substring匹配$string |
| expr "$string" : '$substring' | expr index "$string" $substring$string在$substring* 中第一个字符的数字位置,该字符匹配 [如果未找到匹配项则为 0,第一个字符计数为位置 1] |
| expr substr $string $position $length | 提取$length个字符,从$string位置$position[如果未找到匹配项则为 0,第一个字符计数为位置 1] |
| expr match "$string" '\($substring\)' | 提取$substring* ,从$string |
| expr "$string" : '\($substring\)' | 提取$substring* 开始搜索$string |
| expr match "$string" '.*\($substring\)' | 提取$substring* ,从$string |
| expr "$string" : '.*\($substring\)' | 提取$substring* ,从$string |
* 其中$substring是正则表达式。
表 B-6. 其他构造
| 表达式 | 解释 |
|---|---|
| 方括号 | |
| if [ CONDITION ] | 测试构造 |
| if [[ CONDITION ]] | 扩展测试构造 |
| Array[1]=element1 | 数组初始化 |
| [a-z] | 字符范围,在正则表达式中 |
| 花括号 | |
| ${variable} | 参数替换 |
| ${!variable} | 间接变量引用 |
| { command1; command2; . . . commandN; } | 代码块 |
| {string1,string2,string3,...} | 大括号展开 |
| {a..z} | 扩展大括号展开 |
| {} | 文本替换,在 find 和 xargs 之后 |
| 圆括号 | |
| ( command1; command2 ) | 在子 shell 中执行的命令组 |
| Array=(element1 element2 element3) | 数组初始化 |
| result=$(COMMAND) | 命令替换,新样式 |
| >(COMMAND) | 进程替换 |
| <(COMMAND) | 进程替换 |
| 双圆括号 | |
| (( var = 78 )) | 整数算术 |
| var=$(( 20 + 5 )) | 整数算术,带变量赋值 |
| (( var++ )) | C 风格 变量递增 |
| (( var-- )) | C 风格 变量递减 |
| (( var0 = var1<98?9:21 )) | C 风格 三元运算 |
| 引号 | |
| "$variable" | “弱”引用 |
| 'string' | “强”引用 |
| 反引号 | |
| result=`COMMAND` | 命令替换,经典样式 |