Linux shell脚本中的特殊变量是在变量名中使用某些字符时。这些字符被用于特殊的Linux变量名中。变量是为特定函数保留的。

1、特殊变量

可以使用$$表示当前shell的进程ID号或PID,

例如,

echo $$

输出:

28904

可以在shell脚本中使用的特殊变量,如下表,

特殊变量

描述

$0


当前脚本的文件名。

$n

这些变量对应于调用脚本时使用的参数。

这里n是一个数字,对应于一个参数的位置(第一个参数是$1

第二个参数是$2,以此类推)。

$#

提供给脚本的参数数量。

$*

表示的是参数的字符串类型当有多个参数的时候,

所有参数拼成一个长字符串作为一个参数。

如果一个脚本接收到两个参数,$*等价于$1 $2。,不包括 $0

$@

$@和 $* 相同。但"$*""$@" 有所不同。

"$*" 把所有参数合并成一个字符串,

"$@" 会得到一个字符串参数数组。

$?


上个命令执行的退出状态。

$$

当前shell的进程号。对于shell脚本,是执行的进程ID。

$!

最后一个后台命令的进程号。

2、命令行参数

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

例如,

#!/bin/bash
echo "脚本文件名: $0"
echo "第一参数 : $1"
echo "第二参数 : $2"
echo "所有参数: $@"
echo "所有参数: $*"
echo "进程ID: $$"
echo "参数个数 : $#"

调用及输出:

$ bash a.sh "C" "Java"  "Python"
脚本文件名: a.sh
第一参数 : C
第二参数 : Java
所有参数: C Java Python
所有参数: C Java Python
进程ID: 23880
参数个数 : 3

3、$* 和 $@区别

表示的是参数的字符串类型当有多个参数的时候,所有参数拼成一个长字符串作为一个参数。如果一个脚本接收到两个参数,$*等价于$1 $2。,不包括 $0。不带引号的$@和 $*相同。但 "$*""$@" 有所不同。 "$*" 把所有参数合并成一个字符串,而 "$@" 会得到一个字符串参数数组。

4、判断命令执行的退出状态

$?是上个命令执行的退出状态。大多数命令在成功时返回退出状态0,在不成功时返回其它值。可能有些命令会区分不同类型的错误,并根据具体的失败类型返回不同的退出值。

例如,

$ bash a.sh "C" "Java"  "Python"
脚本文件名: a.sh
第一参数 : C
第二参数 : Java
所有参数: C Java Python
所有参数: C Java Python
进程ID: 23880
参数个数 : 3
$ echo $?
0

推荐文档