在bash脚本中的命令行选项之前使用可选参数

时间:2017-01-12 10:40:18

标签: bash shell unix command-line-arguments getopts

我有一个脚本myscript应该执行以下操作:

  1. 独立运行:myscript
  2. 使用参数运行:myscript myarg
  3. 使用选项运行:myscript -a 1 -b 2 -c 3 ...
  4. 使用参数和选项运行:myscript myarg -a 1 -b 2 -c 3 ...
  5. 我似乎无法使用4.工作,似乎在选项前面使用了一个参数(我从getopts获取)会干扰getopts处理所有内容的方式。

    我使用的代码基本上是这样的:

    while getopts "a:b:c:" opt; do
       case ${opt} in
          a)
             var_a=$OPTARG
             ;;
          ... more options here
       esac
    done
    
    if [ ! -z "$1" ] && [[ ! "$1" =~ ^- ]]; then
          ... do stuff with first argument - if it's there and it's not just an option
    fi
    

    如果这个问题有一个简单的解决方案,我会非常感激!

1 个答案:

答案 0 :(得分:1)

您可以在脚本的最后shift中使用if(一般的想法已经存在,正如您所写"做第一个参数的事情 - 如果它在那里并且它不仅仅是一个选项")。