ksh与bash在某些地方的使用方法不一样,
ksh是aix小机上默认安装的shell
在oracle的监控模板自动发现中,使用了ksh的数组声明, set -A rval (1 2 3 4 5)
将一个数组声明给一个变量,然后就可以使用for循环遍历
在bash中,声明数组的方式是 rval=(1 2 3 4 5)
,
在脚本中,将显示数据 ${#rval[*]}
echo ${rval} SYSTEM
echo ${rval[*]} SYSTEM SYSAUX UNDOTBS1 TEMP USERS ASSIST_NEW 显示所有变量
echo ${rval[@]} SYSTEM SYSAUX UNDOTBS1 TEMP USERS ASSIST_NEW 显示所有变量
echo ${#rval[*]} 6 显示数组的变量数量
由于zy的万德机器,内控机器上没有ksh,将脚本的改为sh的,导致 set -A rval ${rval}不适用,
一开始将set -A改为set -a虽然不报set -A的错,但是导出的数据显示不是json对象
用zabbix-get手动抓取发现能出来数据,但是与ksh出来的数据不同的一点在于每一行后面没有逗号,导致zabbix没有识别成json对象,
错误的json对象
正常的json对象
解决:
将ksh的声明数组方式改为sh的 将 set -A rval ${rval}
>>>>> rval=(${rval})
,