我们试图将带单引号和双引号的参数传递给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