-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.sh
128 lines (100 loc) · 2.24 KB
/
template.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/bin/bash
set -euo pipefail
program=$(basename $0)
### functions ##########################################################
usage() {
echo "usage: $program [options]
Frobnicate a quux using a collection of foobars.
options:
-c, --command=COMMAND Run this command.
-o, --output=FILE Write to the specified file.
-v, --verbose Be verbose.
-n, --dry-run Print commands instead of executing them.
-h, --help Display this message.
"
}
error() {
echo "$program: $*" >&2
exit 1
}
bad_usage() {
echo "$program: $*" >&2
echo "Try \`$program --help' for more information." >&2
exit 1
}
missing_arg() {
bad_usage "option \`$1' requires an argument"
}
verbose_run() {
echo "$@"
"$@"
}
### command line #######################################################
verbose=false
dry_run=false
output=
commands=()
while [ $# -gt 0 ]
do
option="$1"
shift
case $option in
-o | --output)
[ $# -gt 0 ] || missing_arg "$option"
output="$1"
shift
;;
--output=*)
output="${option#${option%%=*}=}"
;;
-o*)
output="${option:2}"
;;
-c | --command)
[ $# -gt 0 ] || missing_arg "$option"
commands+=("$1")
shift
;;
--command=*)
commands+=("${option#${option%%=*}=}")
;;
-c*)
commands+=("${option:2}")
;;
-n | --dry-run)
dry_run=true
;;
-h | --help)
usage
exit
;;
--)
break
;;
-? | --*)
bad_usage "unrecognized option \`$option'"
;;
-*)
set -- "${option::2}" -"${option:2}" "$@"
;;
*)
set -- "$option" "$@"
break
;;
esac
done
[ $# -eq 0 ] || bad_usage "unrecognized argument \`$1'"
if $dry_run
then
run=echo
elif $verbose
then
run=verbose_run
else
run=
fi
### main ###############################################################
for command in ${commands+"${commands[@]}"}
do
$run $command
done