redis info all取得的信息,shell不能加单引号的奇怪问题

因监控需要,使用shell对redis的info all生成的文本信息进行解析,将解析后的数据入库,用来预警和以后故障,性能问题分析等。

但是在文本进行分析时,比如这条数据role:master,
l_db_role=`grep "role:" 13.info_all|awk -F"[:]" '{print $2}'`
获取到的l_db_role就为master,入库时需要给这个数据加上单引号,使用"'$l_db_role'"或者"'${l_db_role}'"加单引号,但是死活加不上,出现了一系列的问题,例如:
'master
''aster
等等。
后来通过hexdump分析得到的数据,发现获取到的master数据有0a0d的windows换行符,通过dos2unix转换后,再分析文本,再加引号,顺利完成。


当时还发帖了,被搞的焦头烂额的:
我想用shell来监控redis数据库,获取一些信息
#!/ bin/sh
source ~/.bash_profile
statname[0]="role:"
statname[1]="connected_slaves:"
statname[2]="uptime_in_seconds:"


l_db_role=`grep "${statname[0]}" 13.info_all|awk -F"[:]" '{print $2}'`
l_conn_slaves=`grep "${statname[1]}" 13.info_all|awk -F"[:]" '{print $2}'`
l_uptime=`grep "${statname[2]}" 13.info_all|awk -F"[:]" '{print $2}'`
a=master
b=12345
echo "'$l_db_role'"
echo "'$l_conn_slaves'"
echo "'$l_uptime'"
echo "'$a'"
echo "'$b'"

输出:
[root@mdb tmp]# ./d.sh
'master
'1
'3992036

'master'
'12345'
[root@mdb tmp]#

疑问:为毛加单引号这个,会成这样,末尾那个单引号没有,如果是自己定义的变量直接就能加单引号,前后都有,但是grep出来的值用来加单引号,就少了后面一个,这是怎么回事呢,搞了好久了。。。。没搞明白啊,都要被迫放弃shell了,想用其他的比如有python了


[root@mdb tmp]# echo "${l_db_role}'"
'aster
这样写,导致master值的第一个m都没有了



我用hexdump发现了点东西:

[root@mdb tmp]# hexdump e.log
0000000 616d 7473 7265 0a0d                   
0000008
[root@mdb tmp]# hexdump f.log
0000000 616d 7473 7265 000a                    
0000007
[root@mdb tmp]# diff e.log f.log
1c1
< master
---
> master

[root@mdb tmp]# cat e.log
master
[root@mdb tmp]# cat f.log
master
[root@mdb tmp]#

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29822273/viewspace-2139292/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29822273/viewspace-2139292/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值