0

我制作了一个包含大约 10 个可选参数的脚本,我可以用它来提供:

-s sorts the list
-d gives all the directories of the map
-a also the hidden files of the map

例子:. MyScript -d Downloads

但现在我想要一个合适的方法来组合我所有的参数

所以我可以这样做:-sda or -s -d

他们是让这个工作的简单方法吗?如果有人对此有一点解释或教程,请发布!

谢谢阅读

4

2 回答 2

2

我想getopts这就是你要找的。
这里有一个简单的教程来帮助您入门。

一个例子(直接取自教程):

#!/bin/bash

while getopts ":a:" opt; do
  case $opt in
    a)
      echo "-a was triggered, Parameter: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

问候

于 2013-06-03T08:37:58.837 回答
2

您可以使用getopts内部功能。试试这个例子:

while getopts abc: name; do
  echo $name, OPTARG: $OPTARG, OPTIND: $OPTIND, OPTERR: $OPTERR
done

跑:./test -ab -c file

结果:

a, OPTARG: , OPTIND: 1, OPTERR: 1
b, OPTARG: , OPTIND: 2, OPTERR: 1
c, OPTARG: file, OPTIND: 4, OPTERR: 1

该变量name将设置为已解析的参数。如果:字符后面有一个,则需要一个参数,该参数将被放置到OPTARG变量中。OPTIND显示下一个要处理的参数。

如果OPTERR设置了,那么如果发生错误, 会显示错误消息。如果第一个 arg 是,:则抑制错误消息。

跑:./test -d

结果:

./test: illegal option -- d
?, OPTARG: , OPTIND: 2, OPTERR: 1

./test -c-c需要一个额外的参数)

结果:

./test: option requires an argument -- c
?, OPTARG: , OPTIND: 2, OPTERR: 1

因此,您可以测试是否name?一个错误的选择。

于 2013-06-03T08:37:38.693 回答