PDA

View Full Version : [BASH] Identificare numero intero


kwb
08-02-2012, 12:24
Ho un programma da fare in BASH, una semplice calcolatrice che, preso come argomenti 3 parametri ( numero1, operatore, numero2 ) mi deve fare la corrispondente operazione. Ad esempio:

./scrip.sh 1 + 2

Deve stamparmi 3.

L'esercizio tuttavia chiede due cose:
1. Controllare che il primo e il secondo argomento siano numeri interni
2. Controllare che l'operatore sia uno di questi caratteri: + - x /

Ho difficoltà a fare il primo ( il secondo non c'ho ancora provato ).
Questo è il codice che sto cercando di utilizzare:

if [[ "$1" =~ ?([0-9]) ]]
then
#switch/case per fare le operazioni
else
echo "NAN"
fi
exit

Ho provato un po' di tutto, dal togliere l'if e fare tutto su una riga, usare le tonde, usare una sola quadra, usare il != invece del =~ . NIENTE!
Il massimo che sono riuscito ad ottenere è: mettendo un interno stampa, ma non entra nell'else se metto una lettera...

Come si fa?
Poi chiaramente il controllo è incompleto perchè dovrei aggiungerci un pure il controllo su $3, ma un passo alla volta... :O

StefanoD66
08-02-2012, 13:36
Non l'ho provato, ma:

if [ "$1" -eq "$1" ]

dovrebbe funzionare in quanto fa un confronto fra interi.

kwb
08-02-2012, 14:45
Non l'ho provato, ma:

if [ "$1" -eq "$1" ]

dovrebbe funzionare in quanto fa un confronto fra interi.

Ho provato la tua soluzione.
Se scrivo:

./script.sh 1 + 2

Stampa 3, corretto

Ma se scrivo:


./script.sh a + 2

Stampa 2
Nonostante il mio if sia strutturato nel seguente modo:

if [ "$1" -eq "$1" ]
#switch/case
else
echo "Nan"
fi
exit

NLK-511
09-02-2012, 23:13
nessun altro suggerimento?