“Nenhum tal arquivo ou diretório” ao comparar números no bash

5

Estou recebendo um erro estranho.

#!/bin/bash
echo "Please enter a number"
read var
declare -i num
num=0
        while ($num<$var)
        do
                echo "$num"
        done

./ loop: linha 5: 6: não existe esse arquivo ou diretório

O que estou confundindo?

    
por peter 01.02.2017 / 18:30

1 resposta

16

(...) inicia um subshell e executa os comandos especificados dentro dele. É por isso que ($num<$var) gera essa mensagem de erro; não é possível encontrar o arquivo correspondente a $var para passar para o comando correspondente a $num .

Você provavelmente queria algo como

while (( num < var )); do
  echo "$num"
done

((...)) é uma expansão aritmética. Ele irá calcular o valor da expressão dentro. Neste caso, irá comparar os valores das duas variáveis (o $ na frente deles não é necessário aqui). Se a comparação for verdadeira, então o loop while executará mais uma iteração.

O loop while também é um loop infinito, já que você não incrementa num nem decrementa var .

No final, você pode querer tentar

for (( num = 0; num < var; ++num )); do
  echo "$num"
done

ou

for (( num = 0; num < var; ++num )); do
  printf '%d\n' "$num"
done

Se você conhece C ou uma linguagem com uma sintaxe similar a C, então você reconhecerá esse tipo de loop.

    
por 01.02.2017 / 18:35

Tags