GNU/Linux >> Znalost Linux >  >> Linux

zkontrolujte, zda je argument platným datem v bash shellu

Hodnoty dne, měsíce a roku můžete extrahovat ze vstupní hodnoty data MM-DD-RRRR a ověřit ji jako jednoznačný (ISO) formát RRRR-MM-DD (datum ve formátu DD-MM-RRRR můžete ověřit jako "správně" pomocí data, např. 25-12-2010, ale není to platné datum MM-DD-RRRR, proto je potřeba nejprve změnit formát data)

Platné datum ve správném formátu je v pořádku

30. listopadu 2005 platí:

$ 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

Neplatné datum ve správném formátu NENÍ OK

31. listopad 2005 nepotvrzuje:

$ 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

Platné datum v nesprávném formátu NENÍ OK

20. dubna 1979 ve formátu DD-MM-RRRR není ověřeno jako datum MM-DD-RRRR:

$ 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

Alternativní jednodušší metoda:použijte proměnný řetězec BASH nahraďte spojovníky lomítky

$ 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

Můžete to zkontrolovat pomocí date -d "datestring"

Takže date -d "12/31/2012" je platné, ale pomocí pomlček, např. date -d "12-31-2012" , není platný pro date .

Můžete také použít slova:date -d 'yesterday' nebo date -d '1 week ago' jsou obě platné.


Linux
  1. Bash Shell Script - Zkontrolujte, zda nemáte příznak a zjistěte jeho hodnotu

  2. Jak zkontrolovat, zda soubor existuje v konkrétním adresáři ve skriptu bash?

  3. Zkontrolujte, zda některý z parametrů bash skriptu odpovídá řetězci

  1. Bash:Echo:Chyba zápisu:Neplatný argument?

  2. Jak zopakovat nový řádek ve skriptech Bash Shell

  3. Speciální parametry Bash vysvětlené pomocí 4 příkladů shellových skriptů

  1. Bash poziční parametry vysvětlené pomocí 2 příkladů shell skriptů

  2. Zkontrolujte konektivitu databáze pomocí skriptu Shell

  3. Zkontrolujte, zda existuje proměnná v seznamu v Bash