redis监控内存脚本遇到的 ^M问题

作者:Garany 发布于:2020-04-15
1.脚本内容
# cat /usr/local/sbin/redis_memory.sh

#!/bin/bash
a=$(/usr/local/redis/bin/redis-cli -h 127.0.0.1 -a wang.123 -p 6479 info memory |sed -n '/used_memory_human/p' |awk -F: '{print $2}' |sed 's/[a-Z]//g')
if [[ `echo "$a > 5.10"|bc` -eq 1 ]]; then
  echo -e "Redis Memory usage exceeds limit!"
else
  exit
fi
2.报错
(standard_in) 1: illegal character: ^M
3.加上执行过程
sh -x /usr/local/sbin/redis_memory.sh

++ /usr/local/redis/bin/redis-cli -h 127.0.0.1 -a wang.123 -p 6479 info memory
++ sed -n /used_memory_human/p
++ awk -F: '{print $2}'
++ sed 's/[a-Z]//g'
+ a=$'2.36\r'
 > 5.10''2.36
++ bc

(standard_in) 1: illegal character: ^M
4.可见变量$a出现了"\r",使用cat -et- 显示不能打印的控制字符:变量a中多了一个回车符
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -a wang.123 -p 6479 info memory |sed -n '/used_memory_human/p' |awk -F: '{print $2}' |sed 's/G//g' |cat -et -

4.80^M$
5.改进,在获取变量a获取的时候删除换行符
a=$(/usr/local/redis/bin/redis-cli -h 127.0.0.1 -a wang.123 -p 6479 info memory |sed -n '/used_memory_human/p' |awk -F: '{print $2}' |sed 's/[a-Z]//g' |tr -d "\r")
标签: linux redis shell

我来说说