GNU/Linux >> Linux Esercitazione >  >> Linux

controlla se l'argomento è una data valida nella shell bash

È possibile estrarre i valori di giorno, mese e anno dal valore della data di input MM-GG-AAAA e convalidarlo invece come formato non ambiguo (ISO) AAAA-MM-GG (è possibile convalidare una data formattata GG-MM-AAAA come "corretto" utilizzando la data, ad esempio 25-12-2010, ma non è una data MM-GG-AAAA valida, da qui la necessità di modificare prima il formato della data)

Una data valida nel formato corretto va bene

30 novembre 2005 è valido:

$ DATE=11-30-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=30  
VALID

$ DATE=11-30-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
VALID

Una data non valida nel formato corretto NON va bene

31 novembre 2005 non convalida:

$ DATE=11-31-2005; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=2005, month=11, day=31  
INVALID

$ DATE=11-31-2005; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID

Una data valida nel formato errato NON va bene

Il 20 aprile 1979 nel formato GG-MM-AAAA non è valido come data MM-GG-AAAA:

$ DATE=20-04-1979; d=${DATE:3:2}; m=${DATE:0:2}; Y=${DATE:6:4}; echo "year=$Y, month=$m, day=$d"; if date -d "$Y-$m-$d" &> /dev/null; then echo VALID; else echo INVALID; fi
year=1979, month=20, day=04  
INVALID

$ DATE=20-04-1979; if date -d "${DATE:6:4}-${DATE:0:2}-${DATE:3:2}" &> /dev/null; then echo VALID; else echo INVALID; fi
INVALID

Metodo alternativo più semplice:usa la stringa variabile BASH sostituisci i trattini con le barre

$ DATE="04-30-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
VALID

$ DATE="04-31-2005"; [[ $(date -d "${DATE//-/\/}" 2> /dev/null) ]] && echo VALID || echo INVALID
INVALID

Puoi controllare con date -d "datestring"

Quindi date -d "12/31/2012" è valido, ma usando i trattini, ad es. date -d "12-31-2012" , non è valido per date .

Puoi anche usare parole:date -d 'yesterday' o date -d '1 week ago' sono entrambi validi.


Linux
  1. Personalizzazione della shell Bash

  2. Come controllare la data di installazione del tuo sistema operativo Linux?

  3. Come controllare la sottostringa in Shell Script Bash?

  4. Controlla la connettività del database utilizzando lo script Shell

  5. Controlla se esiste una variabile in un elenco in Bash

.bashrc vs .bash_profile

Come verificare se esiste un file o una directory in Bash Shell

Parametri posizionali di Bash spiegati con 2 script di shell di esempio

Bash Shell Script:verifica la presenza di un flag e acquisisci il suo valore

Come verificare se esiste un file in una directory specifica in uno script bash?

Qual è il modo migliore per verificare se un volume è montato in uno script Bash?