[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
Re: [shell-script] o qual é o erro????, Miranda, 2004/02/17