在本章中,我们将详细讨论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 $