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

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

Re: [shell-script] Questão de BashScript


From: Reinaldo Carvalho
Subject: Re: [shell-script] Questão de BashScript
Date: Fri, 13 Jan 2006 17:59:28 -0300

Posso tentar dar algumas dicas...

2006/1/13, Tiago Barcellos Peczenyj <address@hidden>:
> Ola,
>
> para um recente treinamento, formulei esta questão - ao meu ver bem
> interessante. Qual a minha surpresa ao ver que ninguem a respondeu -
> nem ao menos tentaram.
>
> Gostaria do feedback de vcs, está REALMENTE complicada ? Me sinto mal
> com esta situação, eu apenas gostaria de ver alguns dos meus alunos
> tentando responder, mesmo q errassem
>
> Questão número 2)
> Suponha um arquivo de resultados neste formato:
> Device:STARDUST
> Date:20051012
> Version:0.3.2.1.44.5
> OS:HP-UX
> Test 01 OK
> Test 02 OK
> Test 03 OK
> Test 04 OK
> Test 05 OK
> Test 06 Fail
> Test 07 OK
> Test 08 OK
> Test 09 Fail - Warning
> Test 10 OK
> Test 11 OK
> Test 99 Fail
>
> Este arquivo é gerado por algum aplicativo de testes. É necessário
> converter este dado arquivo para um REPORT no formato:
>
> STARDUST;20051012;0.3.2.1.44.5;HP-UX;
> Total OK: 9
> Total Fail: 3
> Total Warning: 1
>
> Para isto, temos este pequeno script:
>
> #!/bin/bash
> [ "$1" ] || { echo "Uso: $0 arquivo" ; exit 1 ; }
> file=$1
> egrep '(Device|Date|Version|OS)' ${file} | cut -d':' -f2 | tr '\n' ';'
> echo
> for i in OK Fail Warning; do
> echo "Total ${i}: $(grep -c $i ${file})"
> done
>
> Perguntas (responda em alto nível com exemplos em BASH):
> a)      Como executar este script para TODOS os arquivos de resultado
> existentes em um dado diretório e gerar um REPORT com todos os
> resultados – um após o outro ?

tas pedindo pra pessoa re-escrever o script ou só usar um "for"?

Acho que a dificuldade maior é na assimilação do cenário do problema,
ler uma entrada, depois gerar um saída. Apesar de você tentar imitar a
realidade das solicitações, isso é muito complicado para quem não tem
experiência no assunto. Tente ser mais direto nas questões.

Não pergnte! mande fazer mais claramente, tipo assim:
a)  Como executar este script para TODOS os arquivos de resultado
existentes em um dado diretório e gerar um REPORT com todos os
 resultados – um após o outro ?

a1) Faça um script que aceite como parametro, um diretório, e para
cada arquivo dentro deste diretório, execute o script indicado na
questão.

#!/bin/bash
[ "$i" -a -d "$i" ] &&  || { echo "Uso: $0 diretorio" ; exit 1 ; }
for i in $(ls $1) ; do script $i ; done

a2) Modifique o script indicado na questão para que aceite um
diretório como primeiro argumento; assim como, execute uma rotina que
gere o REPORT para cada arquivo dentro desse diretório.

#!/bin/bash
[ "$i" -a -d "$i" ] &&  || { echo "Uso: $0 diretorio" ; exit 1 ; }

report () {
file=$1
egrep '(Device|Date|Version|OS)' ${file} | cut -d':' -f2 | tr '\n' ';'
echo
for i in OK Fail Warning; do
echo "Total ${i}: $(grep -c $i ${file})"
done
}

for i in $(ls $1) ; do
  report $i
done

> b)      Como encontrar, dentro desse diretório, qual a versão (ou versões)
> com o maior número de resultados 'OK' ?

b) Faça um script que, para cada arquivo dentro de um diretório (que
será obtido como argumento), conte o número de OK's, e mostre o campo
"versão" do arquivo que tenha mais OK's.

Acho que eles teriam dificuldade se mais de um arquivo tiver o mesmo
número de máximo OK's.

> c)      Como vc poderia executar o script que gera o REPORT, ignorando as
> mensagens de erro que são escritas na STDERR ?

report.sh 2> /dev/null

seria isso?

tente colocar o nome do script no código, para posterior referência:
#!/bin/bash
# report.sh
[ "$i" -a -d "$i" ] &&  || { echo "Uso: $0 diretorio" ; exit 1 ; }

report () {
...


>
> --
> ------------------------------
> Tiago B Peczenyj
> Linux User #405772
>
>
> ---------------------------------------------------------------------
> 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
>
>
>
>
>
>


--
Reinaldo Carvalho
Debian Sarge 3.1 - Linux User: #238310
Prodepa - address@hidden

reply via email to

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