Shell 脚本中的特殊参数用于处理命令行参数、脚本状态和进程信息,以下是核心参数及其作用
1、位置参数
1.1、 $0
表示当前脚本的名称。若在脚本中调用,返回脚本路径或名称
echo "脚本名称: $0" # 输出示例: ./test.sh
1.2、$1、$2...$9、${10}
表示传递给脚本或函数的第 1 到第 n 个参数。超过 9 的参数需用大括号包裹(如 ${10})
echo "第一个参数: $1, 第十个参数: ${10}"
2、参数的个数与集合
2.1、$#
返回传递给脚本或函数的参数总数,不包括脚本名称
echo "参数个数: $#" # 输入 `./test.sh a b c` 时输出 3
2.2、$* 与 $@
- $*:将所有参数视为一个整体字符串(以 IFS 分隔,默认是空格)
- $@:将每个参数视为独立字符串,保留参数边界
for i in "$*"; do echo -e $i; done
echo -e "----------------------------"
for i in "$@"; do echo -e $i; done
可以清晰的看到2个参数的区别
$./test.sh 1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 5 6 7 8 9 10 11
----------------------------
1
2
3
4
5
6
7
8
9
10
11
3、进程与状态参数
3.1、$$
返回当前 Shell 进程的 PID
echo "当前进程 PID: $$"
3.2、$!
返回最后一个后台运行进程的 PID
sleep 10 & # 后台执行
echo "后台进程 PID: $!"
[tmp]$./test.sh
后台进程 PID: 12386
[tmp]$ps -aux | grep "sleep 10"
linux06 12386 0.0 0.0 7216 608 pts/1 S 11:08 0:00 sleep 10
3.3、$?
返回上一个命令的退出状态码。0 表示成功,非零表示失败
ls ./*
echo "上条命令状态码: $?"
4、区别与使用场景
- $* vs $@
在双引号内使用时,"$*"
将所有参数合并为一个字符串,而 "$@"
保持参数独立性
- $# 参数校验
常用于判断参数是否满足要求,如
if [ $# -lt 2 ]; then
echo "需至少两个参数";
exit 1;
fi
通过合理使用这些参数,可增强 Shell 脚本的灵活性与健壮性