bash 脚本添加参数

bash 脚本添加参数

我创建了一个带有参数和参数的脚本。我想插入--help论点。

我已经知道如何用 解析普通参数-,但我不知道如何解析这些--参数。

为了解析 的选项test.sh -h,我使用以下检查:

while getopts ":h" opt; 
do 
case $opt in
    h ) {
            echo "help!!!"
            exit 1
    } ;;
esac
done

但我希望可以选择使用test.sh --help.

PS 我正在使用 Ubuntu 12.04...但这并不重要。

答案1

getopts无法处理长参数:

$ ( set -- --help ; while getopts -- -help opt; do echo "$opt"; done )
-
h
e
l
p

如果你想处理长参数,你需要编写自己的解析器。

GNU 版本getopt 支持解析长选项,但最好不要使用它;它不可移植,而且非 GNU 版本在某些类型的参数上容易出错。例如,它们通常无法正确解析包含空格的参数。

答案2

问题的作者提供了这个解决方案:

我在 /usr/bin 的 .sh 脚本之一中找到了解决方案

  if test "$#" -eq 1; then
    case "$1" in
      --help | --hel | --he | --h )
        func_usage; exit 0 ;;
      --version | --versio | --versi | --vers | --ver | --ve | --v )
        func_version; exit 0 ;;
    esac
  fi

克里斯·唐对此的评论:

就像我说的,如果你想处理长参数,你需要编写自己的解析器——[你找到的]脚本就是一个例子。

根据记录,您发现的脚本写得很糟糕。例如, --version部分匹配可以重写为--v*)(假设您同意--vfoo)。

相关内容