【发布时间】:2015-03-27 12:52:24
【问题描述】:
我在变量中有一个字符串,我想用另一个字符串替换它,但是当匹配的字符串包含反斜杠时,该操作无效。
这是脚本中不起作用的部分:
cpuQueueOutput=`/usr/local/nagios/libexec/check_nrpe -H $hostname -t 30 -c Check_Pdh -a 'counter=\System\Processor Queue Length'`
echo "CPU Queue1: $cpuQueueOutput"
matchCpuQueueOutput="\System\Processor"
newCpuQueueOutput="CPU Queue"
CpuQueuePerf=`echo ${cpuQueueOutput//$matchCpuQueueOutput/$newCpuQueueOutput}`
echo "CPU Queue2: $CpuQueuePerf"
脚本的输出如下所示:
CPU Queue1: OK: |'\System\Processor Queue Length_value'=0;0;0
CPU Queue2: OK: |'\System\Processor Queue Length_value'=0;0;0
OK: CPU Stats {(total, avg 1m: 9%), (total, avg 5m: 3%)} Top 3 Processes: {(powershell : 64%), (svchost#3 : 0%), (svchost#2 : 0%)} | 'total 1m'=9%;90;95 'total 5m'=3%;90;95
用'CPU Queue' 替换OK: |'\System\Processor Queue Length_value' 不起作用。
【问题讨论】:
-
您的“完整脚本”似乎在前几行的窗口长度处被截断。
-
为什么需要
echo?EVALSTRING=${CPUOUTPUT//$MATCHEVALSTRING/$NEWEVALSTRING}怎么了? -
问题出在这部分:CPUQUEUEOUTPUT=
/usr/local/nagios/libexec/check_nrpe -H $HOSTNAME -t 30 -c Check_Pdh -a 'counter=\System\Pr$ echo "CPU Queue1: $CPUQUEUEOUTPUT" MATCHCPUQUEUEOUTPUT="Processor" NEWCPUQUEUEOUTPUT="CPU Queue" CPUQUEUEPERF=echo ${CPUQUEUEOUTPUT//$MATCHHCPUQUEUEOUTPUT/$NEWCPUQUEUEOUTPUT}` echo "CPU Queue2: $CPUQUEUEPERF" -
EVALSTRING=${CPUOUTPUT//$MATCHEVALSTRING/$NEWEVALSTRING} 工作正常 CPUQUEUEPERF=
echo ${CPUQUEUEOUTPUT//$MATCHHCPUQUEUEOUTPUT/$NEWCPUQUEUEOUTPUT}不工作 -
@user2961029:人们普遍认为使用全大写作为 bash 变量名是一种很好的风格。这不是很好的风格。所有的 caps 变量都被 OS 和 shell 使用。您应该只使用普通名称,无论是驼峰式还是下划线,以使您的变量名称可读。 (例如
match_cpu_queue_output)。
标签: string bash scripting string-substitution