Unix / Linux - 特殊变量
在本章中,我们将详细讨论 Unix 中的特殊变量。 在我们前面的一章中,我们了解了在变量名中使用某些非字母数字字符时如何小心。 这是因为这些字符用于特殊 Unix 变量的名称。 这些变量是为特定功能保留的。
例如,$字符表示当前shell的进程ID号,即PID −
$echo $$
以上命令写入当前shell的PID −
29949
下表显示了一些可以在 shell 脚本中使用的特殊变量 −
序号 | 变量 & 描述 |
---|---|
1 |
$0 当前脚本的文件名。 |
2 |
$n 这些变量对应于调用脚本的参数。 这里 n 是一个正十进制数,对应于参数的位置(第一个参数是 $1,第二个参数是 $2,依此类推)。 |
3 |
$# 提供给脚本的参数数量。 |
4 |
$* 所有参数都用双引号引起来。 如果脚本接收两个参数,$* 等同于 $1 $2。 |
5 |
$@ 所有参数都单独用双引号括起来。 如果脚本接收两个参数,$@ 等同于 $1 $2。 |
6 |
$? 最后执行的命令的退出状态。 |
7 |
$$ 当前shell的进程号。 对于 shell 脚本,这是它们在其下执行的进程 ID。 |
8 |
$! 最后一个后台命令的进程号。 |
命令行参数
命令行参数 $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
特殊参数 $* 和 $@
有一些特殊参数允许一次访问所有命令行参数。 $* 和 $@ 除非用双引号 "" 括起来,否则它们的作用相同。
这两个参数都指定了命令行参数。 但是,"$*"特殊参数将整个列表作为一个参数,其间有空格,而"$@"特殊参数将整个列表分成单独的参数。
我们可以编写如下所示的 shell 脚本来处理未知数量的带有 $* 或 $@ 特殊参数的命令行参数 −
#!/bin/sh for TOKEN in $* do echo $TOKEN done
这是上述脚本的示例运行 −
$./test.sh Zara Ali 10 Years Old Zara Ali 10 Years Old
注意 − 这里的 do...done 是一种循环,将在后续教程中介绍。
Exit 退出状态
$? 变量表示上一个命令的退出状态。
退出状态是每个命令完成后返回的数值。 通常,如果成功,大多数命令返回退出状态 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 $