Por que esse incremento para o loop retorna uma variável ruim?

0

Estou tentando chamar este script de shell dentro da CLI do GRASS GIS:

for (( day=5; day<367; day+5 )); do
  # commands that I've tested without a loop.
done
exit 0

retorna

Syntax error: Bad for loop variable
    
por dericke 16.05.2012 / 20:32

2 respostas

2

Talvez o GRASS GIS pré-defina uma variável chamada "dia"?

O código não funciona no bash direto pelo caminho. Você não incrementa realmente o valor de "dia".

#!/bin/bash
for (( day=5; day<367; day=day+5 )); do
  # commands that I've tested without a loop.
        echo $day
done
exit 0

Isso funciona para mim, bash 2.05b em um servidor RHEL 5.0.

    
por 16.05.2012 / 20:38
5

Esta mensagem de erro vem de ash . Existem vários shells com uma sintaxe similar. Ash é relativamente básico, projetado para uma pegada de memória pequena e execução rápida. Outro shell comum é o Bash . Bash tem mais recursos. A sintaxe que você postou existe apenas no bash (e alguns outros shells, mas não ash).

Em cinza, você precisaria escrever:

day=5
while [ $day -lt 367 ]; do
  …
  day=$((day + 5))
done

Note que dependendo da distribuição do Linux, /bin/sh é ash ou bash (alguns exóticos podem usar outras implementações). Se você está escrevendo um script que usa a sintaxe bash, coloque #!/bin/bash no topo.

¹ Supondo que você quis dizer day+=5 onde escreveu day+5 , caso contrário, é um loop infinito.

    
por 17.05.2012 / 02:06

Tags