【发布时间】:2017-07-31 16:49:30
【问题描述】:
我正在使用一个遗留的 shell 脚本,用于测试二进制文件中的某些功能(即调用 nm、objdump、ldd 等;并对结果进行一些解析)。当前的 shell 脚本非常“敏感”,而且很大,所以我想尽量减少对它所做的更改。
它目前首先检查参数的数量,每个参数都是一个路径,即:
if [ "$#" -lt 3 ]
then
echo "Error. Invalid number of arguments."
exit
fi
我想添加一些额外的参数及其长格式等效项,以禁用脚本内部的某些功能,而不会使上述测试无效,即:
-h | --help: Print shell usage and expected arguments.
-x | --xfer: Do some extra copy logic.
-d | --dry: Do a dry-run, and don't actually change any files.
但是,我不希望将标志(即以连字符开头的参数)计为参数(即不影响将参数分配给 $1、$2 和 $3)。例如,以下当前是我的脚本的有效调用:
bash ./test.sh ./ ./out ./logs
我希望以下可能的调用也可以工作:
bash ./test.sh ./ ./out ./logs --dry
bash ./test.sh --xfer ./ ./out ./logs
bash ./test.sh --help
bash ./test.sh ./ --xfer ./out --dry ./logs
如何设置脚本来“过滤”以连字符(一个或两个)开头的参数,并保持对$1、$2 和$3 的相同分配?
【问题讨论】:
-
顺便说一句,如果非侵入性是您的首要目标,我会通过环境而不是命令行来接受这些选项。
-
@CharlesDuffy 好点。
标签: linux bash shell scripting