在脚本bash中解析混合参数

时间:2013-04-27 11:24:15

标签: bash shell parameters optional-arguments

我需要实现一个用混合(可选和非可选)参数调用的脚本,例如 -

./scriptfile -m "(argument of -m)" file1 -p file2 -u "(argument of -u)" 

以随机顺序排列。我已经阅读了很多关于getopts内置命令的内容,但我认为它并没有解决我的问题。我不能改变论证的顺序,所以我不明白我怎么能逐一阅读这些论点 有人有什么想法吗?

2 个答案:

答案 0 :(得分:3)

你应该尝试getopts,它是为此目的而设计的:

前:

#!/bin/bash

while getopts ":a:x:" opt; do
  case $opt in
    a)
      echo "-a was triggered with $OPTARG" >&2
    ;;
    x)
      echo "-x was triggered with $OPTARG" >&2
    ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
    ;;
  esac
done

使用不同的交换机命令运行脚本:

$ bash /tmp/l.sh -a foo -x bar
-a was triggered with foo
-x was triggered with bar

$ bash /tmp/l.sh -x bar -a foo
-x was triggered with bar
-a was triggered with foo

如您所见,更改开关的顺序没有问题

请参阅http://wiki.bash-hackers.org/howto/getopts_tutorial

答案 1 :(得分:0)

考虑使用Python及其出色的内置库argparse。它将支持几乎任何合理和传统的命令行选项,并且比bash更麻烦(奇怪的是,在命令行参数处理方面,这是一种相当差的语言)。