AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 742836
Accepted
jaseUK
jaseUK
Asked: 2015-12-15 01:37:46 +0800 CST2015-12-15 01:37:46 +0800 CST 2015-12-15 01:37:46 +0800 CST

Bash 脚本或问题

  • 772

我有以下脚本,基本上我想要它做的是连接到各种服务器。查看有多少打开的文件,如果超过 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
linux
  • 2 2 个回答
  • 89 Views

2 个回答

  • Voted
  1. Best Answer
    nkms
    2015-12-15T01:59:22+08:002015-12-15T01:59:22+08:00

    来自info coreutils '测试调用'

    If EXPRESSION is a single argument, 'test' returns false if the
    argument is null and true otherwise
    

    因此,在您的代码中包含以下内容的计算结果为true。

    if [[ $RESULT1 || ...
    

    您想为所有参数显式指定$RESULT1 -gt 50000而不仅仅是最后一个参数。

    • 4
  2. chicks
    2015-12-15T08:41:29+08:002015-12-15T08:41:29+08:00

    我向nkms脱帽致敬,我会建议以下内容:

    #!/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 地址放入一个数组中。

    • 3

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve