读取两个数字的 Bash 脚本

问题描述 投票:0回答:1

我正在尝试读取设备上 snmpwalk 的输出,如下所示(四种不同的变体)

场景 1 - 打印正常 输出:

6
6

场景 2 - 打印待机

输出:

6
5

场景 3 - 打印正常

输出:

6

场景 4 - 打印待机

输出:

5

我成功地将场景 3 和 4 与以下脚本匹配。但无法匹配场景 1 和 2。

if [ ${Ouput} -eq 6 ]; then
        echo "OK"
        exit 0
elif [ ${Ouput} -eq 5 ]; then
        echo "Standby"
        exit 1
fi

有人可以帮助我如何在 elsif 语句中匹配场景 1 和 2 吗?

我成功地将场景 3 和 4 与以下脚本匹配。但无法符合场景 1 和 2。

if [ ${Ouput} -eq 6 ]; then
        echo "OK"
        exit 0
elif [ ${Ouput} -eq 5 ]; then
        echo "Standby"
        exit 1
fi

场景 1 - 打印正常 输出:

6
6

场景 2 - 打印待机

输出:

6
5
bash
1个回答
0
投票

看来你只需要测试输出的最后一行。

  1. 您可以将
    tail -n 1
    通过管道传输到您的
    snmpalk
    命令:
Ouput=$(snmpwalk ... | tail -n 1)
  1. 或者您可以通过参数扩展“隐藏”除最后一行之外的所有行:
#!/bin/bash

Ouput=$(snmpwalk ...)

case ${Output##$'\n'} in
    6) echo "OK";      exit 0;;
    5) echo "Standby"; exit 1;;
esac

注意:我用

case
开关替换了if条件

© www.soinside.com 2019 - 2024. All rights reserved.