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是一种循环,将在后续教程中介绍。

退出状态

美元变量表示前一个命令的退出状态。

退出状态是每个命令完成后返回的数值。通常,大多数命令如果成功则返回退出状态 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
$