- Unix/Linux 初学者指南
- Unix/Linux - 首页
- Unix/Linux - 什么是Linux?
- Unix/Linux - 入门
- Unix/Linux - 文件管理
- Unix/Linux - 目录
- Unix/Linux - 文件权限
- Unix/Linux - 环境
- Unix/Linux - 基本实用程序
- Unix/Linux - 管道与过滤器
- Unix/Linux - 进程
- Unix/Linux - 通信
- Unix/Linux - vi 编辑器
- Unix/Linux Shell 编程
- Unix/Linux - Shell 脚本
- Unix/Linux - 什么是Shell?
- Unix/Linux - 使用变量
- Unix/Linux - 特殊变量
- Unix/Linux - 使用数组
- Unix/Linux - 基本运算符
- Unix/Linux - 决策
- Unix/Linux - Shell 循环
- Unix/Linux - 循环控制
- Unix/Linux - Shell 替换
- Unix/Linux - 引号机制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函数
- Unix/Linux - 手册页帮助
- 高级 Unix/Linux
- Unix/Linux - 标准 I/O 流
- Unix/Linux - 文件链接
- Unix/Linux - 正则表达式
- Unix/Linux - 文件系统基础
- Unix/Linux - 用户管理
- Unix/Linux - 系统性能
- Unix/Linux - 系统日志
- Unix/Linux - 信号和陷阱
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 $