一、位置参数变量
Shell 脚本运行时,可以通过命令行向脚本传递参数。 这些参数会自动保存在特殊变量中:
| 变量 | 含义 |
|---|---|
$0 |
当前脚本的名称(含路径) |
$1 |
第1个参数 |
$2 |
第2个参数 |
$# |
参数个数 |
$@ |
以独立字符串形式输出所有参数 |
$* |
以单字符串形式输出所有参数 |
📘 示例:打印所有参数
Shell
#!/bin/bash
echo "脚本名称: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "参数个数: $#"
echo "所有参数(\$@): $@"
echo "所有参数(\$*): $*"
运行:
Shell
bash demo.sh A B C
输出:
plain
脚本名称: demo.sh
第一个参数: A
第二个参数: B
参数个数: 3
所有参数($@): A B C
所有参数($*): A B C
💡 区别提示:
$@—— 循环遍历时每个参数单独处理$*—— 所有参数当作一个整体字符串
二、getopts 解析选项
当脚本需要支持类似 -s /data -d /backup -t tar 的选项形式时,可用内置命令 getopts。
语法:
Shell
while getopts "s:d:t:" opt; do
case $opt in
s) SRC=$OPTARG ;;
d) DEST=$OPTARG ;;
t) TYPE=$OPTARG ;;
*) echo "未知参数"; exit 1 ;;
esac
done
说明:
getopts "s:d:t:" opt:定义3个选项-s -d -t,冒号表示后面需要跟值;$OPTARG:保存当前选项对应的参数值;$opt:保存当前选项名。
三、实战案例:带选项的备份脚本
需求:编写一个可指定源目录、目标目录、备份类型(tar/zip)的通用备份脚本。
Shell
#!/bin/bash
# backup.sh -s /data -d /backup -t tar
while getopts "s:d:t:" opt; do
case $opt in
s) SRC=$OPTARG ;;
d) DEST=$OPTARG ;;
t) TYPE=$OPTARG ;;
*) echo "Usage: $0 -s <source> -d <dest> -t <tar|zip>"
exit 1 ;;
esac
done
# 参数检查
if [[ -z "$SRC" || -z "$DEST" || -z "$TYPE" ]]; then
echo "参数不完整!"
echo "Usage: $0 -s <source> -d <dest> -t <tar|zip>"
exit 1
fi
# 创建目标目录
mkdir -p "$DEST"
# 生成时间戳
DATE=$(date +"%Y%m%d_%H%M%S")
FILENAME="backup_${DATE}"
# 根据类型执行备份
if [[ "$TYPE" == "tar" ]]; then
tar -czf "$DEST/${FILENAME}.tar.gz" "$SRC"
elif [[ "$TYPE" == "zip" ]]; then
zip -r "$DEST/${FILENAME}.zip" "$SRC"
else
echo "不支持的类型: $TYPE"
exit 1
fi
echo "✅ 备份完成:$DEST/${FILENAME}.$TYPE"
运行:
Shell
bash backup.sh -s /data -d /backup -t tar
四、参数与错误处理建议
- 使用
getopts时,推荐在case语句中包含*处理未知选项; - 关键参数缺失时,要打印使用帮助(usage);
- 脚本开头可加入:
Shell
[[ $# -eq 0 ]] && echo "使用 -h 查看帮助" && exit 1
五、🧩 小练习:参数解析练习
编写一个脚本 args_info.sh,输出:
- 脚本名
- 参数总数
- 每个参数单独输出(使用循环)
运行示例:
Shell
bash args_info.sh apple banana cherry
输出:
plain
脚本名:args_info.sh
参数个数:3
参数1:apple
参数2:banana
参数3:cherry
六、🏁 课后作业:实现一个带 --help 提示的脚本
要求:
-
编写脚本
mytool.sh; -
支持选项:
-f <filename>:指定文件;-l:显示文件行数;--help:显示帮助信息;
-
示例运行:
Shell
bash mytool.sh -f test.txt -l
bash mytool.sh --help
- 输出格式示例:
plain
使用说明:
-f <file> 指定要处理的文件
-l 显示文件行数
--help 显示本帮助