AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 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

Script Bash OU problema

  • 772

Eu tenho o script abaixo e basicamente o que eu quero fazer é conectar-se aos vários servidores. Veja quantos arquivos abertos existem e envie um e-mail se for superior a 50.000. Mas o último servidor que preciso desse cheque é de mais de 400.000. Eu tenho um problema com o OR que não está funcionando.

Se eu executar este script atual como está, recebo o e-mail de alerta, mesmo que nenhum dos limites tenha sido atingido. Por favor, ajude-me com a minha declaração OR.

Minha saída na linha de comando mostra:

Alert Server Issue 
AlertError S1:6326 S2:6355 S3:6242 S4:7171 S5:4694 S6:5284 S7:3973 S8:308432

O roteiro:

#!/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 respostas
  • 89 Views

2 respostas

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

    De info coreutils 'invocação de teste'

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

    portanto, ter o seguinte em seu código é avaliado como true .

    if [[ $RESULT1 || ...
    

    Você deseja especificar explicitamente $RESULT1 -gt 50000 para todos os argumentos e não apenas para o último.

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

    Tirando o chapéu para o nkms , sugiro o seguinte:

    #!/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
    

    Repetir -gt 50000uma e outra vez é propenso a erros. Mesmo que você acerte uma vez, o que acontece quando alguém chega e tenta adicionar outro resultado? Um loop é mais fácil de manter e dimensionar. E se você for percorrer cada um dos resultados, por que não colocá-los em uma matriz?

    Se você quiser estender isso para o restante do seu script, também pode colocar seus endereços IP em uma matriz.

    • 3

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve