Bash如何组合参数

时间:2013-06-03 08:27:02

标签: linux bash

我制作了一个大约有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

他们是一个让这项工作变得简单的方法吗? 如果有人有关于此的详细解释或教程,请发布!

Thnx for reading

2 个答案:

答案 0 :(得分: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是否为?,那么这是一个糟糕的选择。

答案 1 :(得分:2)

我认为getopts正是您所寻找的 Here一个简单的教程,可以帮助您入门。

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

#!/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

此致