-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcron-parser.sh
51 lines (37 loc) · 1.31 KB
/
cron-parser.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
## CRON PARSER #################################################################
cronCurrentTime() {
local cron_pt="$@"
local date_pt=($(date "+%M %H %d %m %w" | sed 's/ 0/ /g'))
cron_pt=(${cron_pt//"*"/!})
local ok cn
for cn in {0..4} ; do
[[ $(cronPatternMatch "${cron_pt[cn]}" "${date_pt[cn]}") ]] && ok="${ok}1"
done
[[ "$ok" == "11111" ]] && echo 1 && return 0
echo "" && return 1
}
cronPatternMatch() {
local pattern="$1"
local date="$2"
[[ "$pattern" == "$date" ]] && echo 1 && return 0
[[ "$pattern" == "!" ]] && echo 1 && return 0
if [[ $pattern =~ "," ]] ; then
[[ $date =~ ${pattern//,/|} ]] && echo 1 && return 0
fi
if [[ $pattern =~ "/" ]] ; then
local prefix="${pattern%/*}"
local postfix="${pattern#*/}"
if [[ "$pattern" == "!" ]] ; then
[[ $(echo "${date}%${postfix}" | bc) == "0" ]] && echo 1 && return 0
elif [[ -n $(echo "$prefix" | grep "-") ]] ; then
if [[ $date -ge ${prefix%-*} && $date -le ${prefix#*-} ]] ; then
[[ $(echo "${date}%${postfix}" | bc) == "0" ]] && echo 1 && return 0
fi
fi
fi
if [[ $pattern =~ "-" ]] ; then
[[ $date -ge ${pattern%-*} && $date -le ${pattern#*-} ]] && echo 1 && return 0
fi
echo "" && return 1
}
################################################################################