1

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

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

以随机顺序。我已经阅读了很多关于getopts内置命令的内容,但我认为它并不能解决我的问题。我无法更改论点的顺序,所以我不明白如何一一阅读论点。
有人有什么想法吗?

4

2 回答 2

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

于 2013-04-27T11:29:03.533 回答
0

考虑使用 Python 及其出色的内置库argparse。它将支持几乎所有合理和常规的命令行选项,并且比 bash 更轻松(奇怪的是,在命令行参数处理方面,这是一种相当糟糕的语言)。

于 2013-04-27T11:27:54.737 回答