[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] Status de Utilizacao do Disco
From: |
Marco Eloy |
Subject: |
RES: [shell-script] Status de Utilizacao do Disco |
Date: |
Tue, 14 Jan 2003 12:25:25 -0200 |
K´ra Nao entendi muito bem o que vc quiz dizer. Na verdade primeiro eu
utilizei o "grep+cut" mas sempre tinha que repetir o comando para poder
exibir a linha inteira, tipo:
/dev/st2 973M 486M 487M 49% /
/dev/st3 9.0G 3.0G 6.0G 33% /base
pois o cut pega uma unica lista de valores por vez e poe num vetor, o
que
me impossibilita de pegar duas listas numa unica linha de comando. Assim
tenho que executa-lo duas vezes, uma para pegar o % de uso e outra para
pegar o nome na particao o que na minha opiniao é retrabalho, por isso optei
pelo awk. Entretanto vc me passou duas informacoes que eu desconhecia:1ª awk
nao aceita variaveis shell e 2ª que ele aceita se a variavel for passada
como parametro. Tentei passar a variavel como parametro sem sucesso. Como eu
posso passar a variavel como parametro?
Em novas tentativas com a dupla grep/cut parei no mesmo ponto; execucao
dupla do mesmo comando. Vc tb acha que soh da pra fazer usando grep/cut 2
vezes? como ficaria na usa opiniao?
Sds
Marco Eloy
P.S. Recibi a resposta da brasport... Grato
-----Mensagem original-----
De: Julio Cezar Neves - DATAPREVRJ
[mailto:address@hidden]
Enviada em: terça-feira, 14 de janeiro de 2003 12:17
Para: address@hidden
Assunto: RES: [shell-script] Status de Utilizacao do Disco
Fala Eloy,
a pressa realmente é inimiga da perfeição, não reparei que vc estava usando
o awk e disse que o if estava errado, o que é mentira. Ele estaria errado
somente se vc estivesse trabalhando com Shell.
Eu sempre alerto o pessoal da lista pela mistura de awk com shell. Esta
mistura é meio complicada de administrar. O seu erro foi ter usado o $X1
(linha 35), que é uma variável do Shell, no contexto do awk. Como o awk não
consegue resolvê-la, e o que vem após o $ é um X, a interpretação que ele dá
é de $0 e a substitui pela linha completa.
Para que isso funcionasse, seria preciso chamar o awk, passando $X1 como
parâmetro. Dentro do awk, seu valor estaria preservado em ARGV[1].
Outra saída (que eu prefiro) seria tirar o awk, trabalhando com grep e cut.
Para melhorar o seu script, inclua a linha - trap "rm -f $LOG $LOG2 ; exit"
0 1 2 3 15 - após a linha 12 e exclua a 41 e 42. Tb trocaria a linha 15 por:
if [ "$1" ] ; then
X1=$1;
else
X1=80;
fi
[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070 / 9853-4044
*address@hidden
> -----Mensagem original-----
> De: Marco Eloy [mailto:address@hidden]
> Enviada em: segunda-feira, 13 de janeiro de 2003 19:30
> Para: address@hidden
> Assunto: RES: [shell-script] Status de Utilizacao do Disco
>
>
> Caro Julio como Vai?!?!?
> usei operador >(para valores numericos, correto?) pq df -h
> sempre passa como
> $5 um inteiro. Quando tento fazer comparocoes entre
> strings(df -h | tr -d %
> | awk '/\/dev/ { if( $5 -ge $X1) print "OVERLOAD: " $0 }' >>
> $LOG2) ele me
> retorna todas as linhas do comando. Sera que vc poderia dar
> uma olhada no
> script???
>
> Grato
> Marco Eloy
>
> -----Mensagem original-----
> De: Julio Cezar Neves - DATAPREVRJ
> [mailto:address@hidden]
> Enviada em: segunda-feira, 13 de janeiro de 2003 20:03
> Para: address@hidden
> Assunto: RES: [shell-script] Status de Utilizacao do Disco
>
>
> Caro Marco,
> a sua descrição foi tão precisa que nem precisei entender a lógica do
> script. O problema provavelmente deve-se ao fato de vc ter usado um
> comparador de strings (>). Para comparar numericamente, usa-se:
>
> -eq = igual (equal)
> -ne = diferente (not equal)
> -lt = menor (less than)
> -le = menor ou igual (less or equal)
> -gt = maior (greater than)
> -ge = maior ou igual (greater or equal)
>
> Para testar faça:
>
> a=1
> [ $a = 01 ] && echo verdadeiro 1
> [ $a = 1 ] && echo verdadeiro 2
> [ $a -eq 01 ] && echo verdadeiro 3
> [ $a -eq 1 ] && echo verdadeiro 4
>
> Neste teste, vc não deverá obter o verdadeiro 1 pq comparados
> como string,
> os 2 são diferentes.
>
> [ ]s,
> Julio Cezar Neves
> -Eu Apoio o Software Livre-
> -I Support Free Software-
> * +55 21 2528-7070 / 9853-4044
> *address@hidden
>
>
> > -----Mensagem original-----
> > De: Marco Eloy [mailto:address@hidden]
> > Enviada em: segunda-feira, 13 de janeiro de 2003 18:23
> > Para: Shell Script
> > Assunto: [shell-script] Status de Utilizacao do Disco
> >
> >
> > Hello, Pessoal, como vao?
> > Criei um script que checa quais os sistemas de arquivos
> > ultrapassaram uma
> > determinada cota de utilizacao estipulada a principio em 80%
> > e me avisa por
> > e-mail se isto ocorreu(como pode ser visto na linha 35). Ha
> > alguns dias
> > surgiu a necessidade dessa cota ser informada via parametro.
> > Alterei entao a
> > linha 35 para a 36. Entretanto o comando sempre lista todos
> > os sistemas de
> > arquivos e nao os que ultrapassaram a cota $1. Isto ocorre
> > porque dentro da
> > comparacao (if $5 > $X1) ele compara o percentual de
> > utilizacao($5) com a
> > string $X1 e nao com o VALOR da string $X1 que seria $1.
> > Alguem ja teve algum problema parecido? Serah que o if nao
> > pode ser usado
> > com variaveis, e sim soh com valores numericos?
> > O Script Segue logo abaixo.
> >
> > Desde jah agradeco qualquer ajuda
> >
> > Sds
> > Marco Antonio Eloy
> > Analista de Suporte/Adm. de TI
> > Brespel - Cia. Indal Brasil Espanha
> > 55 75 422-2014/422-2712
> >
> >
> > --------------------------------------------------------------
> > ------------
> > 1 #!/bin/bash
> > 2 # Script de Status dos Sistemas de Arquivos
> > 3 # Executando de hora em hora
> > 4 # Criado dia 09-Jan-2003
> > 5 # Design by Eloy
> > 6 #
> > 7 PATH=/sbin:/usr/sbin:/bin:/usr/bin:usr/local/bin
> > 8 export PATH
> > 9 prog=`basename $0`
> > 10 maquina=`hostname`
> > 11 LOG=/var/log/$prog-$$.log
> > 12 LOG2=/var/log/$prog-$$.log2
> > 13 DATA=`date +%A,%d-%b-%Y`
> > 14 HORA=`date +%H:%M:%S`
> > 15 if [ "$1" = "" ] ; then
> > 16 X1=80;
> > 17 else
> > 18 X1=$1;
> > 19 fi
> > 20 cat <<EOF > $LOG
> > 21 A L E R T A D E O V E R L O A D
> > 22
> > 23
> > 24 Alguns Dispositivos Excederam a
> > Cota de $X1%
> > 25
> > 26 Isto Pode Ser Causado por VIRUS, Inprudencia
> > de Alguns Usuarios ou
> > Problemas
> > 27
> > 28 Pertinentes ao SO. Check o Log Abaixo
> > Para Obter Mais
> > Detalhes.
> > 29
> > 30 Maquina: $maquina
> > 31 FsCheck Executando em $DATA às $HORA
> > 32 ---------------------------
> > 33 EOF
> > 34
> > 35 #df -h | tr -d % | awk '/\/dev/ { if($5 > 80)
> > print "OVERLOAD: "
> > $0 }' >> $LOG2
> > 36 df -h | tr -d % | awk '/\/dev/ { if($5 > $X1)
> > print "OVERLOAD: "
> > $0 }' >> $LOG2
> > 37 if [ -s $LOG2 ]; then
> > 38 cat $LOG2 >> $LOG
> > 39 mail -s "AVISO: OVERLOAD EM $maquina" adm-cpd < $LOG
> > 40 fi
> > 41 rm -f $LOG
> > 42 rm -f $LOG2
> >
> >
> >
> >
> ---------------------------------------------------------------------
> > Esta lista não admite a abordagem de outras liguagens de
> > programação, como perl, C etc. Quem insistir em não seguir
> > esta regra será moderado sem prévio aviso.
> >
> ---------------------------------------------------------------------
> > Sair da lista: address@hidden
> >
> ---------------------------------------------------------------------
> > Esta lista é moderada de acordo com o previsto em
> http://www.listasdiscussao.cjb.net
> ---------------------------------------------------------------------
>
>
> Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
> http://br.yahoo.com/info/utos.html
>
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de
> programação, como
> perl, C etc. Quem insistir em não seguir esta regra será
> moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listasdiscussao.cjb.net
> ---------------------------------------------------------------------
>
>
> Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
> http://br.yahoo.com/info/utos.html
>
>
>
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de
> programação, como perl, C etc. Quem insistir em não seguir
> esta regra será moderado sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html