$$
shell本身的PID(ProcessID)
$!
shell最后运行的后台Process的PID
$?
最后运行结束的命令的返回状态值,为0则为执行成功,为1则为执行失败
$*
所有参数列表.以”$1 $2 … $n”的形式输出所有参数
$@
所有参数列表.以”$1″ “2”…”2″ … “2”…”n”的形式输出所有参数
$#
添加到shell的命令行参数个数
$0
脚本本身的文件名
$1 ~ $n
添加到脚本的各个参数值,$1是第一个参数,$2是第二个参数…
给出一个例子辅助理解
#创建一个脚本测试文件
[root@localhost ~]# vim test.sh
echo nu
在Shell脚本编程中,环境变量扮演着至关重要的角色,它们提供了与系统交互以及控制脚本行为的方法。这里我们将详细探讨在标题和描述中提到的几个特定的环境变量:`$0`, `$?`, `$!`, `$$`, `$*`, `$#`, 和 `$@`。
1. **`$0`**:
`$0` 是一个特殊的环境变量,它表示当前执行的Shell脚本的文件名。在脚本内部,`$0` 用于引用调用该脚本时的文件路径。例如,在上述的`test.sh`脚本中,`echo "scname:$0"`会输出脚本的名称,即`./test.sh`。
2. **`$?`**:
`$?` 保存了上一个命令的退出状态或返回值。在Unix/Linux系统中,0通常代表成功,非0值则表示错误。如果你需要检查一个命令是否成功执行,可以检查`$?`的值。例如,如果一个命令执行成功,`echo $?`将输出0。
3. **`$$`**:
`$$` 表示当前Shell进程的进程ID(PID)。当你需要在脚本中跟踪或控制子进程时,这个变量非常有用。例如,如果你启动了一个后台进程,你可以保存`$$`的值以供后续操作。
4. **`$!`**:
`$!` 存储的是最后一个后台命令的进程ID。如果你的脚本中包含异步执行的命令,你可以通过`$!`获取它的PID,以便进行后续的管理和监控。
5. **`$*`** 和 **`$@`**:
这两个变量都用来表示传递给脚本的所有参数,但它们的处理方式有所不同。
- `$*` 将所有参数作为一个单个字符串显示,每个参数之间由空格分隔,如`"arg1 arg2 arg3"`。
- `$@` 则是将每个参数作为单独的字符串显示,每个参数都被双引号包围,如`"arg1" "arg2" "arg3"`。在实际使用中,通常推荐使用`$@`,因为它能更好地处理包含空格的参数。
6. **`$#`**:
`$#` 返回传递给脚本的参数个数。在`test.sh`脚本中,`echo "number:$#"`将输出参数的数量,例如在执行`./test.sh aa bb`时,输出将是`2`,因为有两个参数传递给脚本。
了解这些环境变量后,我们可以编写更复杂的脚本来处理参数、检查命令执行状态、管理进程等。在编写Shell脚本时,熟练掌握这些变量能帮助我们编写出更加健壮和灵活的程序。在实际应用中,你可能会结合使用这些变量来实现各种功能,比如错误处理、日志记录、条件判断等。因此,熟悉并正确使用这些环境变量是Shell脚本编程的基础。