shell 特殊参数

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 脚本的灵活性与健壮性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值