Pagina 1 di 1
[Bash] check regex [RISOLTO] New problem bash!
Inviato: sab 29 set 2007, 15:58
da DaD
Codice: Seleziona tutto
$ cat debug
#!/bin/bash
function tmp() {
read -p "Quanti valori deve contentere la tabella? " RIGHE_TB
if [[ "$RIGHE_TB" =~ "^[0-9]+)$" ]]; then
echo "Ok!"
else
echo "Devi inserire un numero!"
fi
}
tmp
Ora è facile intuire che il valore di RIGHE_TB deve essere solo un valore numerico, ma il check che faccio fare alla variabile sembra non funzionare, perchè anche quando inserisco un numero, l'if mi restituisce l'esle ossia
Devi inserire un numero!.
Cosa sbaglio? La regex è semplicissima e non credo ci siano errori li quindi dove diamine sta l'inghippo

Inviato: sab 29 set 2007, 16:22
da Paoletta
Codice: Seleziona tutto
#!/bin/bash
function tmp() {
read -p "Quanti valori deve contentere la tabella? " RIGHE_TB
if [[ "$RIGHE_TB" -ge 0 ]]; then
echo "Ok!"
else
echo "Devi inserire un numero!"
fi
}
tmp
dai un'occhiata a man test
Inviato: sab 29 set 2007, 16:35
da DaD
Ehm ...
Codice: Seleziona tutto
$ ./debug
Quanti valori deve contentere la tabella? asd
Ok!

Re: [Bash] check regex
Inviato: sab 29 set 2007, 19:20
da cymon
DaD ha scritto:Codice: Seleziona tutto
$ cat debug
#!/bin/bash
function tmp() {
read -p "Quanti valori deve contentere la tabella? " RIGHE_TB
if [[ "$RIGHE_TB" =~ "^[0-9]+)$" ]]; then
echo "Ok!"
else
echo "Devi inserire un numero!"
fi
}
tmp
Ora è facile intuire che il valore di RIGHE_TB deve essere solo un valore numerico, ma il check che faccio fare alla variabile sembra non funzionare, perchè anche quando inserisco un numero, l'if mi restituisce l'esle ossia
Devi inserire un numero!.
Cosa sbaglio? La regex è semplicissima e non credo ci siano errori li quindi dove diamine sta l'inghippo

Sarà che la sintassi regexp bash mi fa sempre inciampare, ma la parentesi prima dell chiusura stringa a cosa serve?
Inviato: dom 30 set 2007, 11:27
da Paoletta
DaD ha scritto:Ehm ...
Codice: Seleziona tutto
$ ./debug
Quanti valori deve contentere la tabella? asd
Ok!

ooops scusa sono andata di fretta...cavolo ma a
va bene tutto? comunque puoi usare questo workaround (visto che tanto vuoi solo numeri interi, ovviamente):
Codice: Seleziona tutto
function tmp() {
read -p "Quanti valori deve contentere la tabella? " RIGHE_TB
ERRORE=`echo $RIGHE_TB | grep -o [^0-9]`
if [ "$ERRORE" != "" ]; then
echo "devi inserire un numero!"
else
echo "Ok"
fi
}
comunque visto che "le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza" devo dire che prima ho seguito larry wall al 100%!
Inviato: dom 30 set 2007, 13:35
da DaD
Grazie paoletta ha funzionato

Inviato: dom 30 set 2007, 14:07
da Paoletta
DaD ha scritto:Grazie paoletta ha funzionato

ok, questo vuol dire che devi dare un'occhiata a man grep

Inviato: lun 1 ott 2007, 16:58
da DaD
Paoletta ha scritto:DaD ha scritto:Grazie paoletta ha funzionato

ok, questo vuol dire che devi dare un'occhiata a man grep

Sapveo che anche con grep potevo usare le regex ma sinceramnete non avevo pensato al suo utilizzo in questo caso :P
comunque ho un altro problemino e visto che si tratta sempre di uno script bash posto qui senza aprire una nuova discussione :]
In pratica ho quest'array $TYPE, che contiene come tutti gli array svariati volori, ora tramite un read l'utente inserisce una variabile che deve corrispondere ai valori contenuti nell'array $TYPE, bene mi dico, basterà un case che come ozpione primaria abbia il contenuto dell'array ed allor aho creato la voce in questa maniera:
Ho pensato che questo potesse andare bene perchè se faccio un echo con quel codice mi vengono stampati tutti i valori dell'array, però se lo inserisco nell'opzione del case, mi da come buona solo il primo valore dell'array, e non ho ancora capito il perchè ...
In pratica potrei risolvere inserendo all'interno del case tutti i valori dell'array, ma questa soluzione mi sembra troppo poco professionale, e poi se l'array dovesse raggiungere una dimensione cospiqua di dati la trasposizione nel case sarebbe massacrante e la programmazione deve essere divertente non massacrante
P.S. Ecco il codice incriminato, (se potesse servire alla risoluzione del problema:
Codice: Seleziona tutto
function type_insert_check() {
TYPE=(
"INT" # [0]
"CHAR" # [1]
"VARCHAR" # [2]
"DATE" # [3]
)
read -p "Inserisci il tipo di volaore che assumerà *Nome*: " TYPE_R
case $TYPE_R in
${TYPE[@]:0}) echo "ok" ;;
*) echo "Non va bene ..." ;;
esac
}