Input da tastiera e aritmetica

Home |

Precedente | Contenuto | Successivo

Fino ad ora, i nostri script non sono stati interattivi. Cioè, non hanno accettato alcun input dall’utente. In questa lezione, vedremo come i nostri script possono fare domande, e ottenere e usare le risposte.

leggere

Per ottenere input dalla tastiera, usiamo il comando read. Il comando read prende l’input dalla tastiera e lo assegna ad una variabile. Ecco un esempio:

#!/bin/bashecho -n “Inserisci del testo >read testoecho “Hai inserito: $text”

Come possiamo vedere, abbiamo visualizzato un prompt alla linea 3. Notate che “-n“dato al comando echo fa sì che mantenga il cursore sulla stessa linea; cioè, non emette un linefeed alla fine del prompt.

In seguito, invochiamo il comando read con “text” come argomento. Ciò che questo fa è aspettare che l’utente digiti qualcosa seguito dal tasto Invio e poi assegna ciò che è stato digitato alla variabile text.

Ecco lo script in azione:

$ read_demo.bashInserisci del testo >this is some textHai inserito: questo è del testo

Se non diamo al comando read il nome di una variabile per assegnare il suo input, userà la variabile d’ambienteREPLY.

Il read comando ha diverse opzioni della linea di comando, le tre più interessanti sono -p-t e-s.

L’opzione -p ci permette di specificare un prompt che precede l’input dell’utente. Questo risparmia il passo extra di usare un echo per chiedere all’utente. Ecco l’esempio precedente riscritto per usare l’opzione -p:

#!/bin/bashread -p “Inserisci del testo > ” textecho “Hai inserito: $text”

L’opzione -t seguita da un numero di secondi fornisce un timeout automatico per il comando read. Questo significa che il comando read rinuncerà dopo il numero di secondi specificato se non è stata ricevuta alcuna risposta dall’utente.Questa opzione potrebbe essere usata nel caso di uno script che deve continuare (magari ricorrendo a una risposta predefinita) anche se l’utente non risponde alle richieste.Ecco l’opzione -t in azione:

#!/bin/bashecho -n “Sbrigati a scrivere qualcosa! >if read -t 3 response; thenecho “Ottimo, hai fatto in tempo!”elseecho “Scusa, sei troppo lento!”fi

L’opzione -s fa sì che la digitazione dell’utente non venga visualizzata. Questo è utile quando si chiede all’utente di digitare una password o altre informazioni riservate.

Aritmetica

Siccome stiamo lavorando su un computer, è naturale aspettarsi che possa eseguire qualche semplice aritmetica. La shell fornisce funzioni per l’aritmetica dei numeri interi.

Cos’è un numero intero? Significa numeri interi come 1, 2, 458, -2859. Non significa numeri frazionari come 0,5, .333, o 3,1415. Per trattare con i numeri frazionari, c’è un programma separato chiamato bc che fornisce un linguaggio di calcolo a precisione arbitraria. Può essere usato negli script di shell, ma va oltre lo scopo di questo tutorial.

Diciamo che vogliamo usare la linea di comando come una calcolatrice primitiva. Possiamo fare così:

$ echo $((2+2))

Quando circondiamo un’espressione aritmetica con le doppie parentesi, la shell eseguirà un’espansione aritmetica.

Nota che gli spazi bianchi sono ignorati:

$ echo $((2+2))echo $(( 2+2 ))echo $(( 2 + 2 ))4

La shell può eseguire una varietà di operazioni aritmetiche comuni (e non così comuni). Ecco un esempio:

#!/bin/bashfirst_num=0second_num=0read -p “Inserisci il primo numero –> ” first_numread -p “Inserisci il secondo numero -> ” second_numecho “primo numero + secondo numero = $((first_num + second_num))echo “primo numero – secondo numero = $((first_num – secondo_num))”echo “primo numero * secondo numero = $((first_num * second_num))”echo “primo numero / secondo numero = $((first_num / second_num))”echo “primo numero % secondo numero = $((first_num % second_num))”echo “primo numero elevato alla”echo “potenza del secondo numero = $((first_num ** second_num))”

Nota come il leading “$” non sia necessario per referenziare variabili all’interno dell’espressione aritmetica come “first_num +second_num“.

Provare questo programma e guardare come gestisce la divisione (ricordate, questa è una divisione intera) e come gestisce i numeri grandi. I numeri che diventano troppo grandi traboccano come il contachilometri di un’auto quando supera il numero di miglia che è stato progettato per contare. Ricomincia da capo, ma prima passa attraverso tutti i numeri negativi a causa di come i numeri interi sono rappresentati in memoria. La divisione per zero (che non è matematicamente valida) causa un errore.

Le prime quattro operazioni, addizione, sottrazione, moltiplicazione e divisione, sono facilmente riconoscibili, ma la quinta può non essere familiare. Il simbolo “%” rappresenta il resto (noto anche come modulo). Questa operazione esegue la divisione ma invece di restituire un quoziente come la divisione, restituisce il resto. Anche se questo potrebbe non sembrare molto utile, in realtà fornisce una grande utilità quando si scrivono i programmi. Per esempio, quando l’operazione di resto restituisce zero, indica che il primo numero è un multiplo esatto del secondo. Questo può essere molto utile:

#!/bin/bashnumber=0read -p “Inserisci un numero > ” numeroecho “Il numero è $numero”if ;thenecho “Il numero è pari”elseecho “Il numero è dispari”fi

Oppure, in questo programma che formatta un numero arbitrario di secondi in ore e minuti:

#!/bin/bashseconds=0read -p “Inserire il numero di secondi > ” secondshours=$((seconds / 3600))seconds=$((seconds % 3600))minutes=$((seconds / 60))seconds=$((seconds % 60))echo “$hours hour(s) $minutes minute(s) $seconds second(s)”
Top | Previous | Contents | Next

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *