shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re:[shell-script] criar um arquivo com o log das instalaçoes


From: marcosrumme
Subject: Re: Re:[shell-script] criar um arquivo com o log das instalaçoes
Date: Thu, 14 Jul 2005 11:42:03 -0300

caramba.....
q putz AULA!!!! Valeu mesmo cara... vai me ajudar muito aqui ( e dar um 
trabalhao...)
MUITO OBRIGADO     MrBits!!!
[]s
marcos




  ----- Original Message ----- 
  From: MrBiTs 
  To: shell-script 
  Sent: Thursday, July 14, 2005 7:41 AM
  Subject: Re: Re:[shell-script] criar um arquivo com o log das instalaçoes


  /*
  entao emerson e todo pessoal .... é +/- isso q eu precisava sim , mas 
acontece q aqui , nesse caso po ex, seu tenho o script abaixo:

  mkdir teste
  mkdir teste
  tar zxvf teste.tar.gz
  depois eu checo o log e ele so mostra os arquivos extraidos pelo "tar" , mas 
nao mostra as linhas de comandos . enquanto ta sendo o tar",beleza, sabemos q é 
referente a descompactaçao mas e se é dos mkdir ,chmod, como vamos saber o erro?
  seria legal se o LOG apresentasse a linha decomando , e a sua saida no caso, 
isso é possivel?
  */

  Não pergunte se é possível. Pergunte COMO fazer :)

  Eu consigo imaginar uma dúzia de jeitos.

  - Verbose de comandos
  Praticamente TODOS os comandos possuem um modo de verbose, que emite as 
mensagens de sucesso ou erro dos comandos, bem como outras informações úteis 
para debug de aplicações. Senão vejamos, utilizando um exemplo seu. O primeiro 
passo é verificar se o comando em questão possui uma opção de verbose:

  $ mkdir --help
  Usage: mkdir [OPTION] DIRECTORY...
  Create the DIRECTORY(ies), if they do not already exist.
  Mandatory arguments to long options are mandatory for short options too.
    -m, --mode=MODE   set permission mode (as in chmod), not rwxrwxrwx - umask
    -p, --parents     no error if existing, make parent directories as needed
    -v, --verbose     print a message for each created directory
        --help     display this help and exit
        --version  output version information and exit

  Opa ! -v ou --verbose. Então vamos fazer:

  $ mkdir -v teste
  mkdir: cannot create directory `teste': File exists
  $ mkdir -vvv teste2
  mkdir: created directory `teste2'

  Aí está: uma mensagem de erro e uma mensagem de sucesso.
  Isso tudo irá para o seu log. Ainda é possivel brincarmos com algo como 
colocar a data e hora da execução do comando, emitindo echos como:

  [MrBiTs@gatinha MrBiTs]$ echo -n "[$(date +%d/%m/%Y\ %H:%M:%S)] " && mkdir -v 
teste2
  [14/07/2005 07:14:25] mkdir: cannot create directory `teste2': File exists

  Você pode extrapolar tudo isso e inserir uma variavel $DEBUG em sua aplicação 
e, caso o seu script seja execuatado com uma opção -v ( por exemplo), voce 
configuraria DEBUG="-v" e, uma vez que você já tem em todos os comandos uma 
chamada como:

  mkdir $DEBUG teste
  chmod $DEBUG 777 teste

  uma vez o modo debug ativado, você teria em seu log principal todas as 
mensagens de todos os comandos.

  - set -x

  set -x é uma opção interessante já que mostrará a linha de comando antes de 
sua execução. Então, imaginando o nosso script, teremos:

  $ cat d.sh
  #!/bin/bash
  set -x
  mkdir -v teste
  chmod -v 777 teste

  $ ./d.sh
  + mkdir -v teste
  mkdir: cannot create directory `teste': File exists
  + chmod -v 777 teste
  mode of `teste' changed to 0777 (rwxrwxrwx)

  - Funções de tratamento de erro

  TODO e QUALQUER COMANDO executado em shell vai ter o seu código de retorno 
armazenado em uma variável especial chamada $?, que pode ser utilizada em 
testes. No nosso exemplo:

  $ mkdir -v teste
  mkdir: cannot create directory `teste': File exists
  $ echo $?
  1

  $ chmod -v 777 teste
  mode of `teste' changed to 0777 (rwxrwxrwx)
  $ echo $?
  0

  Vimos aí que um retorno 0 significa sucesso, enquanto um retorno DIFERENTE de 
zero significa erro. Podemos então extrapolar nosso script para fazer algo como:

  $ cat d.sh
  #!/bin/bash
  set -x
  mkdir -v teste
  if [ $? -gt 0 ] ; then
          echo "Erro na criação do Diretório teste"
          exit
  fi
  chmod -v 777 teste

  E executando-o:

  $ ./d.sh
  + mkdir -v teste
  mkdir: cannot create directory `teste': File exists
  + [ 1 -gt 0 ]
  + echo Erro na criação do Diretório teste
  Erro na criação do Diretório teste
  + exit

  Veja que interessante. Como definimos que a não criação de um diretório é um 
erro crítico, abortamos a aplicação e NÃO EXECUTAMOS o chmod. 

  Uma modificação do script seria:

  $ cat d.sh
  #!/bin/bash
  set -x
  if ! mkdir -v teste ; then
          echo "Erro na criação do Diretório teste"
          exit
  fi
  chmod -v 777 teste

  Executando-o:

  $ ./d.sh
  + mkdir -v teste
  mkdir: cannot create directory `teste': File exists
  + echo Erro na criação do Diretório teste
  Erro na criação do Diretório teste
  + exit

  Mesmo conceito e erros que o script anterior, mas agora não testamos a 
variavel $? explicitamente e sim executamos diretamente o comando dentro da 
condição if. 

  Acho que a partir daí você já tem condições de escrever códigos com bastante 
mensagens e depurações e, até mesmo, criar uma biblioteca de funções só para 
depuração de erros. Eu tenho a minha :). 

  Uma dica que dou a todos os meus alunos é que acessem os diretórios /bin e 
/usr/bin e executem cada um dos comandos com a opção --help, pelo menos para 
conhecer as opções que cada ferramenta disponível no sistema tem. Como isso é 
um trabalho chato, faça isso pelo menos com os comandos que você vai usar em 
seu script, obviamente entendendo o que cada parametro faz. Desde que você não 
esteja executando tudo como root, os riscos de você danificar seu sistema são 
bem pequenos.


  [As partes desta mensagem que não continham texto foram removidas]



  ---------------------------------------------------------------------
  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.listas-discussao.cjb.net
  ---------------------------------------------------------------------




------------------------------------------------------------------------------
  Links do Yahoo! Grupos

    a.. Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/shell-script/
      
    b.. Para sair deste grupo, envie um e-mail para:
    address@hidden
      
    c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço 
do Yahoo!. 



[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]