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.