2012-12-13 30 views
0

於單參數的多個值我有一個bash腳本是這樣的:捕獲在bash

usage="setup.sh [-localsource path to dir] [-help]"; 

for i in [email protected] 
    do 
     if [ "$localSourceOpt" = 1 ] 
     then 
      localSource=$i 
      localSourceOpt=0; 
     fi 
     if [ "$i" = "-localsource" ] 
     then 
      localSourceOpt=1; 
     fi 
     if [ "$i" = "-help" ] 
     then 
      echo "$usage"; 
      exit; 
     fi 
    done 

這需要在參數如

setup.sh -localsource PATH 

我需要的是增加另一個參數,它可能有多個參數值例如

setup.sh -localsource PATH -locbranches one two three 

我該怎麼做才能捕獲通過參數「-locb牧場」

在此先感謝

回答

0

我注意到,您在編寫大量的邏輯來處理簡單的命令行參數的機制,而且我用bashgetopts functionality而不是也許建議。

這使得單參數選項工作變得微不足道。對於多個參數,它不能很好地工作,你必須引用參數-option "1 2 3"。但是它確實在下面的情況下處理多個參數。

setup.sh -localsource PATH one two three 

one two three沒有鏈接到任何命令行選項。另一種方法是爲每個參數指定選項,例如

setup.sh -localsource PATH -locbranch one -locbranch two -locbranch three 
+0

'setup.sh -localsource PATH -locbranch one -locbranch two -locbranch three'似乎可能是簡單的方法去 – sakhunzai

+0

是的。我認爲這很簡單直觀 –

0

你可以做4例開關(-localsource,-locbranches,-help和默認值),並在每種情況下,你應該在一個狀態進入,

for i in [email protected]; do 
    case "$i" in 

    "-help") echo "$usage" 
      ;; 
    "-localsource") STATE="localsource" 
       ;; 
    "-locbranches") STATE="locbranches" 
       ;; 
    *) 
      if [ "$STATE" == "localsource" ]; then 
      PATH=$i 
      elif [ "$STATE" == "locbranches"]; then 
      # do something with argv from locbrances 
      else 
      echo "Wrong state!" 
      fi 
      ;; 
    esac 
done