while loop no bash scripting

0

Meu código é:

#!/bin/bash

while true; do

    COUNTER=$((COUNTER +1))     
    echo $COUNTER

    if (($COUNTER%3 == 0));  then
        echo "Counter now is 3"
        sleep 2
    fi

    if (($COUNTER%6 == 0));  then
        echo "Counter now is 6"
        sleep 2
    fi

    if (($COUNTER%9 == 0));  then
        echo "Counter now is 9"
        sleep 2
    fi

    if (($COUNTER%12 == 0));  then
        echo "Counter now is 12"
        sleep 2
    fi

    if (($COUNTER%15 == 0));  then
        echo "Counter now is 15"
        sleep 2
        exit
    fi

done

e minha saída é:

./test2.sh 
1
2
3
Counter now is 3
4
5
6
Counter now is 3
Counter now is 6
7
8
9
Counter now is 3
Counter now is 9
10
11
12
Counter now is 3
Counter now is 6
Counter now is 12
13
14
15
Counter now is 3
Counter now is 15

Por que ele está sempre aparecendo Counter now is 3 ou algum tempo mais em echo . Eu não quero mostrar mais em echo

    
por Mehran 05.04.2018 / 10:56

2 respostas

1

Seria mais correto se seus resultados dissessem o que o teste correspondente testou, por exemplo

if (( COUNTER%3 == 0 )); then
    echo 'COUNTER is a multiple of 3'
fi

Este é o teste que você tem, e se você pensar sobre isso, 6, 9, 12 e 15 também são múltiplos de 3.

Neste script curto, sugiro que você teste diretamente em COUNTER em vez de em COUNTER%somevalue se quiser verificar o valor real do contador em vez de ser um múltiplo de algum valor:

if (( COUNTER == 3 )); then
    echo 'COUNTER is 3'
fi

Observe que $ não é necessário em variáveis quando elas são usadas em um contexto aritmético.

    
por 05.04.2018 / 11:18
0

Porque a saída é uma mentira.

  • O que é produzido quando diz "contar é ..."?
  • Qual seria um texto melhor que "Contagem é"?
  • Onde echo conta? (faça com que echo count seja…)

Depois de consertar isso, você deve entender o que está fazendo.

    
por 05.04.2018 / 11:40