1. 特殊的shell变量
| 变量 | 含义 |
| $0 | 脚本名字 |
| $1 | 位置参数 #1 |
| $2 - $9 | 位置参数 #2 - #9 |
| ${10} | 位置参数 #10 |
| $# | 位置参数的个数 |
| $* | 所有的位置参数(作为单个字符串) * |
| $@ | 所有的位置参数(每个都作为独立的字符串) |
| ${#*} | 传递到脚本中的命令行参数的个数 |
| ${#@} | 传递到脚本中的命令行参数的个数 |
| $? | 返回值 |
| $$ | 脚本的进程ID(PID) |
| $- | 传递到脚本中的标志(使用set) |
| $_ | 之前命令的最后一个参数 |
| $! | 运行在后台的最后一个作业的进程ID(PID) |
2. 算数比较操作符
单括号形式: e.g. if [ "$a" -lt "$b" ]
| 操作 | 描述 | 示例 |
| -eq | 等于 | if [ "$a" -eq "$b" ] |
| -ne | 不等于 | if [ "$a" -ne "$b" ] |
| -lt | 小于 | if [ "$a" -lt "$b" ] |
| -le | 小于等于 | if [ "$a" -le "$b" ] |
| -gt | 大于 | if [ "$a" -gt "$b" ] |
| -ge | 大于等于 | if [ "$a" -ge "$b" ] |
双括号形式: e.g. ((a<2))&& echo "ok";
| 操作 | 描述 | 示例 |
| > | 大于 | (("$a" > "$b")) |
| >= | 大于等于 | (("$a" >= "$b")) |
| < | 小于 | (("$a" < "$b")) |
| <= | 小于等于 | (("$a" <= "$b")) |
3. 字符串比较操作符
| 操作 | 描述 |
| = | 等于 |
| == | 等于 |
| != | 不等于 |
| \< | 小于 (ASCII) * |
| \> | 大于 (ASCII) * |
| -z | 字符串为空 |
| -n | 字符串不为空 |
4. 文件类型测试操作符
| 操作 | 测试条件 |
| -e | 文件是否存在 |
| -f | 是一个标准文件 |
| -d | 是一个目录 |
| -h | 文件是一个符号链接 |
| -L | 文件是一个符号链接 |
| -b | 文件是一个块设备 |
| -c | 文件是一个字符设备 |
| -p | 文件是一个管道 |
| -S | 文件是一个socket |
| -t | 文件与一个终端相关联 |
| -N | 从这个文件最后一次被读取之后, 它被修改过 |
| -O | 这个文件的宿主是你 |
| -G | 文件的组id与你所属的组相同 |
| ! | "非" (反转上边的测试结果) |
| -s | 文件大小不为0 |
| -r | 文件具有读权限 |
| -w | 文件具有写权限 |
| -x | 文件具有执行权限 |
| -g | 设置了sgid标记 |
| -u | 设置了suid标记 |
| -k | 设置了"粘贴位" |
| F1 -nt F2 | 文件F1比文件F2新 * |
| F1 -ot F2 | 文件F1比文件F2旧 * |
| F1 -ef F2 | 文件F1和文件F2都是同一个文件的硬链接 * |
本文介绍Shell脚本中特殊变量的用法,包括$0、$1等位置参数及$#, $*, $@等,并详细解释了算数、字符串和文件类型的测试操作符。
1411

被折叠的 条评论
为什么被折叠?



