Come posso uscire da BASH mentre eseguo il loop usando l'operatore modulo?


4

Quindi praticamente per il mio incarico ho bisogno di uscire da un vero ciclo while quando l'utente inserisce un numero che fornisce un resto del modulo pari a 0, es: (25% 5 = 0 break loop ) Dove nel mio tentativo di seguito ho sbagliato?

while true
do
    echo "Please input anything here: "
    read INPUT

    if [ `expr $INPUT % 5` -eq 0 ]; then
        echo "you entered wrong"
    else
        echo "you entered right"
        break
fi
done

2
Se il compito specifica bash, allora potresti prendere in considerazione l'uso della sintassi di espansione aritmetica integrata, ad es.(( INPUT % 5 == 0 ))
steeldriver

il loop non termina quando si inserisce 25 @steeldriver
Roosevelt Mendieta il

Risposte:


7

Spostare breakdalla elseparte alla ifparte:

#!/bin/bash

while true
do
    echo "Please input anything here: "
    read INPUT

    if [ `expr $INPUT % 5` -eq 0 ]; then
        echo "you entered wrong"
        break
    else
        echo "you entered right"
    fi
done

questo non funziona, quando inserisco 40 il codice esce
Roosevelt Mendieta il

6
@RooseveltMendieta Non è quello che vuoi? Ho bisogno di uscire da un vero ciclo while quando l'utente immette un numero che fornisce un modulo rimanente di 0 . Il 40% 5 è anche 0.
Kulfy il

2
@Kulfy stavo pensando alla divisione nella mia testa invece che al modulo, quanto imbarazzante sì, questa soluzione in effetti funziona ed è esattamente ciò di cui avevo bisogno. Devo andare a dormire. Ho lavorato fino a tardi per questo incarico.
Roosevelt Mendieta,

@RooseveltMendieta Sembra che tu abbia cambiato il codice originale nella tua domanda. Pertanto, PerlDuck potrebbe dover modificare la spiegazione della risposta.
Kulfy,

la versione ha riportato il codice al suo stato originale @ Kulfy
Roosevelt Mendieta il

5

Funziona per me secondo i suggerimenti di @ steeldriver,

  • assicurati di usare bash

    #!/bin/bash
  • usa la sintassi bash per la valutazione aritmetica

    ((...))

Altrimenti lo shellscript può rimanere lo stesso,

#!/bin/bash

while true
do
    echo "Please input anything here: "
    read INPUT

    if (( INPUT % 5 == 0 )) ; then
        echo "you entered right"
        break
    else
        echo "you entered wrong"
    fi
done

Modifica: hai modificato la domanda. Questa risposta corrisponde a una versione precedente della domanda. (Non è chiaro per me, se si desidera interrompere il ciclo, quando non c'è resto o quando c'è un resto.)


4

Dato che si tratta di uno bashscript di cui stiamo parlando, potresti voler utilizzare una read -pvalutazione aritmetica((...))

$ while read -p "Enter number:" input ; do (( input%5 == 0 )) && { echo "Wrong"; break;} || echo "alright"; done
Enter number:11
alright
Enter number:7
alright
Enter number:10
Wrong

Portabilmente, potresti voler usare [akatest

$ [ $((25%5)) -eq 0 ]  && echo "Zero"
Zero
$ [ $((26%5)) -eq 0 ]  && echo "Zero"
$
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.