课程表

UNIX 基础

UNIX Shell编程

UNIX 进阶

UNIX 常用资源

工具箱
速查手册

UNIX 特殊变量

当前位置:免费教程 » 数据库/运维 » UNIX

之前的教程就在命名变量时,使用某些非字符数值作为字符变量名提出警告。这是因为这些字符用于作为特殊的 UNIX 变量的名称。这些变量是预留给特定功能的。

例如,$ 字符代表进程的 ID 码,或当前 Shell 的 PID:

  1. $echo $$

以上命令将输出当前 Shell 的 PID:

  1. 29949

下面的表列出了一些特殊变量,可以在你的 Shell 脚本中使用它们:

变量 描述
$0 当前脚本的文件名。
$n 这些变量对应于调用一个脚本时的参数。n 是一个十进制正整数,对应于特定参数的位置(第一个参数是 $1,第二个参数是 $2 等等)。
$# 提供给脚本的参数数量。
$* 所有的参数都表示两个引用。如果一个脚本接收了两个参数,即 $* 相当于 $1 $2。
$@ 所有的参数都是两个单独地引用。如果一个脚本接收了两个参数,即 $@ 相当于 $1 $2。
$? 执行最后一个命令的退出态。
$$ 当前 shell 的进程号。对于 shell 脚本,即他们正在执行的进程的 ID。
$! 最后一个后台命令的进程号。

命令行参数

命令行参数 $1,$2,$3,……$9 是位置参数,$0 指向实际的命令,程序,shell 脚本或函数。$1,$2,$3,……$9 作为命令的参数。

以下脚本使用与命令行相关的各种特殊变量:

  1. #!/bin/sh
  2. echo "File Name: $0"
  3. echo "First Parameter : $1"
  4. echo "Second Parameter : $2"
  5. echo "Quoted Values: $@"
  6. echo "Quoted Values: $*"
  7. echo "Total Number of Parameters : $#"

这是一个运行上述脚本的示例:

  1. $./test.sh Zara Ali
  2. File Name : ./test.sh
  3. First Parameter : Zara
  4. Second Parameter : Ali
  5. Quoted Values: Zara Ali
  6. Quoted Values: Zara Ali
  7. Total Number of Parameters : 2

特殊参数 $* 和 $@

存在一些特殊参数,使用它们可以访问所有的命令行参数。除非他们包含在双引号 "" 中,否则 $* 和 $@ 运行是相同的。

这两个参数都指定所有的命令行参数,但 $* 特殊参数将整个列表作为一个参数,各个值之间用空格隔开。而 $@ 特殊参数将整个列表分隔成单独的参数。

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

  1. #!/bin/sh
  2. for TOKEN in $*
  3. do
  4. echo $TOKEN
  5. done

作为示例,运行上述脚本:

  1. $./test.sh Zara Ali 10 Years Old
  2. Zara
  3. Ali
  4. 10
  5. Years
  6. Old

注意:这里 do……done 是一种循环,我们将在后续教程中介绍它。

退出态

$? 变量代表前面的命令的退出态。

退出态是每个命令在其完成后返回的数值。一般来说,大多数命令如果它们成功地执行,将 0 作为退出态返回,如果它们执行失败,则将 1 作为退出态返回。

一些命令由于一些特定的原因,会返回额外的退出状态。例如,一些命令为了区分不同类型的错误,将根据特定类型的失败原因返回各种不同的退出态值。

下面是一个成功命令的例子:

  1. $./test.sh Zara Ali
  2. File Name : ./test.sh
  3. First Parameter : Zara
  4. Second Parameter : Ali
  5. Quoted Values: Zara Ali
  6. Quoted Values: Zara Ali
  7. Total Number of Parameters : 2
  8. $echo $?
  9. 0
  10. $
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号