2013-06-03 77 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