Unix / Linux - 特殊变量

在本章中,我们将详细讨论Unix中的特殊变量.在前面的一章中,我们了解在变量名中使用某些非字母数字字符时要小心.这是因为这些字符用在特殊Unix变量的名称中.这些变量是为特定函数保留的.

例如, $ 字符表示当前shell&minus的进程ID号或PID;

$echo $$

上面的命令写入当前shell的PID :

29949

下表显示了一些可以在shell脚本中使用的特殊变量 :

Sr.No.变量&描述
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
$