Skip to content

Commit a94258d

Browse files
authored
Fixing comparison error in easyoptions.sh (#103)
* Update easyoptions.sh * fix(lint): fixing spaces * fix(lint): fixing variables * fix(bash): fixes for testing * fix(lint): fixing lint issues
1 parent a213a83 commit a94258d

File tree

2 files changed

+143
-143
lines changed

2 files changed

+143
-143
lines changed

examples/fastapi-simple-docker-pip/scripts/easy-options/easyoptions.sh

Lines changed: 139 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -56,157 +56,157 @@
5656
##
5757

5858
show_error() {
59-
echo "Error: $1." >&2
60-
echo "See --help for usage and options." >&2
59+
echo "Error: $1." >&2
60+
echo "See --help for usage and options." >&2
6161
}
6262

6363
parse_documentation() {
64-
documentation="$(grep "^##" "$(which "$0")")(no-trim)"
65-
documentation=$(echo "$documentation" | sed -r "s/## ?//" | sed -r "s/@script.name/$(basename "$0")/g" | sed "s/@#/@/g")
66-
documentation=${documentation%(no-trim)}
64+
documentation="$(grep "^##" "$0")"
65+
documentation=$(echo "$documentation" | sed -r "s/## ?//" | sed -r "s/@script.name/$(basename "$0")/g" | sed "s/@#/@/g")
66+
documentation=${documentation%(no-trim)}
6767
}
6868

6969
parse_options() {
7070

71-
local short_option_vars
72-
local short_options
73-
local documentation
74-
local next_is_value
75-
local argument
76-
77-
local option
78-
local option_name
79-
local option_value
80-
local option_var
81-
82-
local known_option
83-
local known_option_name
84-
local known_option_var
85-
86-
# Parse known options from documentation
87-
if [[ -z ${options+defined} ]]; then
88-
parse_documentation
89-
while read -r line; do
90-
case "$line" in
91-
"-h, --help"*) continue ;;
92-
"--help, -h"*) continue ;;
93-
-*," "--*) option=$(echo "$line" | awk -F'(^-|, --| )' '{ print $2"="$3 }') ;;
94-
--*," "-*) option=$(echo "$line" | awk -F'(--|, -| )' '{ print $3"="$2 }') ;;
95-
--*=*) option=$(echo "$line" | awk -F'(--|=| )' '{ print $2"=?" }') ;;
96-
--*" "*) option=$(echo "$line" | awk -F'(--| )' '{ print $2 }') ;;
97-
*) continue ;;
98-
esac
99-
options+=("$option")
100-
done <<< "$documentation"
71+
local short_option_vars
72+
local short_options
73+
local documentation
74+
local next_is_value
75+
local argument
76+
77+
local option
78+
local option_name
79+
local option_value
80+
local option_var
81+
82+
local known_option
83+
local known_option_name
84+
local known_option_var
85+
86+
# Parse known options from documentation
87+
if [[ -z ${options+defined} ]]; then
88+
parse_documentation
89+
while read -r line; do
90+
case "$line" in
91+
"-h, --help"*) continue ;;
92+
"--help, -h"*) continue ;;
93+
-*," "--*) option=$(echo "$line" | awk -F'(^-|, --| )' '{ print $2"="$3 }') ;;
94+
--*," "-*) option=$(echo "$line" | awk -F'(--|, -| )' '{ print $3"="$2 }') ;;
95+
--*=*) option=$(echo "$line" | awk -F'(--|=| )' '{ print $2"=?" }') ;;
96+
--*" "*) option=$(echo "$line" | awk -F'(--| )' '{ print $2 }') ;;
97+
*) continue ;;
98+
esac
99+
options+=("$option")
100+
done <<<"$documentation"
101+
fi
102+
103+
options+=(h=help)
104+
arguments=()
105+
106+
# Prepare known options
107+
for option in "${options[@]}"; do
108+
option_var=${option#*=}
109+
option_name=${option%="$option_var"}
110+
if [[ "${#option_name}" = "1" ]]; then
111+
short_options="${short_options}${option_name}"
112+
if [[ "${#option_var}" -gt "1" ]]; then
113+
short_option_vars+=("$option_var")
114+
fi
101115
fi
102-
103-
options+=(h=help)
104-
arguments=()
105-
106-
# Prepare known options
107-
for option in "${options[@]}"; do
108-
option_var=${option#*=}
109-
option_name=${option%=$option_var}
110-
if [[ "${#option_name}" = "1" ]]; then
111-
short_options="${short_options}${option_name}"
112-
if [[ "${#option_var}" > "1" ]]; then
113-
short_option_vars+=("$option_var")
114-
fi
116+
done
117+
118+
# Extract regular arguments
119+
index=1
120+
parameters=()
121+
for argument in "$@"; do
122+
if [[ "$argument" = -* ]]; then
123+
parameters+=("$argument")
124+
for known_option in "${options[@]}"; do
125+
known_option_var=${known_option#*=}
126+
known_option_name=${known_option%="$known_option_var"}
127+
if [[ "$known_option_var" = "?" && "$argument" = --$known_option_name ]]; then
128+
next_is_value="yes"
129+
break
115130
fi
116-
done
117-
118-
# Extract regular arguments
119-
index=1
120-
parameters=()
121-
for argument in "$@"; do
122-
if [[ "$argument" = -* ]]; then
123-
parameters+=("$argument")
124-
for known_option in "${options[@]}"; do
125-
known_option_var=${known_option#*=}
126-
known_option_name=${known_option%=$known_option_var}
127-
if [[ "$known_option_var" = "?" && "$argument" = --$known_option_name ]]; then
128-
next_is_value="yes"
129-
break
130-
fi
131-
done
132-
else
133-
if [[ -z "$next_is_value" ]]; then
134-
arguments+=("${!index}")
135-
else
136-
parameters+=("$argument")
137-
fi
138-
next_is_value=""
131+
done
132+
else
133+
if [[ -z "$next_is_value" ]]; then
134+
arguments+=("${!index}")
135+
else
136+
parameters+=("$argument")
137+
fi
138+
next_is_value=""
139+
fi
140+
index=$((index + 1))
141+
done
142+
set -- "${parameters[@]}"
143+
144+
# Parse the provided options
145+
while getopts ":${short_options}-:" option; do
146+
option="${option}${OPTARG}"
147+
option_value=""
148+
149+
# Set the corresponding variable for known options
150+
for known_option in "${options[@]}" "${short_option_vars[@]}"; do
151+
known_option_var=${known_option#*=}
152+
known_option_name=${known_option%="$known_option_var"}
153+
154+
# Short option
155+
if [[ "$option" = "$known_option_name" ]]; then
156+
option_value="yes"
157+
known_option_var=$(echo "$known_option_var" | tr "-" "_")
158+
eval "$known_option_var=\"$option_value\""
159+
break
160+
161+
# Long option
162+
elif [[ "$option" = -$known_option_name && "$known_option_var" != "?" ]]; then
163+
option_value="yes"
164+
known_option_var=$(echo "$known_option_var" | tr "-" "_")
165+
eval "$known_option_var=\"$option_value\""
166+
break
167+
168+
# Long option with value in next parameter
169+
elif [[ "$option" = -$known_option_name && "$known_option_var" = "?" ]]; then
170+
eval option_value="\$$OPTIND"
171+
if [[ -z "$option_value" || "$option_value" = -* ]]; then
172+
show_error "you must specify a value for --$known_option_name"
173+
exit 1
139174
fi
140-
index=$((index + 1))
175+
OPTIND=$((OPTIND + 1))
176+
known_option_var=$(echo "$known_option_name" | tr "-" "_")
177+
eval "$known_option_var=\"$option_value\""
178+
break
179+
180+
# Long option with value after equal sign
181+
elif [[ "$option" = -$known_option_name=* && "$known_option_var" = "?" ]]; then
182+
option_value=${option#*=}
183+
known_option_var=$(echo "$known_option_name" | tr "-" "_")
184+
eval "$known_option_var=\"$option_value\""
185+
break
186+
187+
# Long option with unnecessary value
188+
elif [[ "$option" = -$known_option_name=* && "$known_option_var" != "?" ]]; then
189+
option_value=${option#*=}
190+
show_error "--$known_option_name does not accept a value, you specified \"$option_value\""
191+
exit 1
192+
fi
141193
done
142-
set -- "${parameters[@]}"
143-
144-
# Parse the provided options
145-
while getopts ":${short_options}-:" option; do
146-
option="${option}${OPTARG}"
147-
option_value=""
148-
149-
# Set the corresponding variable for known options
150-
for known_option in "${options[@]}" "${short_option_vars[@]}"; do
151-
known_option_var=${known_option#*=}
152-
known_option_name=${known_option%=$known_option_var}
153-
154-
# Short option
155-
if [[ "$option" = "$known_option_name" ]]; then
156-
option_value="yes"
157-
known_option_var=$(echo "$known_option_var" | tr "-" "_")
158-
eval "$known_option_var=\"$option_value\""
159-
break
160-
161-
# Long option
162-
elif [[ "$option" = -$known_option_name && "$known_option_var" != "?" ]]; then
163-
option_value="yes"
164-
known_option_var=$(echo "$known_option_var" | tr "-" "_")
165-
eval "$known_option_var=\"$option_value\""
166-
break
167-
168-
# Long option with value in next parameter
169-
elif [[ "$option" = -$known_option_name && "$known_option_var" = "?" ]]; then
170-
eval option_value="\$$OPTIND"
171-
if [[ -z "$option_value" || "$option_value" = -* ]]; then
172-
show_error "you must specify a value for --$known_option_name"
173-
exit 1
174-
fi
175-
OPTIND=$((OPTIND + 1))
176-
known_option_var=$(echo "$known_option_name" | tr "-" "_")
177-
eval "$known_option_var=\"$option_value\""
178-
break
179-
180-
# Long option with value after equal sign
181-
elif [[ "$option" = -$known_option_name=* && "$known_option_var" = "?" ]]; then
182-
option_value=${option#*=}
183-
known_option_var=$(echo "$known_option_name" | tr "-" "_")
184-
eval "$known_option_var=\"$option_value\""
185-
break
186-
187-
# Long option with unnecessary value
188-
elif [[ "$option" = -$known_option_name=* && "$known_option_var" != "?" ]]; then
189-
option_value=${option#*=}
190-
show_error "--$known_option_name does not accept a value, you specified \"$option_value\""
191-
exit 1
192-
fi
193-
done
194-
195-
# Unknown option
196-
if [[ -z "$option_value" ]]; then
197-
option=${option%%=*}
198-
[[ "$option" = \?* ]] && option=${option#*\?}
199-
show_error "unrecognized option -$option"
200-
exit 1
201-
fi
202194

203-
# Help option
204-
if [[ -n "$help" ]]; then
205-
[[ -z "$documentation" ]] && parse_documentation
206-
echo "$documentation"
207-
exit
208-
fi
209-
done
195+
# Unknown option
196+
if [[ -z "$option_value" ]]; then
197+
option=${option%%=*}
198+
[[ "$option" = \?* ]] && option=${option#*\?}
199+
show_error "unrecognized option -$option"
200+
exit 1
201+
fi
202+
203+
# Help option
204+
if [[ -n "$help" ]]; then
205+
[[ -z "$documentation" ]] && parse_documentation
206+
echo "$documentation"
207+
exit
208+
fi
209+
done
210210
}
211211

212212
parse_options "$@"

examples/fastapi-simple-docker-pip/scripts/easy-options/example.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
## format.
2222

2323
ROOT="$(realpath "$(dirname "$0")")"
24-
. "${ROOT}/opts.sh" || exit # Bash implementation, slower
24+
. "${ROOT}/easyoptions.sh" || exit # Bash implementation, slower
2525

2626
# Boolean and parameter options
27-
[[ -n "$some_option" ]] && echo "Option specified: --some-option"
27+
[[ -n "$some_option" ]] && echo "Option specified: --some-option"
2828
[[ -n "$some_boolean" ]] && echo "Option specified: --some-boolean"
29-
[[ -n "$some_value" ]] && echo "Option specified: --some-value is $some_value"
29+
[[ -n "$some_value" ]] && echo "Option specified: --some-value is $some_value"
3030

3131
# Arguments
3232
for argument in "${arguments[@]}"; do
33-
echo "Argument specified: $argument"
33+
echo "Argument specified: $argument"
3434
done

0 commit comments

Comments
 (0)