Shell特殊变量 $0, $#, $*, $@, $?, $$和命令行参数
Shell 中的特殊变量参考如下表:
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2 |
$# | 传递给脚本或函数的参数个数 |
$* | 传递给脚本或函数的所有参数 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到 |
$? | 上个命令的退出状态,或上个函数的返回值 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID |
注:$ 和 $@ 的区别*
- $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
- 但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
Shell 中的 if 判断
条件测试的表达式
- if [ str1 = str2 ]:当两个串有相同内容、长度时为真
- if [ str1 != str2 ]:当串str1和str2不等时为真
- if [ -n str1 ]:当串的长度大于0时为真(串非空)
- if [ -z str1 ]:当串的长度为0时为真(空串)
- if [ str1 ]:当串str1为非空时为真
整数比较
- -eq:测试两个整数是否相等
- -ne:测试两个整数是否不等
- -gt:测试一个数是否大于另一个数
- -lt:测试一个数是否小于另一个数
- -ge:大于或等于
- -le:小于或等于
命令间的逻辑关系:
- 逻辑与:&&
- 逻辑或:||
字符串比较
字符串比较,直接用 ==、!=、>、< 等符号即可,两边需要有空格。
文件测试
- -e:FILE 测试文件是否存在
- -f:file 测试文件是否为普通文件
- -d:file 测试指定路径是否为目录
- -r:file 测试文件对当前用户是否可读
- -w:file 测试文件对当前用户是否可写
- -x:file 测试文件对当前用户是都可执行