Sto cercando di abbinare lo schema della data usando case
comando ma non funziona. Qualcuno può aiutarmi?
Inserimento :01/05/1900
o 5/6/1900
Istruzione del caso utilizzata:
ptn="[0-9]|[0-9][0-9]/[0-9]|[0-9][0-9]/[0-9][0-9]|[0-9][0-9][0-9][0-9]"
case "$dt" in
$ptn ) echo "valid pattern" ;;
*) echo "invalid"
esac
Ma il modello utilizzato nell'istruzione case non sta valutando i 2 input di data precedenti.
Risposta accettata:
Prova questo. case
comprende solo i glob, quindi la gestione di un'espressione regolare non è semplice. Il =~
operatore offre alcune soluzioni qui però.
#!/bin/bash
INP="01/05/1900"
ptn="^([0-9]|[0-9][0-9])/([0-9]|[0-9][0-9])/([0-9][0-9]|[0-9][0-9][0-9][0-9])$"
if [[ $INP =~ $ptn ]] ; then
echo valid pattern
else
echo invalid
fi
Se desideri ridurre la dimensione dell'espressione regolare, ^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$
funziona ugualmente bene.