我使用多个if语句来查询CDR_Rate,如果它高于阈值则发送SNMP陷阱。如果是新陷阱,请创建警报标志(CDR_PUSH_A)&发送SNMP陷阱。 当脚本再次运行并且仍然超过阈值并且已经设置了标志。不要发送另一个陷阱。
如果阈值已清除且标志存在,请删除该标志并发送清除snmp陷阱。 如果没有越过阈值则什么都不做。
if [[ $CDR_PUSH -gt 100 && ! -e $DIR5/CDR_PUSH_A ]]; then
touch $DIR5/CDR_PUSH_A;
echo "Send Trap"
elif [[ $CDR_PUSH -lt 100 && -e $DIR5/CDR_PUSH_A ]]; then
rm $DIR5/CDR_PUSH_A;
echo "Clear Trap"
else
echo "No Alert"
fi
上述脚本可根据需要运行。
只是想知道是否有更聪明的方法来执行相同的功能? 因为我必须为多个变量执行相同的命令。
由于
答案 0 :(得分:1)
逻辑看起来没问题,将其包装在一个灵活的函数中
#
# $1 = CDR_rate
# $2 = threshold value
# $3 = flag file
#
check_thresh()
{
if [[ $1 -gt $2 && ! -e $3 ]]; then
touch -- "$3"
echo "Send Trap"
elif [[ $1 -le $2 && -e $3 ]]; then
rm -- "$3"
echo "Clear Trap"
else
echo "No Alert"
fi
}
check_thresh "$CDR_PUSH" 100 "$DIR5/CDR_PUSH_A"
check_thresh "$something" 50 "$DIR6/something_Z"
答案 1 :(得分:1)
以较小的块分解您的代码,如下所示:
threshold_exceeded() {
[[ $CDR_PUSH -gt 100 ]]
}
clear_trap() {
rm $DIR5/CDR_PUSH_A
echo "Clear Trap"
}
send_trap() {
touch $DIR5/CDR_PUSH_A
echo "Send Trap"
}
was_trap_sent_before() {
[[ -e $DIR5/CDR_PUSH_A ]]
}
check_for_alert() {
if threshold_exceeded; then
was_trap_sent_before || send_trap
return
fi
if ! threshold_exceeded; then
was_trap_sent_before && clear_trap
return
fi
}
然后,您可以使用事件名称,值和阈值参数化check_for_alert()
。