Domanda perché questo programma di script di shell non funziona


echo "enter one no"
read n

rem='expr $n % 2'


if [ $rem -eq 0 ]

then
    echo "Number $n is even"
else
    echo "Number $n is odd"
fi

durante l'esecuzione di questo programma, bash mostra messaggi come "troppe argomentazioni".


1
2018-03-20 05:34


origine




risposte:


Questo perché stai facendo:

if [ expr $n % 2 -eq 0 ]

Come mai?

Perché

rem='expr $n % 2'

sta assegnando una variabile rem come stringa expr $n % 2.

Hai bisogno, comando di sostituzione:

rem=$(expr $n % 2)

Usa anche bashl'operatore aritmetico nativo invece di expr:

rem=$(( $n % 2 ))

2
2018-03-20 05:43





  • utilizzare la funzione di prompt integrata di read read -p "Enter one num" n

  • preferisco usare $( . . .) , le virgolette singole non espandono i comandi. rem="$(expr $n % 2)"

  • Cita le variabili quando li usi "$rem"

  • utilizzare al massimo una linea di pausa tra if e then

    if [ "$rem" -eq 0 ] then


0
2018-03-20 05:49