最近在做一個的項目,因為有些功能使用ORACLE的package實現起來有點問題,但是用UNIX的指令碼實現起來卻很好,所以最終在AP上掛了一個executable為HOST類型的REQUEST,來解決這個問題。
因為覺得這個東西有點意思,所以把我瞭解到的一些很基本的東西share出來。
首先,必須有一個UNIX下面可以執行的shell script檔案,而且這個檔案必須放在相應Application的bin目錄下,例如,如果要將該request掛在GL下面,相應的目錄就是
而且,要確保REQUEST執行者對這個檔案的execute許可權,例如在開發環境,如果將該檔案放在DEV2下,則DEV2AP這個使用者需要對該檔案有execute許可權。
而掛request的過程與掛普通request過程一樣。
重點在這個shell script,注意這個檔案一定要符合UNIX shell script的格式,另外推薦在UNIX環境下編寫script,因為windows下面的分行符號與UNIX下面不同。
傳參,指令碼讀取request的參數是通過 “$1”這種方式來讀取參數的。關於傳參,USER GUIDE上面有說$1-$4是內定的一些系統參數,使用者自訂的參數需要從$5開始。但是我實際在DEV2以及DEV4下面測試,卻發現,不是這樣的。
HOST類型executable在傳參的時候,將所有的參數都放在一個字串裡面傳給參數1,系統參數在前,自訂參數在後,而且無論設定參數類型為什麼,系統總是會在參數值兩邊加上雙引號,並且以空格來間隔各參數。
例如,我輸入3個字串參數,分別為
“test1”, “test2”, “test3”
那麼從$1將得到一個字串:
XXGLCONVERTFILE FCP_REQID=2303143 FCP_LOGIN="<USERID>/<PWD>" FCP_USERID=1047 FCP_USERNAME="<USERNAME>" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=0 "test1" "test2" "test3" |
可以看到,系統參數除了第一個是SHELL指令碼名稱以外,其他的都是一系列的參數(NAME=VALUE)對,而且最後一個一般都是FCP_NUM_COPIES,並且值是一個數字,然後才是我們自訂的參數。於是,我們可以根據這個字串的特點來讀取我們自己的參數。
UNIX下面有一個功能強大的編輯工具SED,我們可以利用這個命令來達到我們擷取參數值的目的。
關於SED命令的詳細使用,可以查閱相關資料。
首先,我們讀取$1截取掉系統參數,並將加在自訂參數兩邊的雙引號去掉。
args=`echo $1 | sed "s/^.*FCP_NUM_COPIES=[0-9]* *"//" | sed "s/"//g"` |
注意“s”表示替換字元,源字元與目的字元使用“/”間隔包含:
sed "s/source/destination/" |
這樣我們對上述字串處理之後,正下的字串就是:
接下來,我們可以繼續用sed命令截取各個參數值:
arg1=`echo $args|sed "s/ .*//"` arg2=`echo $args|sed "s/$arg1 //"|sed "s/ .*//"` arg3=`echo $args|sed "s/$arg1 $arg2 //"|sed "s/ .*//"` |
在獲得各參數值後,我們就可以盡情的發揮我們的功力處理他們了,
args=`echo $1|sed "s/^.*FCP_NUM_COPIES=[0-9]* *"//"|sed "s/"//g"` echo "args: "$args arg1=`echo $args|sed "s/ .*//"` echo "arg1: "$arg1 arg2=`echo $args|sed "s/$arg1 //"|sed "s/ .*//"` echo "arg2: "$arg2 arg3=`echo $args|sed "s/$arg1 $arg2 //"|sed "s/ .*//"` echo "arg3: "$arg3 |
如果輸入參數“test1”, “test2”, “test3”,以上程式的結果如下:
args: test1 test2 test3 arg1: test1 arg2: test2 arg3: test3 |
當然以上代碼只適用於比較簡單的情況,例如如果參數值中有空格或者斜杠就必須另外考慮了,不過sed命令相當強大,而且可以結合Regex使用,用它來處理一般都不會有問題。
如果要退出執行,可以直接用“exit”後面跟上一個數字表示結束代碼,如果不加,系統預設為0,表示成功,0以外的數字表示失敗(我沒有查到怎樣返回warning)。
http://wolfyuan.itpub.net/post/25778/280094