SHELL特殊变量

特殊变量

SHELL特殊变量

变量

说明

$0

当前脚本的文件名

$n

传递给脚本或函数的参数: n 是一个数字,表示第几个参数

$#

传递给脚本或函数的参数个数

$*

传递给脚本或函数的所有参数

$@

传递给脚本或函数的所有参数(被双引号 " " 包含时与 $* 不同)

$?

SHEEL最后运行的命令的结束代码(返回值)

$$

SHELL自身pid(ProcessID)

$!

SHELL最后运行的后台进程的PID

$*$@ 区别

$*$@ 都表示传递给脚本或函数的所有参数,但是当被双引号 " " 包含时区别如下:

  • $* 将所有参数作为一个整体,以 "$1 $2 ... $n" 的形式输出所有参数

  • $@ 将所有参数分开,以 "$1" "$2" "$n" 的形式输出所有参数

$?

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。

退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0 ,失败返回 1

不过,也有一些命令返回其他值,表示不同类型的错误。

检查脚本参数的案例

  • 要求传递的参数是某个目录,我们的脚本逻辑需要检查:

    • 是不是传递了一个参数

    • 传递的参数是不是一个存在的目录

检查脚本参数是否传递以及参数是不是存在的目录
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
    echo "Usage: $0 DIRECTORY" >&2
    exit 1
fi

参考