bash:多if语句有更聪明的方法吗?
我使用了多个if语句来查询CDR_速率,如果其高于阈值,则发送SNMP陷阱。如果是新陷阱,请创建一个报警标志(CDR_PUSH_a)&发送SNMP陷阱。 当脚本再次运行且阈值仍处于交叉状态且标志已设置时。不要再发送陷阱 如果阈值已清除且该标志存在,请删除该标志并发送清除snmp陷阱。 如果没有跨过门槛,什么也不做bash:多if语句有更聪明的方法吗?,bash,if-statement,Bash,If Statement,我使用了多个if语句来查询CDR_速率,如果其高于阈值,则发送SNMP陷阱。如果是新陷阱,请创建一个报警标志(CDR_PUSH_a)&发送SNMP陷阱。 当脚本再次运行且阈值仍处于交叉状态且标志已设置时。不要再发送陷阱 如果阈值已清除且该标志存在,请删除该标志并发送清除snmp陷阱。 如果没有跨过门槛,什么也不做 if [[ $CDR_PUSH -gt 100 && ! -e $DIR5/CDR_PUSH_A ]]; then touch $DIR5/CDR_PUSH
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
上面的脚本可以根据需要工作
只是想知道是否有更聪明的方法来执行相同的功能?
因为我必须对多个变量执行相同的命令
谢谢逻辑看起来不错,将其封装在函数中以提高灵活性
#
# $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"
将代码分成小块,如下所示:
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
}
然后,您可以使用事件名称、值和阈值参数化
检查\u的警报()
。只是一个想法-如果CDR\u PUSH正好是100,您不会做任何事情…我知道,我在查看它时也这么想。我将其中一个改为-le或-ge。有多少个变量?(对于上下文,哪个MIB?)变量具有不同的阈值?