GNU/Linux >> Belajar Linux >  >> Linux

periksa apakah argumen adalah tanggal yang valid di bash Shell

Anda dapat mengekstrak nilai hari, bulan, dan tahun dari nilai tanggal masukan MM-DD-YYYY dan memvalidasinya sebagai format YYYY-MM-DD yang tidak ambigu (Anda dapat memvalidasi tanggal berformat DD-MM-YYY sebagai "benar" menggunakan tanggal, misalnya 25-12-2010, tetapi ini bukan tanggal MM-DD-YYY yang valid, oleh karena itu perlu mengubah format tanggal terlebih dahulu)

Tanggal yang valid dalam format yang benar tidak apa-apa

30 November 2005 berlaku:

$ 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

Tanggal yang tidak valid dalam format yang benar TIDAK BOLEH

31 November 2005 tidak memvalidasi:

$ 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

Tanggal yang valid dalam format yang salah TIDAK BOLEH

20 April 1979 dalam format DD-MM-YYYY tidak divalidasi sebagai tanggal MM-DD-YYYY:

$ 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

Metode alternatif yang lebih sederhana:gunakan string variabel BASH, ganti tanda hubung menjadi garis miring

$ 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

Anda dapat memeriksa dengan date -d "datestring"

Jadi date -d "12/31/2012" valid, tetapi menggunakan tanda hubung, mis. date -d "12-31-2012" , tidak valid untuk date .

Anda juga dapat menggunakan kata-kata:date -d 'yesterday' atau date -d '1 week ago' keduanya valid.


Linux
  1. Bagaimana cara memeriksa tanggal instalasi sistem operasi linux Anda?

  2. Bagaimana Cara Memeriksa Substring Di Shell Script Bash?

  3. Bash:Gema:Kesalahan Tulis:Argumen Tidak Valid?

  1. Cara menggemakan Baris Baru di Bash Shell Script

  2. Periksa konektivitas basis data menggunakan skrip Shell

  3. Periksa apakah ada variabel dalam daftar di Bash

  1. Perbandingan tanggal di Bash

  2. Periksa apakah ada parameter ke skrip bash yang cocok dengan string

  3. Apa cara terbaik untuk memeriksa apakah volume dipasang di skrip Bash?