基础位置参数法
通过 $1
、$2
等直接按顺序调用参数:
echo "第二个参数: $2" echo "第三个参数: $3"
执行命令:
./script.sh Apple Banana Cherry
输出:
第一个参数: Apple
第二个参数: Banana
第三个参数: Cherry
遍历所有参数
使用 安全遍历(推荐)
将参数视为独立元素,避免空格引起的错误:
for param in "$@"; do echo "参数: $param" done
输入 ./script.sh "File A" "File B"
时,正确输出两个参数。
使用 (谨慎使用)
将所有参数合并为单个字符串(易引发空格问题):
echo "所有参数: $*" # 输出: 所有参数: Apple Banana Cherry
参数数组化处理
将参数存入数组进行高级操作:
args=("$@") # 将参数转为数组 # 按索引调用 echo "第二个参数: ${args[1]}" # 索引从0开始 → Banana # 遍历数组 for item in "${args[@]}"; do echo "数组元素: $item" done # 统计参数个数 echo "总参数数: ${#args[@]}"
动态参数处理技巧
shift
命令左移参数
逐次处理参数并移除已用参数:
while [ $# -gt 0 ]; do echo "当前参数: $1" shift # 移除$1,原$2变为$1 done
跳过特定参数
结合 shift
跳过标志后的值(如 -d
和其参数):
while [ $# -gt 0 ]; do case $1 in -d) shift 2 ;; # 跳过 -d 和其后的值 *) echo "其他参数: $1"; shift ;; esac done
带选项的参数解析
使用 getopts
处理复杂参数集(如 -f file.txt
):
while getopts "u:p:" opt; do case $opt in u) user="$OPTARG";; p) pass="$OPTARG";; ?) echo "无效选项"; exit 1;; esac done echo "用户名: $user, 密码: $pass"
执行命令:
./script.sh -u admin -p 1234
关键注意事项
-
空格处理
- 用双引号包裹 和
"${array[@]}"
保留参数原始格式。 - 错误示例:
for param in $*
(空格会拆分参数)。
- 用双引号包裹 和
-
参数数量校验
操作前检查参数数量:if [ $# -lt 2 ]; then echo "错误:至少需要2个参数" exit 1 fi
-
特殊符号转义
传递含 、 等符号时需转义:./script.sh \$100 # 传递 "$100"
方法 | 适用场景 | 优势 |
---|---|---|
位置参数 $1,$2 |
参数固定且顺序明确 | 简单直观 |
数组 args=("$@") |
需随机访问或统计参数 | 支持索引和长度计算 |
shift |
逐个处理参数 | 动态移除已用参数 |
getopts |
解析带选项的标志(如 -f file ) |
标准化选项处理 |
引用说明基于 IEEE 和 Open Group Shell 标准文档,遵循 POSIX 兼容性规范,并通过 Bash 5.1 环境验证,核心方法参考《Linux命令行与Shell脚本编程大全》第四版(Richard Blum, Christine Bresnahan 著)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5862.html