bash:多if语句有更聪明的方法吗?

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_速率,如果其高于阈值,则发送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
上面的脚本可以根据需要工作

只是想知道是否有更聪明的方法来执行相同的功能? 因为我必须对多个变量执行相同的命令


谢谢

逻辑看起来不错,将其封装在函数中以提高灵活性

#
# $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?)变量具有不同的阈值?