我們試圖將帶單引號和雙引號的參數傳遞給shell腳本並使用此參數執行。在正常,但呼應其打印的命令,我們正在爲「未終止引述值」將帶單引號和雙引號的參數傳遞給shell腳本
請參閱腳本和參數傳遞方法:
[[email protected]]/root# ./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="PS MarkSweep" -A CollectionCount -K duration'
#!/bin/bash
out=`/usr/lib64/nagios/plugins/check_jmx -U service:jmx:rmi:///jndi/rmi://$1`
echo $1
echo $out
執行,我們正在輸出
$ 1日後:本地主機:9199/jmxrmi -O java.lang中:類型= GarbageCollector,名字= 「PS MarkSweep」 -A CollectionCount -K持續時間
$出:JMX CRITICAL未終結引號值
在Shell腳本中,我們我們硬編碼$ 1的值,然後執行,我們得到正確的結果。
我們嘗試的參數傳遞如下:
./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name=\"PS MarkSweep\" -A CollectionCount -K duration'
在這種情況下錯誤
是:JMX CRITICAL無效字符「「」中的財產
./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="\"PS MarkSweep\"" -A CollectionCount -K duration'
值部分在這種情況下,錯誤是JMX關鍵未知的報價值
所以任何人都請幫助我吧
您是否嘗試過通過單變量和使用$ @或者$ *的電話嗎? –
問題不在於傳遞參數,而是在腳本內部正確解釋該參數。 [Bash FAQ 50](http://mywiki.wooledge.org/BashFAQ/050)在一定程度上涵蓋了您在腳本內部要做的事情。 – chepner