вам даже не нужен if / elif.Вместо -h
настройки help = true
создайте функцию usage ()
, которая печатает справку по использованию и закрывает скрипт, -h
] может затем просто вызвать эту функцию.
почему вы используете встроенный код Python для выполнения работы, которую легче было бы выполнить с помощью grep
, sed
или awk
? или jq
ваш код все равно не будет работать. Кажется, вы запутались, что содержит $ data
. Согласно справке и оператору case getopts, $ data
содержит data / issueID
.... но похоже, что вы предполагаете, что он содержит содержимое URL, полученного с помощью wget
.
На самом деле, похоже, что вы даже не используете этот -d
data / issueID ... возможно, вам следует включить его в строку запроса в запросе wget
?
или -d
должно иметь имя файла в качестве аргумента? Судя по справочному сообщению, это маловероятно.
В любом случае, вот версия, которая устраняет большинство проблем (и, IMO, значительно улучшает читаемость сценария):
#!/bin/bash
URI='...whatever...'
usage() {
# print optional error message and help message and exit.
[ -z "$*" ] || printf "%s\n\n" "$*"
# or, if you don't want help printed with every error message:
# [ -z "$*" ] || printf "%s\n\nUse -h option for help.\n" "$*" && exit 1
cat >&2 <<__EOF__
----------jira options----------
Required:
-d [data/issueID]
-u [username] -> [username] is your JIRA username
-p [password] -> [password] is your JIRA password
Optional:
-q -> quiet, i.e. no output to console
-h -> help menu
__EOF__
exit 1
}
quiet=''
#using getopts to parse options
while getopts ":hqd:u:p:" opt; do
case $opt in
h) usage ;;
q) quiet='true' ;;
d) data="$OPTARG" ;;
u) username="$OPTARG" ;;
p) password="$OPTARG" ;;
\?) usage "Invalid option: -$OPTARG" ;;
:) usage "Option -$OPTARG requires an argument." ;;
esac
done
# check for required options
[ -z "$data" ] && usage '-d is required'
[ -z "$username" ] && usage '-u is required'
[ -z "$password" ] && usage '-p is required'
# your embedded python overkill could easily be done with `sed`
# or `awk`. or maybe `jq` as the wget output is json.
# but without a sample of the input I can't provide a guaranteed
# working example. The awk script below is a first attempt at
# extracting the value of `customfield_10701`
wget -q --http-user="$username" \
--http-passwd="$password" \
--header='Content-Type: application/json' \
-O -
"$URI" |
awk -F': ' '/"customfield_10701"/ {
gsub(/[",]/,"",$2);
print $2
}' > branchversion.txt
# alternatively, if you have `jq` installed, try piping wget's
# output through something like `jq -r .customfield_10701` instead of awk.
#prints the branch version if the quiet option hasn't been set
if [ -z "$quiet" ]; then
echo "-------------------------------------------"
echo ""
echo "The branch version for issue $data is:"
cat branchversion.txt
echo ""
fi