acessa todos os membros da matriz em um loop [closed]

0

Tenho andado a brincar com scripts ultimamente. Escrevi este com a ajuda do @Cas

#!/bin/bash


## Variables ##

host="'/bin/hostname'";


    ## Limits ##

OneMin="1";
FiveMin="6";
FifteenMin="6";

    ## Mail IDs ##

To="[email protected], [email protected]";
Fr="root@"$host;


    ## Load Averages ##

LA=('uptime | grep -Eo '[0-9]+\.[0-9]+' | cut -d"." -f1')


    ## Top Process List ##

tp=('ps -ef | sort -nrk 3,3 | grep -E "(php|httpd)" | grep -v root | head -n30 | awk '{print $2}'')


## Actions ##

if [ ${LA[0]} -ge $OneMin ]; then


    ## Send Mail ##

echo -e "From: $Fr
To: $To
Subject: *ALERT* - Current Load on '$host' Is High
Load Averages Are:  \n\n
1:Min\t5:Min\t15:Min   \n
${LA[0]}\t${LA[1]}\t${LA[2]}  \n\n

List Of Processes That Were Killed \n" | sendmail -t


    ## Kill Top Pocesses ##


for i in $tp ; do
    kill -9 $i
done



fi

Eu não tenho certeza se esse array funciona, especialmente a última parte, onde eu adicionei um loop para matar os principais processos .. porque ele não imprime lista de processos nesse email. Eu não tenho idéia do porquê. Mas o script não dá nenhum erro ..

OK ## WORKAROUND ##

Por falar nisso, isso funcionaria?

#!/bin/bash


## Variables ##

host="'/bin/hostname'";


    ## Limits ##

OneMin="7";
FiveMin="6";
FifteenMin="6";


    ## Load Averages ##

LA=('uptime | grep -Eo '[0-9]+\.[0-9]+' | cut -d"." -f1')



## Actions ##


    ## One Minut Action ##

if [ ${LA[0]} -ge $OneMin ]; then


    ## Send Mail ##

echo -e "From: $Fr
To: $To
Subject: *ALERT* - Current Load on '$host' Is High
Load Averages Are:  \n\n
1:Min\t5:Min\t15:Min   \n
${LA[0]}\t${LA[1]}\t${LA[2]}  \n\n

List Of Processes That Were Killed \n
'ps -ef | sort -nrk 3,3 | grep -E "(php|httpd)" | grep -v root | head -n30 | awk '{print $2}''" | sendmail -t


    ## Kill Top Pocesses ##


for i in 'ps -ef | sort -nrk 3,3 | grep -E "(php|httpd)" | grep -v root | head -n30 | awk '{print $2}'' ; do
    kill -9 $i
done


fi

Quero dizer, isso mataria todos os PiDs?

    
por Sollosa 11.03.2018 / 17:08

1 resposta

3

O problema é que tp=(... define uma matriz, mas $tp referencia apenas o primeiro elemento da matriz.

Você precisa

for i in "${tp[@]}" ; do
    
por 11.03.2018 / 17:46