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都是同一个文件的硬链接 * |