2010-03-26 151 views
2

從包裝器shell腳本我調用Java程序。我希望Unix shell腳本將除了 EMAIL參數之外的所有參數傳遞給java程序。如何刪除EMAIL參數並將其餘參數傳遞給java程序。 EMAIL的論據可以來自任何位置。shell腳本傳遞參數的子集

valArgs() 
{ 

    until [ $# -eq 0 ]; do 
     case $1 in 
      -EMAIL) 
       MAILFLAG=Y 
       shift 
       break 
       ;; 
     esac 
    done 
} 



main() 

{ 

valArgs "[email protected]" 

$JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "[email protected]" 

回答

1

只是要刪除「-EMAIL」選項嗎?我假設它在「-EMAIL」之後沒有附加額外參數

main(){ 
args="$1" 
case "$1" in 
    *-EMAIL*) 
     args=${args/-EMAIL/} 
esac 
$JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "$args" 
} 
+0

args被賦予第一個參數。 then args = $ {args/-EMAIL /} 上面的語句試圖做什麼。 – Arav 2010-03-26 03:55:58

+0

如果在$ args中找到「-EMAIL」,則將其刪除(替換爲空白) – ghostdog74 2010-03-26 04:13:57

+0

EMAIL參數可以出現在第一個或第二個或...(可選一個)中。我如何更改上述程序將其刪除並將其餘部分傳遞給程序 – Arav 2010-03-28 23:07:37

1

如果您使用的是bash,您可以使用下面的代碼片段。使用數組有助於解決位置參數中存在空格時可能發生的問題。

請記住,原始示例中傳遞的位置參數僅在valArgs()調用期間持續存在。


#!/bin/bash 

main() 
{ 
    # Build up arg[] array with all options to be passed 
    # to subcommand. 
    i=0 

    for opt in "[email protected]"; do 
     case "$opt" in 
     -EMAIL) 
      MAILFLAG=Y 
      ;; 
     *) 
      arg[i]="$opt" 
      i=$((i+1)) 
      ;; 
     esac 
    done 

    $JAVA_HOME/bin/java -d64 -jar WEB-INF/lib/test.jar "${arg[@]}" 
} 

main "[email protected]" 
+0

我正在使用korn shell。它會起作用嗎? – Arav 2010-03-26 03:35:38

+0

我在Debian Lenny系統上用/ usr/bin/ksh替換了/ bin/bash,它對我很有用。 – 2010-03-26 03:45:06

+0

這個$ {arg [@]}是什麼意思? @表示數組中的值的數量?如果我在主「$ @」 之後使用echo「$ {arg [@]}」作爲全局變量很好。我想調用main函數,之後我需要調用帶有參數 – Arav 2010-03-26 06:06:14