sábado, 26 de setembro de 2009

duvida_shell_while

Emails enviados em 27 e 28/01/2009:

André Nunes escreveu:
Verminose usuaria do linux,

Olhem o simples loop abaixo e me digam onde estah acaca:
************ ********* ***
xx=0
while ["$xx" -le 4]
do
echo "$xx\c"
xx= `expr $xx + 1`
done
echo

************ ********* **
O erro eh:
./teste.sh: line 2: [0: command not found

Gracias.

Mateus Teixeira escreveu:
Aí cabeça,

Testa esta versão do teu script:

************ ********* *******
#!/bin/bash

xx=0

while [ $xx -le 4 ]
do
echo xx $xx # o mesmo que echo "xx $xx"
let xx+=1 # o mesmo que let xx=xx+1
done

************ ********* *******

Tche, a condição para o teu WHILE deve conter espaço entre os colchetes que a cercam e a variável não precisa ficar entre aspas. Tu a colocas entre aspas quando queres imprimir o seu conteúdo juntamente com um texto qualquer. Vê que neste exemplo nem usei aspas. Com aspas duplas tens o mesmo resultado, mas com aspas simples (o.s., echo 'xx $xx') terás o texto entre elas impresso na tela. A variável não será substituída pelo seu valor.

Pelo que entendi, querias imprimir o valor do teu contador. Quando adicionei os espaços no WHILE e executei o programa, o bicho ficou rodando sem parar. Aí mudei um pouco para fazer o que querias.

O comando LET faz operações aritméticas. Como o próprio manual do BASH fala, é uma versão menos complexa do comando EXPR.

Buenas, acho que era isso!

Hasta,

André Nunes escreveu:
Grande Zeh, gracias.

Este exemplo que pus eh praticamente o mesmo do livro que tenho.
Resolvi fazer um exemplo simples porque era exatamente por
causa de um while que um script nao queria funcionar.

No script que mandei, a falta dos espacos dentro do colchetes
foi esquecimento mesmo, mas a forma como usaste o "let" eu
nunca faria. Eu jah tinha usado o "let" na forma "tradicional"(ex: let x=x+1),
mas nao funcionava.

Bom, jah que ajoelhaste: eh mesmo necessario por o "#!/bin/bash", ou
eh soh pra avisar o tipo de shell que serah executado? Eu suspeito que meu linux executa o Bourne por default, pois nunca inseriesta linha.

Ateh.

Mateus Teixeira escreveu:
Tche,

Se tu usas o Bash por padrão, então não precisas colocar, mas pensas sobre
a possibilidade de rodares este script em outra máquina que não usa o Bash como padrão. Vai dar pau. Pra evitar isso, é melhor colocar o Shel que usarás com o teu script.

Qq coisa é só gritar!

Até

Nenhum comentário:

Postar um comentário