在bash中定义标志参数



我编写了bash脚本,其中包含了一些日志记录,以查看执行的每个步骤中发生了什么。

现在,我可以在debuggin-info和user-info中分割这些日志(比如某个东西已经完成了,等等(。所以我想要一些标志参数,比如--verbose,我在其他一些bash函数中看到了它,可以启用完整的日志记录,用法如下:

some_function --verbose

some_function -v

我称之为flag参数,但不知道什么是正确的名称,因此找不到任何有用的名称。

如何为bash脚本定义这样的参数?

箱子更适合这个

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"

目前,我使用了变通方法,并将其作为正常位置参数(作为$n(。确切地说,我有四个参数的列表,所以我收集这个标志如下:

verbose=$4
if [ ! "$verbose" == "--verbose" ]; then
verbose=""
fi

所以,若参数和一个标志不匹配,那个么我将它留空,若我想使用它,我只将它和空字符串进行比较。

不过,我有一个很大的缺点:它必须在参数列表中排名第四。

最新更新