2017-09-28 77 views
1

我有一個UNIX shell腳本,我在參數的形式傳遞值。一切似乎工作良好,但不是一個參數,但我可以看到它與echo命令打印。參數變量不被追加

腳本 - :

#!/bin/bash 

admPath=$1 
admdatatype=$2 
admeaimethod=$3 
admprefix=$4 
gatewayname=$5 
enterpriseName=$6 
userId=$7 
password=$8 
admFilter=$9 

echo "$admPath" 
echo "$admdatatype" 
echo "$admeaimethod" 
echo "$admprefix" 
echo "$gatewayname" 
echo "$enterpriseName" 
echo "$userId" 
echo "$password" 
echo "$admFilter" 


srvrmgr -g "$gatewayname" -e "$enterpriseName" -s gepfdevss -u "$userId" -p "$password" -c "run task for comp ADMBatchProc with admpath="$admPath", admdatatype="$admdatatype", admfilter="'$admFilter'", admeaimethod=$admeaimethod, admprefix="$admprefix"" -b >> exportLOVStatus.out 

正如你可以看到我有一個參數叫做admFilter我想通過爲'[List Of Values Parent (UDA).Value]=\"XRX_TEST\"'其值。

當我執行上面的腳本我可以看到如下回聲結果 - :

執行 - :

./exportLOV.sh "/global/u70/globepfdev/ADM" "LOV" "Upsert" "export_ADM" "gateway" "enterpriseserver" "user" "password" \''[List Of Values Parent (UDA).Value]=\"XRX_TEST\"'\' 

回聲結果 - :

/global/u70/globepfdev/ADM 
LOV 
Upsert 
export_ADM 
gateway 
enterprise 
user 
password 
'[List Of Values Parent (UDA).Value]=\"XRX_TEST\"' 

但是,隨着連接成功後,服務器管理器將執行命令。此admFilter參數不是讀取值。這是run task命令的輸出 - :

run task for comp ADMBatchProc with admpath=/global/u70/globepfdev/ADM, admdatatype=LOV, admfilter=$admFilter, admeaimethod=Upsert, admprefix=export_ADM 

你可以看到所有其他參數與它除了admFilter關聯的值。我被卡住了,因爲這可以幫助我。我怎樣才能正確地傳遞價值?謝謝

+0

我不明白怎麼會是。如果你寫的是這樣的結果:'admfilter =''$ admfilter'「,' – Barmar

+0

@Barmar你是對的,我糾正了。 –

回答

3

單引號可防止變量被擴展。你應該把單引號放在雙引號字符串中,所以它們將被直接發送到srvrmgr命令,而不是在它之外。

也沒有必要結束-c參數中每個變量的雙引號。

srvrmgr -g "$gatewayname" -e "$enterpriseName" -s gepfdevss -u "$userId" -p "$password" -c "run task for comp ADMBatchProc with admpath=$admPath, admdatatype=$admdatatype, admfilter='$admFilter', admeaimethod=$admeaimethod, admprefix=$admprefix" -b >> exportLOVStatus.out 

Difference between single and double quotes in Bash