-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrange
executable file
·50 lines (41 loc) · 1.07 KB
/
range
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
#!/bin/bash
set -euo 'pipefail'
usage() {
local b=$(tput bold)
local n=$(tput sgr0)
echo "${b}Usage:${n} $(basename "$0") '[<lower>;]<upper>'"
echo ""
echo "${b}Description:${n}"
echo " Generates enumerated newlines from <lower> to <upper>"
echo ""
echo "${b}Arguments:${n}"
echo ""
echo " <lower> lower bound (integer), default to 0 if omitted"
echo " <upper> upper bound (integer), mandatory"
echo ""
echo "${b}Examples:${n}"
echo ""
echo " $(basename "$0") '10;20'"
echo " $(basename "$0") '300'"
}
main() {
local range=${1:-null}
if [[ "$range" == '-h' || "$range" == '--help' || "$range" == 'null' ]]; then
usage
exit 0
fi
if ! grep -E '([0-9]+;[0-9]+|^[0-9]+)' <<< "$range" > /dev/null; then
>&2 echo "Error: invalid range!"
usage
exit 1
fi
local lower=$(grep -Eo '[0-9]+;' <<< "$range" | tr -d '\n')
local upper=$(sed "s/${lower:-;}//g" <<< "$range" | tr -d '\n')
lower=$(tr -d '\n;' <<< "$lower")
lower=${lower:-0}
for (( i = lower; i < upper; i++ )); do
echo "$i"
done
exit 0
}
main "$@"