2013-06-03 46 views
0

我已经做了脚本约10可选PARAMATERS,我可以把它送给结合:猛砸如何参数

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

例子:. MyScript -d Downloads

但现在我想,所有这些都有道我PARAMATERS

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

是他们的一种简单的方法来让这项工作? 如果有人对此有任何解释或教程,请发布!

日Thnx阅读

回答

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,则如果发生错误,则将显示错误消息。如果第一个参数是:那么错误消息被抑制。

运行:./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?那么这是一个不好的选择。

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 

问候

+0

这工作,但如果我把 “:AB:” 和一个)回声“我的名字是.. B)呼应我的年龄是......如果你做了-ab而不是说另一句话,我应该怎么设置呢? – user2252399

+0

@ user2252399'getopts'只支持一个字符选项,它是内置bash。如果你想要你可以看一下'getopt',它是一个外部工具(不是内置的),它可以处理多字符参数,并带有双短划线前缀。这里的[man page](http://www.manpagez。com/man/1/getopt /) – wizard

+0

@ user2252399 With:ab:b选项需要参数。你可以用'-ab foo'来调​​用它,并且同时执行两个case标签 - 同时遍历所有选项。 – Jens