-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtry_interval.sh
executable file
·106 lines (96 loc) · 1.83 KB
/
try_interval.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/bash
# variables
REGEX_NUM='^[0-9]+$'
OPTIONS_ARGS=0
TRY_ENV=$TRY
INTERVAL_ENV=$INTERVAL
TRY_DEF=5
INTERVAL_DEF=12
# options priority
INTERVAL=$INTERVAL_DEF
TRY=$TRY_DEF
if [[ -n $INTERVAL_ENV ]]; then
INTERVAL=$INTERVAL_ENV
fi
if [[ -n $TRY_ENV ]]; then
TRY=$TRY_ENV
fi
# help
function instruction {
cat << EOL
Usage: $0 [OPTIONS] <COMMAND>
Options:
-i: try intervals in seconds (default: 5)
environment variable name: INTERVAL
-n: number of tries (default: 12)
environment variable name: TRY
Options Priority:
Highest: -explicitly use -i and -n in the command
-read from environment variables
Lowest : -default values for -i and -n
EOL
echo
}
if [[ $# -eq 0 ]]; then
instruction
exit
fi
# read options
case $1 in
"-i")
if [[ $2 =~ $REGEX_NUM ]]; then
INTERVAL=$2
OPTIONS_ARGS=$((OPTIONS_ARGS+=2))
else
instruction
exit
fi
;;
"-n")
if [[ $2 =~ $REGEX_NUM ]]; then
TRY=$2
OPTIONS_ARGS=$((OPTIONS_ARGS+=2))
else
instruction
exit
fi
;;
esac
case $3 in
"-i")
if [[ $4 =~ $REGEX_NUM ]]; then
INTERVAL=$4
OPTIONS_ARGS=$((OPTIONS_ARGS+=2))
else
instruction
exit
fi
;;
"-n")
if [[ $4 =~ $REGEX_NUM ]]; then
TRY=$4
OPTIONS_ARGS=$((OPTIONS_ARGS+=2))
else
instruction
exit
fi
;;
esac
# find the command
shift $OPTIONS_ARGS
COMMANDS=$@
if [[ -z $COMMANDS ]]; then
instruction
fi
# execute the command
while [[ $TRY -ne 0 ]]
do
let TRY--
$COMMANDS 2> /dev/null
if [[ $? -eq 0 ]]; then
exit 0
fi
sleep $INTERVAL
done
echo "Operation Failed"
exit 1