我一直有一个问题让我把头发扯掉。我确信答案很简单,但到目前为止它已经避开了我。从逻辑上讲,这就是我想要做的:
检查文件系统是否有特定类型的挂载
针对这些挂载运行命令以获取 up/down
状态 如果状态为 up,请检查日志文件的 1000 行是否有字符串“slow response”
如果找到,请设置标志为 1 并退出循环
如果不是,则将标志设置为 0 并获取下一行直到完成
如果状态为关闭,将标志设置为 0 并移动 continue
echo $flag
不幸的是,这个脚本只返回 NULL。我觉得这很奇怪,因为当我在分配后立即插入一个 echo $flag 时,它会回显正确的输出。此代码中的某处被重置为 NULL,我无法找到它。有什么想法吗?作为附加信息,如果我在分配后插入回显语句,我已检查以确保 $status、$i 和 $line 的值显示正确的输出。
#!/bin/bash
LOGDIR=/var/log/ceph/
df|grep osd|sed 's/.*\///'|while read i;do
status=`ceph osd dump|grep -w "$i"|awk '{print $2}'`
if [ $status == "up" ]; then
tail -1000 $LOGDIR/ceph-$i.log|while read line;do
if echo $line|grep -q "slow response";then
let flag=1
break
else
let flag=0
continue
fi
done
elif [ $status == "down" ];then
let flag=0
fi
echo $flag
done