Unix 简明教程
Unix / Linux - Special Variables
在本章中,我们将详细讨论 Unix 中的特殊变量。在以前的章节中,我们已经了解了在变量名中使用某些非字母数字字符时的注意事项。这是因为这些字符用于 Unix 特殊变量的名称中。这些变量是为特定函数保留的。
例如,字符 $ 表示当前 shell 的进程 ID 号或 PID −
$echo $$
以上命令会写入当前 shell 的 PID −
29949
下表显示了可以在 shell 脚本中使用的许多特殊变量 −
Sr.No. |
Variable & Description |
1 |
$0 当前脚本的文件名。 |
2 |
$n 这些变量对应于调用某个脚本时所带的参数。其中 n 是一个正的十进制数,对应于参数的位置(第一个参数是 $1,第二个参数是 $2,依此类推)。 |
3 |
$# 提供给脚本的参数数量。 |
4 |
$ *所有参数都使用双引号引起来。如果脚本接收两个参数,$ * 等于 $1 $2。 |
5 |
$@ 所有参数都单独用双引号引起来。如果脚本接收两个参数,$@ 等于 $1 $2。 |
6 |
$? 最后执行的命令的退出状态。 |
7 |
$$ 当前 shell 的进程号。对于 shell 脚本来说,这是它们正在执行之下的进程 ID。 |
8 |
$! 上一个后台命令的进程号。 |
Command-Line Arguments
命令行参数 $1、$2、$3、…$9 是位置参数,其中 $0 指向实际命令、程序、shell 脚本或函数,$1、$2、$3、…$9 作为指令的参数。
以下脚本使用与命令行相关的各种特殊变量 −
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
下面是上述脚本的一个运行示例——
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
Special Parameters $* and $@
有特殊的参数允许一次访问所有命令行参数。 $ * 和 $@ 二者扮演同样的角色,除非它们被包含在双引号中, "" 。
这两个参数都指定了命令行参数。但是,"$*" 特殊参数将整个列表作为一个参数,参数之间有空格,而 "$@" 特殊参数将整个列表分解为单独的参数。
我们可以编写如下所示的 shell 脚本以使用 $* 或 $@ 特殊参数处理任意数量的命令行参数——
#!/bin/sh
for TOKEN in $*
do
echo $TOKEN
done
下面是上述脚本的一个运行示例——
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note ——此处 do…done 是将涵盖在后续教程中的某种循环。
Exit Status
$? 变量表示上一个命令的退出状态。
退出状态是在命令执行完毕后返回的数值。按照规则,大多数命令如果成功会返回退出状态 0,如果失败会返回 1。
有些命令会出于特定原因返回其他退出状态。例如,有些命令会区分不同类型的错误,并会根据特定类型的错误而返回不同的退出值。
以下是成功命令的示例——
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$