ksh与sh的区别,导致 oracle表空间自动发现有问题

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})

猜你喜欢

转载自www.cnblogs.com/0916m/p/11750296.html
ksh