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: Jorge Pereira
Subject: Re: Re:[shell-script] criar um arquivo com o log das instalaçoes
Date: Thu, 14 Jul 2005 07:51:56 -0300
User-agent: Internet Messaging Program (IMP) 3.2.4

iiiiiiiiiiiiiiii MrBits, que host de baitola da porra.
[MrBiTs@gatinha MrBiTs]$

gatinha?
ihhhhhhhhhhhhh
pederastia na lista acho que não vale!!!

Citando MrBiTs <address@hidden>:

> /*
> 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
>
>
>
>
>
>
>
>


--
Jorge Pereira
Sitio: http://www.jorgepereira.com.br/
Fone: +55 (81) 8833-2484
___________________________________________________________________________________
Participe das duas promoções incríveis do Click 21: 
Mergulhou Ganhou e 21 na Copa. Cadastre-se já.
www.click21.com.br/mergulhouganhou/
www.21nacopa.com.br



reply via email to

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