[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
- RES: [shell-script] Variavel que some...,
Julio Cezar Neves - DATAPREVRJ <=