Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Convalida dell'input

Con la nostra nuova capacità di input da tastiera arriva un'ulteriore sfida di programmazione: la convalida dell'input. Molto spesso la differenza tra un programma ben scritto e uno mal scritto risiede nella capacità del programma di gestire l'imprevisto. Spesso, l'inaspettato si manifesta sotto forma di input errato. Abbiamo fatto un po' di questo con i nostri programmi di valutazione nel capitolo precedente, dove abbiamo controllato i valori degli interi e filtrato


valori vuoti e caratteri non numerici. È importante eseguire questo tipo di controlli di programmazione ogni volta che un programma riceve input, per proteggersi da dati non validi. Ciò è particolarmente importante per i programmi condivisi da più utenti. Omettere queste misure di sicurezza nell'interesse dell'economia potrebbe essere giustificato se un programma deve essere utilizzato una sola volta dall'autore per eseguire un'attività speciale. Anche in tal caso, se il programma esegue attività pericolose come l'eliminazione di file, sarebbe opportuno includere la convalida dei dati, per ogni evenienza.

Ecco un programma di esempio che convalida vari tipi di input:



#! / Bin / bash

# read-validate: convalida l'input invalid_input () {

echo "Input non valido '$REPLY'" >&2 exit 1

}


leggi -p "Inserisci un singolo elemento > "


# l'input è vuoto (non valido)

[[ -z $REPLY ]] && input non valido


# l'input è composto da più elementi (non valido)

(( $(echo $REPLY | wc -w) > 1 )) && input_non valido


# il nome file inserito è valido?

se [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; allora echo "'$REPLY' è un nome file valido."

se [[ -e $REPLY ]]; allora

echo "E il file '$REPLY' esiste."

altro

echo "Tuttavia, il file '$REPLY' non esiste."

fi


# l'input è un numero in virgola mobile?

se [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; allora echo "'$REPLY' è un numero in virgola mobile."

altro

echo "'$REPLY' non è un numero in virgola mobile."

fi


# l'input è un numero intero?

se [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; allora echo "'$REPLY' è un numero intero."

altro

echo "'$REPLY' non è un numero intero."

#! / Bin / bash

# read-validate: convalida l'input invalid_input () {

echo "Input non valido '$REPLY'" >&2 exit 1

}


leggi -p "Inserisci un singolo elemento > "


# l'input è vuoto (non valido)

[[ -z $REPLY ]] && input non valido


# l'input è composto da più elementi (non valido)

(( $(echo $REPLY | wc -w) > 1 )) && input_non valido


# il nome file inserito è valido?

se [[ $REPLY =~ ^[-[:alnum:]\._]+$ ]]; allora echo "'$REPLY' è un nome file valido."

se [[ -e $REPLY ]]; allora

echo "E il file '$REPLY' esiste."

altro

echo "Tuttavia, il file '$REPLY' non esiste."

fi


# l'input è un numero in virgola mobile?

se [[ $REPLY =~ ^-?[[:digit:]]*\.[[:digit:]]+$ ]]; allora echo "'$REPLY' è un numero in virgola mobile."

altro

echo "'$REPLY' non è un numero in virgola mobile."

fi


# l'input è un numero intero?

se [[ $REPLY =~ ^-?[[:digit:]]+$ ]]; allora echo "'$REPLY' è un numero intero."

altro

echo "'$REPLY' non è un numero intero."

Convalida dell'input


per altro

echo "La stringa '$REPLY' non è un nome file valido."

fi

per altro

echo "La stringa '$REPLY' non è un nome file valido."

fi


Questo script richiede all'utente di inserire un elemento. L'elemento viene successivamente analizzato per determinarne il contenuto. Come possiamo vedere, lo script utilizza molti dei concetti che abbiamo trattato finora, tra cui le funzioni shell, [[]], (( )), l'operatore di controllo

&& e if, oltre a una buona dose di espressioni regolari.


Il miglior sistema operativo cloud computing su OnWorks: