我有以下脚本,基本上我希望它连接到各种服务器。查看有多少打开的文件,如果超过 50,000 个,则发送电子邮件。但是最后一个服务器我需要检查是否超过 400,000 个。我的 OR 有问题,无法正常工作。
如果我按原样运行当前脚本,即使没有达到任何限制,我也会收到警报电子邮件。请帮我完成 OR 语句。
我在命令行中的输出显示:
Alert Server Issue
AlertError S1:6326 S2:6355 S3:6242 S4:7171 S5:4694 S6:5284 S7:3973 S8:308432
剧本:
#!/bin/bash
S1_IP=72.15.97.13
S2_IP=72.15.97.14
S3_IP=72.15.97.15
S4_IP=72.15.97.16
S5_IP=72.15.97.17
S6_IP=72.15.97.18
S7_IP=72.15.97.19
S8_IP=72.15.97.20
RESULT1=$(ssh test@$S1_IP lsof | wc -l)
RESULT2=$(ssh test@$S2_IP lsof | wc -l)
RESULT3=$(ssh test@$S3_IP lsof | wc -l)
RESULT4=$(ssh test@$S4_IP lsof | wc -l)
RESULT5=$(ssh test@$S5_IP lsof | wc -l)
RESULT6=$(ssh test@$S6_IP lsof | wc -l)
RESULT7=$(ssh test@$S7_IP lsof | wc -l)
RESULT8=$(ssh test@$S8_IP lsof | wc -l)
ERROR_COUNT=0
if [[ $RESULT1 || $RESULT2 || $RESULT3 || $RESULT4 || $RESULT5 || $RESULT6 || $RESULT7 -gt 50000 ]] || [[ $RESULT8 -gt 400000 ]]
then
ERRORS[$ERROR_COUNT]="AlertError"
ERROR_COUNT=$(($ERROR_COUNT+1))
fi
if [ $ERROR_COUNT -gt 0 ]
then
[email protected]
SUBJECT="Over 50,000"
BODY='Alert Server Issue'
CNT=0
while [ "$CNT" != "$ERROR_COUNT" ]
do
BODY="$BODY ${ERRORS[$CNT]}
S1:$RESULT1
S2:$RESULT2
S3:$RESULT3
S4:$RESULT4
S5:$RESULT5
S6:$RESULT6
S7:$RESULT7
S8:$RESULT8"
CNT=$(($CNT+1))
done
echo $SUBJECT
echo $BODY
echo $BODY | mail -s "$SUBJECT" -a "From: [email protected]" $EMAIL
else
echo "I can handle it
S1:$RESULT1
S2:$RESULT2
S3:$RESULT3
S4:$RESULT4
S5:$RESULT5
S6:$RESULT6
S7:$RESULT7
S8:$RESULT8"
fi
答案1
从info coreutils‘测试调用’
If EXPRESSION is a single argument, 'test' returns false if the
argument is null and true otherwise
因此,代码中以下内容的计算结果为真的。
if [[ $RESULT1 || ...
您想明确指定$RESULT1-gt 50000针对所有参数,而不仅仅是最后一个参数。
答案2
向我脱帽致敬恩科姆斯我建议这样做:
#!/bin/bash
RESULT[1]=2
RESULT[2]=4
RESULT[3]=8
RESULT[4]=16
RESULT[5]=99999
RESULT[6]=32
RESULT[7]=64
RESULT[8]=128
RESULT[9]=256
for result in ${RESULT[*]}
do
if [[ $result -gt 50000 ]]; then
echo big result $result
fi
done
一遍又一遍地重复-gt 50000
很容易出错。即使你一次做对了,如果有人过来尝试添加另一个结果会发生什么?循环更容易维护和扩展。如果你要循环遍历每个结果,为什么不把它们放到数组中呢?
如果您想将其扩展到脚本的其余部分,您也可以将 IP 地址放入数组中。