Linux Shell脚本处理命令行参数核心是位置参数($1、$2等)和getopts解析短选项;需用"$1"防空值报错、"$@"保分词,getopts支持-a -b -c arg格式,长选项可用set预处理转换,最后须校验参数有效性并设默认值。

Linux Shell 脚本里处理命令行参数,核心就两件事:用好位置参数($1、$2…)读取简单输入,再用 getopts 规范解析带选项的参数(比如 -f file.txt -v --help)。不依赖外部工具,纯 Bash 内置功能就能搞定大多数场景。
位置参数:最基础也最容易出错的入口
脚本运行时,空格分隔的每个词自动成为位置参数:$0 是脚本名,$1 是第一个参数,$2 是第二个……$# 告诉你一共几个参数,$@ 和 $* 则代表全部参数(区别在于引号包裹行为,日常推荐用 "$@" 保留原始分词)。
常见误区是直接写 if [ $1 = "start" ] —— 如果没传参数,$1 展开为空,变成 if [ = "start" ],语法报错。安全写法是加引号:
if [ "$1" = "start" ]; then ...- 检查参数个数:
if [ $# -lt 1 ]; then echo "Usage: $0 <command>"; exit 1; fi</command> - 批量处理所有参数:
for arg in "$@"; do echo "Got: $arg"; done
getopts:解析短选项的标准方式
getopts 是 Bash 内置命令,专为解析形如 -a -b value -c 或 -abv filename 的传统 Unix 风格选项设计。它不支持长选项(--help),但足够轻量可靠。
基本结构是 while getopts "ab:c" opt; do ... done,其中字符串 "ab:c" 定义合法选项:a 和 b 是开关型选项,c 后跟冒号表示它需要参数(如 -c file.txt)。
- 每次循环,
opt变量存当前解析到的选项字母(如a、b) - 需要参数的选项,其值自动存入
OPTARG - 遇到非法选项,
opt被设为?,可借此报错退出 - 解析结束后,
$OPTIND指向第一个非选项参数的位置(可用于获取剩余位置参数)
示例片段:
标签: linux go access 工具 unix 环境变量 区别 shell脚本
还木有评论哦,快来抢沙发吧~