无涯教程-Linux - 特殊变量

78 阅读1分钟

在本章中,我们将讨论Unix中的特殊变量,在上一章中,我们了解了变量名称中使用某些非字母数字字符时应注意的事项,这些变量保留用于特定功能。

如, $字符代表当前Shell的进程ID号或PID-

$echo $$

上面的命令写入当前Shell的PID-

29949

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

Sr.No. Variable & 描述
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"</span><spanclass="pln">echo</span><spanclass="str">"FirstParameter:0"</span><span class="pln"> echo </span><span class="str">"First Parameter : 1" echo "Second Parameter : 2"</span><spanclass="pln">echo</span><spanclass="str">"QuotedValues:2"</span><span class="pln"> echo </span><span class="str">"Quoted Values: @" echo "Quoted Values: "</span><spanclass="pln">echo</span><spanclass="str">"TotalNumberofParameters:*"</span><span class="pln"> echo </span><span class="str">"Total Number of Parameters : #"

这是上述脚本的Example运行-

$./test.sh Learnfk com
File Name : ./test.sh
First Parameter : Learnfk
Second Parameter : com
Quoted Values: Learnfk com
Quoted Values: Learnfk com
Total Number of Parameters : 2

特殊参数$*和$@

我们可以如下所示编写Shell脚本,以使用$*或$@特殊参数处理未知数量的命令行参数-

#!/bin/sh

for TOKEN in </span><spanclass="pun"></span><spanclass="pln"></span><spanclass="kwd">do</span><spanclass="pln">echo</span><span class="pun">*</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> echo TOKEN done

这是上述脚本的示例运行-

$./test.sh Learnfk com 2 Years Old
Learnfk
com
2
Years
Old

注意-这里的 do ... done 是一种循环,将在后续教程中进行介绍。

退出状态

$? 变量表示上一个命令的退出状态。

退出状态是每个命令完成后返回的数值。通常,如果大多数命令成功,则返回退出状态;如果不成功,则返回1。

以下是成功命令的示例-

$./test.sh learnfk com
File Name : ./test.sh
First Parameter : learnfk
Second Parameter : com
Quoted Values: learnfk com
Quoted Values: learnfk com
Total Number of Parameters : 2
$echo $?
0
$

参考链接

www.learnfk.com/linux/linux…