Dificuldade com if no shell script. Como fazer o if corretamente ?

1. Dificuldade com if no shell script. Como fazer o if corretamente ?

VICENTE PAULO MACIEL
vpmaciel

(usa Deepin)

Enviado em 24/05/2020 - 06:10h


#!/bin/bash

ESPACO=`df -h | awk '{print $5}' | grep -v Use | sort -nr | awk -F % '{print $1}' | head -n1`

ESPACO_INODE=`df -hi | awk '{print $5}' | grep -v IUse | sort -nr | awk -F % '{print $1}' | head -n1`

ALERTA_RISCO="O disco esta prestes ficar sem espaco por favor verificar \n\n `df -h ` \n\n `ifconfig` \n\n `uname -a`"

ALERTA_CHEIO="O disco encheu verificar com urgencia \n\n `df -h ` \n\n `ifconfig`\n\n `uname -a`"

ALERTA_RISCO_INODE="O disco esta prestes ficar sem espaco por favor verificar \n\n `df -hi ` \n\n `ifconfig` \n\n `uname -a`"

ALERTA_CHEIO_INODE="O disco encheu verificar com urgencia \n\n `df -hi ` \n\n `ifconfig`\n\n `uname -a`"

SUBJECT_1="ESPACO EM DISCO PREOCUPANTE"

SUBJECT_2="ESPACO EM DISCO ACABOU"

SUBJECT_1_I="ESPACO EM DISCO PREOCUPANTE_INODE"

SUBJECT_2_I="ESPACO EM DISCO ACABOU_INODE"

EMAIL_DST="[email protected]" # ALTERAR PARA SEU EMAIL

EMAIL_ORI="[email protected]" #ALTERAR PARA O USUARIO DO SISTEMA QUE ENVIARA

SERVER="smtp.gmail.com:587" #ALTERAR PARA O SEU SERVER

# Verifica espaco em disco

sendemail -f $EMAIL_ORI -u $SUBJECT_1 -m "$ALERTA_RISCO" -t "[email protected]" -s $SERVER -o tls=yes -xu $EMAIL_ORI -xp "20"

if ( $ESPACO >= 91 && $ESPACO <= 99 )

then

# Caso o disco esteja entre 91 a 99 ele manda um email avisando

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_1 -m "$ALERTA_RISCO" -s $SERVER

else

# Caso encha tb

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_2 -m "$ALERTA_CHEIO" -s $SERVER

fi

# Verifica espaco em disco

if ( $ESPACO_INODE >= 91 && $ESPACO_INODE <= 99 )

then

# Caso o disco esteja entre 91 a 99 ele manda um email avisando

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_1_I -m "$ALERTA_RISCO_INODE" -s $SERVER

else

# Caso encha tb

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_2_I -m "$ALERTA_CHEIO_INODE" -s $SERVER

fi



monitora_server_HD.sh: 23: Syntax error: word unexpected (expecting "then")


  


2. Estrutura basica IF

Paulo Giovani Correa de Souza
giova_ni

(usa Linux Mint)

Enviado em 24/05/2020 - 08:24h

A sintaxe básica desse condicional é:
if (condição a ser analisada)
then
(caso atendida condição, fazer a ação descrita nessa parte)
else
(caso primeira condição não seja atendida, fazer o que esta descrito nessa parte)
fi (fecha análise condicional)


Espero que tenha ajudado, não sei se consegui pois não compreendi o que vc procura. Se o problema é sintaxe ou estrutura enfimm


3. Re: Dificuldade com if no shell script. Como fazer o if corretamente ?

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 24/05/2020 - 09:48h

Errado:
if ( $ESPACO >= 91 && $ESPACO <= 99 )

Correto:
if [ "$ESPACO" -ge "91" ] && [ "$ESPACO" -le "99" ]

Obs.:
Comparações numéricas com test

[ n1 -eq n2 ] --- Verifica se n1 é "igual a" n2
[ n1 -ge n2 ] --- Verifica se n1 é "maior ou igual" a n2
[ n1 -gt n2 ] --- Verifica se n1 é "maior do que" n2
[ n1 -le n2 ] --- Verifica se n1 é "menor ou igual" a n2
[ n1 -lt n2 ] --- Verifica se n1 é "menor do que" n2
[ n1 -ne n2 ] --- Verifica se n1 é "diferente de" n2


4. Re: Dificuldade com if no shell script. Como fazer o if corretamente ?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 24/05/2020 - 20:25h

vpmaciel escreveu:


#!/bin/bash

ESPACO=`df -h | awk '{print $5}' | grep -v Use | sort -nr | awk -F % '{print $1}' | head -n1`

ESPACO_INODE=`df -hi | awk '{print $5}' | grep -v IUse | sort -nr | awk -F % '{print $1}' | head -n1`

ALERTA_RISCO="O disco esta prestes ficar sem espaco por favor verificar \n\n `df -h ` \n\n `ifconfig` \n\n `uname -a`"

ALERTA_CHEIO="O disco encheu verificar com urgencia \n\n `df -h ` \n\n `ifconfig`\n\n `uname -a`"

ALERTA_RISCO_INODE="O disco esta prestes ficar sem espaco por favor verificar \n\n `df -hi ` \n\n `ifconfig` \n\n `uname -a`"

ALERTA_CHEIO_INODE="O disco encheu verificar com urgencia \n\n `df -hi ` \n\n `ifconfig`\n\n `uname -a`"

SUBJECT_1="ESPACO EM DISCO PREOCUPANTE"

SUBJECT_2="ESPACO EM DISCO ACABOU"

SUBJECT_1_I="ESPACO EM DISCO PREOCUPANTE_INODE"

SUBJECT_2_I="ESPACO EM DISCO ACABOU_INODE"

EMAIL_DST="[email protected]" # ALTERAR PARA SEU EMAIL

EMAIL_ORI="[email protected]" #ALTERAR PARA O USUARIO DO SISTEMA QUE ENVIARA

SERVER="smtp.gmail.com:587" #ALTERAR PARA O SEU SERVER

# Verifica espaco em disco

sendemail -f $EMAIL_ORI -u $SUBJECT_1 -m "$ALERTA_RISCO" -t "[email protected]" -s $SERVER -o tls=yes -xu $EMAIL_ORI -xp "20"

if ( $ESPACO >= 91 && $ESPACO <= 99 )

then

# Caso o disco esteja entre 91 a 99 ele manda um email avisando

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_1 -m "$ALERTA_RISCO" -s $SERVER

else

# Caso encha tb

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_2 -m "$ALERTA_CHEIO" -s $SERVER

fi

# Verifica espaco em disco

if ( $ESPACO_INODE >= 91 && $ESPACO_INODE <= 99 )

then

# Caso o disco esteja entre 91 a 99 ele manda um email avisando

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_1_I -m "$ALERTA_RISCO_INODE" -s $SERVER

else

# Caso encha tb

sendEmail -f $EMAIL_ORI -t $EMAIL_DST -u $SUBJECT_2_I -m "$ALERTA_CHEIO_INODE" -s $SERVER

fi



monitora_server_HD.sh: 23: Syntax error: word unexpected (expecting "then")

Boa noite Vpmaciel.
É possível sim, testar desse modo, só faltou um "(" de cada lado ")"
(( $ESPACO_INODE >= 91 && $ESPACO_INODE <= 99 )) 

Dica para encurtar o comando:
#Mostra somente a 5ª coluna.
df --output='pcent'|sort -nr|sed '1!d'|tr -d '%'


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts