Kiểm tra date format trong shell script

Kiểm tra date format trong shell script

Bài viết này sẽ hướng dẫn các bạn kiểm tra định dạng ngày tháng trong shell script linux sau đó in ra danh sách ngày tháng đã chọn.

Tạo file script

Ở đây mình dùng định dạng YYYY-MM-DD

Các bạn sử dụng vim hoặc nano tạo file check_date.sh

nano check_date.sh

Nội dung file như sau:

#!/bin/bash

startdate=2018-09-01
enddate=2018-09-40

start=$(date '+%Y-%m-%d' -d $startdate)
end=$(date '+%Y-%m-%d' -d $enddate)
if [[ $end < $start ]]
  then echo "check start & end date"
elif [ $start != $startdate ]
  then echo "date format invalid"
elif [ $end != $enddate ]
  then echo "date format invalid"
else
  d=
  n=-1
  until [ "$d" = "$enddate" ]
  do
    ((n++))
    d=$(date -d "$startdate + $n days" +%Y-%m-%d)
    echo $d
  done
fi

Trong đó:

  • startdate: ngày bắt đầu
  • enddate: ngày kết thúc
  • $end < $start: kiểm tra ngày kết thúc phải lớn hơn ngày bắt đầu
  • $start != $startdate: kiểm tra định dạng ngày bắt đầu
  • $end != $enddate: kiểm tra định dạng ngày kết thúc

Thực thi

Để thực thi shell script trên chúng ta dùng lệnh sau:

chmod u+x check_date.sh

Thực thi tập tin bằng lệnh sau:

sh check_date.sh

Vì enddate (2018-09-40) bị sai nên console log như sau:

[root@localhost]# sh check_date.sh
date: invalid date `2018-09-40'
check start & end date

Sửa lại enddate đúng định dạng (ví dụ: 2018-09-11) ta sẽ có console log như sau:

[root@localhost]# sh check_date.sh
2018-09-01
2018-09-02
2018-09-03
2018-09-04
2018-09-05
2018-09-06
2018-09-07
2018-09-08
2018-09-09
2018-09-10
2018-09-11

Chúc các bạn thành công.
Xem thêm các bài viết về hệ điều hành Linux