【问题标题】:Defining flag parameters in bash在 bash 中定义标志参数
【发布时间】:2020-06-15 11:10:36
【问题描述】:
我编写了 bash 脚本,其中包含了一些日志记录,以查看执行的每个步骤中发生了什么。
现在,我可以将这些日志拆分为调试信息和用户信息(某事已完成等)。所以我想要一些标志参数,比如--verbose,我在其他一些 bash 函数中看到它来启用完整的日志记录和使用就像:
some_function --verbose
或
some_function -v
我称之为标志参数,不知道什么是正确的名称,因此我找不到任何有用的东西。
如何为bash脚本定义这些参数?
【问题讨论】:
标签:
linux
bash
shell
centos
【解决方案1】:
目前,我使用了解决方法并将其作为正常的位置参数(如$n)。确切地说,我有四个参数的列表,所以我收集这个标志是这样的:
verbose=$4
if [ ! "$verbose" == "--verbose" ]; then
verbose=""
fi
因此,如果参数与标志不匹配,则将其留空,如果要使用它,只需将其与空字符串进行比较。
不过对我来说有一个很大的缺点:它必须在参数列表中排在第 4 位。
【解决方案2】:
这种情况更适合这种情况
while [[ "$@" ]]; do
case "$1" in
-v|--verbose) verbose="true";;
esac
shift
done
在函数中也可以这样做,但请注意,在这种情况下,它将处理传递给函数 some_function -v 的参数。
some_function () {
while [[ "$@" ]]; do
case "$1" in
-v|--verbose) verbose="true";;
esac
shift
done
}
然后你可以在脚本的某个地方检查是否设置了verbose
[[ "$verbose" ]] && echo "verbose mode" || echo "silent mode"