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

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

Re: [shell-script] o qual é o erro????


From: Thobias Salazar Trevisan
Subject: Re: [shell-script] o qual é o erro????
Date: Tue, 17 Feb 2004 17:45:36 -0300 (BRT)

ae,

On Tue, 17 Feb 2004, lynnkarllo2002 wrote:

> #!/bin/bash
> total=0
> ls -la /tmp | while read linha
> do
> var=`echo $linha | awk '{print $7}'`
> total=`echo "scale=2;${var}" + "${total}"|bc`
> done
> echo ${total}

tem alguns problemas esse teu script:

primeiro: ls -la /tmp
a primeira linha é o 'total X'

$ ls -la /tmp | sed -n 1p
total 168

segundo:

$ ls -la /tmp/ | awk '{print $7}'

17:13
09:41
...

$ echo "scale=2;17:13 + 0"|bc
(standard_in) 1: illegal character: :
(standard_in) 1: parse error

tem certeza que é a hora que você quer ?

terceiro:

aquele teu total sempre vai ter o valor inicial (aquele que tu
define antes do while. quem tá 'fazendo' isso é aquele pipe:

ls -la /tmp | while read linha

o pipe pega conecta a saída padrão de um comando com a
entrada padrão do outro. mas o segundo comando, no caso o
while, é executado num subshell, ou seja, quando o while
termina, tu vai perder o valor da variável total. quer ver.
exemplo de um contador:

#!/bin/bash
total=99
ls -la /tmp | while read linha
do
        total=$((total+1))
        echo $total
done
echo "total final $total"

$ ./teste
100
101
102
103
104
105
total final 99

para resolver tu pode gerar um arquivo com o total (dentro do
while) e depois ler este arquivo ou eliminar o while, gravando a
saída do comando ls -la /tmp num arquivo:

ls -la /tmp > arquivo

while read linha;do
...
done < arquivo

falou!

thobias
-------
echo 133449562074222244746332132269002206986P | dc
-------
http://thobias.org



reply via email to

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