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

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

RES: [shell-script] Variavel que some...


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Variavel que some...
Date: Wed, 25 Aug 2004 12:42:30 -0300

Fala Fernando,
o que ocorreu é que vc executou o seu while em um subshell provocado pelo
pipe (|). Como as variáveis de um subshell não são xportadas para o pai, vc
as perdeu.

Com o for vc recupera a variável, mas nem precisa mudar o IFS. Basta expor a
lista ao shell (sem aspas) que ele se incumbe de transformar os caracteres
new line em espaço. Veja esta construção:

Prompt> echo "$lista"
a
aaas
arq
arq1
arq2
arq_final
arql
arquivo
a.sh

Como vc pode ver a lista é a saída do comando "ls a*" e está separada por
new-line. Agora o script:

for file in $lista
do
    let total+=`du -b $file | cut -f1`
done
echo $total
36864

Com o cmd let chamei o módulo aritmético do Bash (vale tb no ksh) por pura
preguiça de escrever (e por isso estou escrevendo toda esta explicação :).

Ainda tem mais uma coisa que vc deve prestar a atenção. Observe as linhas
abaixo:

Prompt> wc -c $file
    845 a.sh
Prompt> du -b $file
4096    a.sh
Prompt> ls -l a.sh
-rwxr-xr-x    1 jneves   jneves        845 Feb 24  2003 a.sh

Repare que o arquivo a.sh tem efetivamente 845 bytes. O du te devolve a qtd
total de bytes alocados nos blocos do arquivo e sempre será múltiplo de 512
(tamanho do bloco).

[ ]s,
Julio Cezar Neves
- Gerente do Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden


| -----Mensagem original-----
| De: Fernando Lemes da Silva [mailto:address@hidden]
| Enviada em: terça-feira, 24 de agosto de 2004 17:26
| Para: address@hidden
| Assunto: [shell-script] Variavel que some...
| 
| 
| 
|     Pessoal.. em um script estou pegando uma variavel que contém uma 
| lista de arquivos (um por linha). Quero somar a quantidade de 
| bytes que 
| eles ocupam, entao fiz:
| 
| 
| echo "$lista" |
| while read file; do
|      total=$[ $total + `du -b "$file" | cut -f1` ]
| done
| 
| 
|     Porém a variavel $total sai "limpa" depois do loop.. já 
| fiz testes, 
| e enquanto o laço está rodando a variavel mantém seu valor e 
| tudo ocorre 
| dentro do esperado.. é só sair do laço que "puft".. some... heheheh
| 
|     Desta maneira funcionou:
| 
| 
| IFS='
| '
| for file in $lista; do
|      total=$[ $total + `du -b "$file" | cut -f1` ]
| done
| 
| 
|     Alguem saberia me dizer o porque ? Aproveito para agradecer ao 
| Aurelio pela apostila de dialog.. realmente bastante instrutivo.. :)
| 
| 
| -- 
|     /**********************************************
|          _     Fernando Lemes da Silva
|         °v°    www.koho.com.br
|        /(¡)\   Linux user #address@hidden
|         ^ ^    lICQ UIN 2371843
|     echo 396752965710071000896145190854552842P | dc
|     **********************************************/
| 
| 
| 
| ---------------------------------------------------------------------
| 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




 
 


reply via email to

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