From bf9df3ef6b1b121476c6bf304acfeccc508867b1 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Tue, 4 Jan 2022 12:20:09 +0200 Subject: [PATCH] Adds better command options. Few bug fixes. Better syntax. --- src/chapter.sh | 72 ++++++++++++++++++++++++++++++++++++++++---------- src/name.sh | 63 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 111 insertions(+), 24 deletions(-) diff --git a/src/chapter.sh b/src/chapter.sh index 1eb6546..3f11d4c 100755 --- a/src/chapter.sh +++ b/src/chapter.sh @@ -9,25 +9,69 @@ command -v curl >/dev/null 2>&1 || { echo >&2 "We require curl for this script to run, but it's not installed. Aborting." exit 1 } + # set the query (default: 1 John 3:16-18) -QUERY="${1:-62 3:16-18}" +SCRIPTURE="${1:-62 3:16-18}" # set the translation (default: kjv) -VERSION="${2:-kjv}" +: "${VERSION:=kjv}" + +# check if we have options +while :; do + case $1 in + -s | --scripture) # Takes an option argument; ensure it has been specified. + if [ "$2" ]; then + SCRIPTURE=$2 + shift + else + echo >&2 '"--scripture" requires a non-empty option argument.' + exit 17 + fi + ;; + -s=?* | --scripture=?*) + SCRIPTURE=${1#*=} # Delete everything up to "=" and assign the remainder. + ;; + -s= | --scripture=) # Handle the case of an empty --scripture= + echo >&2 '"--scripture=" requires a non-empty option argument.' + exit 17 + ;; + -v | --version) # Takes an option argument; ensure it has been specified. + if [ "$2" ]; then + VERSION=$2 + shift + else + echo >&2 '"--version" requires a non-empty option argument.' + exit 17 + fi + ;; + -v=?* | --version=?*) + VERSION=${1#*=} # Delete everything up to "=" and assign the remainder. + ;; + -v= | --version=) # Handle the case of an empty --version= + echo >&2 '"--version=" requires a non-empty option argument.' + exit 17 + ;; + *) # Default case: No more options, so break out of the loop. + break ;; + esac + shift +done + # get the name from the query TODO: find better filter -BOOKNAME=$(echo ${QUERY%%[0-9][0-9]?:*} | xargs echo -n) -BOOKNAME=$(echo ${BOOKNAME%%[0-9]?:*} | xargs echo -n) -BOOKNAME=$(echo ${BOOKNAME%%[0-9]:*} | xargs echo -n) +BOOK_NAME=$(echo "${SCRIPTURE%%[0-9][0-9]?:*}" | xargs echo -n) +BOOK_NAME=$(echo "${BOOK_NAME%%[0-9]?:*}" | xargs echo -n) +BOOK_NAME=$(echo "${BOOK_NAME%%[0-9]:*}" | xargs echo -n) + # check if the name was given by number re='^[0-9]+$' -if [[ "$BOOKNAME" =~ $re ]]; then - BOOK_NR="${BOOKNAME}" +if [[ "$BOOK_NAME" =~ $re ]]; then + BOOK_NR="${BOOK_NAME}" else # get the list of books from the API to get the book number BOOKS=$(curl -s "https://getbible.net/v2/${VERSION}/books.json") - BOOK_NR=$(echo "$BOOKS" | jq -r ".[] | select(.name == \"${BOOKNAME}\") | .nr") + BOOK_NR=$(echo "$BOOKS" | jq -r ".[] | select(.name == \"${BOOK_NAME}\") | .nr") fi # get chapter and verses numbers -NUMBERS=$(echo "${QUERY/$BOOKNAME/}" | xargs echo -n) +NUMBERS=$(echo "${SCRIPTURE/$BOOK_NAME/}" | xargs echo -n) # get chapter number CHAPTER_NR=$(echo "${NUMBERS%:*}" | xargs echo -n) # get verses numbers @@ -37,7 +81,7 @@ CHAPTER=$(curl -s "https://getbible.net/v2/${VERSION}/${BOOK_NR}/${CHAPTER_NR}.j # read verses into array by comma separator IFS=',' read -ra VERSES_NR_ARRAY <<<"${VERSES_NR}" # start the scripture array -SCRIPTURE=() +SCRIPTURE_VERSE=() # load the verses in this loop over the verse numbers sets for VER_NR in "${VERSES_NR_ARRAY[@]}"; do # check if this is a range of verses @@ -48,14 +92,14 @@ for VER_NR in "${VERSES_NR_ARRAY[@]}"; do while [ "$START" -le "$END" ]; do VERSE=$(echo "$CHAPTER" | jq -r ".verses[] | select(.verse == ${START})") TEXT=$(echo "$VERSE" | jq -r '.text') - SCRIPTURE+=("${START} ${TEXT}") - START=$(($START + 1)) + SCRIPTURE_VERSE+=("${START} ${TEXT}") + START=$(( START + 1 )) done else VERSE=$(echo "$CHAPTER" | jq ".verses[] | select(.verse == ${VER_NR})") TEXT=$(echo "$VERSE" | jq -r '.text') - SCRIPTURE+=("${VER_NR} ${TEXT}") + SCRIPTURE_VERSE+=("${VER_NR} ${TEXT}") fi done # we return the scripture one verse per/line -IFS=$'\n'; echo "${SCRIPTURE[*]}" +IFS=$'\n'; echo "${SCRIPTURE_VERSE[*]}" diff --git a/src/name.sh b/src/name.sh index 4583636..2dccde9 100755 --- a/src/name.sh +++ b/src/name.sh @@ -10,25 +10,68 @@ command -v curl >/dev/null 2>&1 || { exit 1 } # set the query (default: 1 John 3:16-18) -QUERY="${1:-62 3:16-18}" +SCRIPTURE="${1:-62 3:16-18}" # set the translation (default: kjv) -VERSION="${2:-kjv}" +: "${VERSION:=kjv}" + +# check if we have options +while :; do + case $1 in + -s | --scripture) # Takes an option argument; ensure it has been specified. + if [ "$2" ]; then + SCRIPTURE=$2 + shift + else + echo >&2 '"--scripture" requires a non-empty option argument.' + exit 17 + fi + ;; + -s=?* | --scripture=?*) + SCRIPTURE=${1#*=} # Delete everything up to "=" and assign the remainder. + ;; + -s= | --scripture=) # Handle the case of an empty --scripture= + echo >&2 '"--scripture=" requires a non-empty option argument.' + exit 17 + ;; + -v | --version) # Takes an option argument; ensure it has been specified. + if [ "$2" ]; then + VERSION=$2 + shift + else + echo >&2 '"--version" requires a non-empty option argument.' + exit 17 + fi + ;; + -v=?* | --version=?*) + VERSION=${1#*=} # Delete everything up to "=" and assign the remainder. + ;; + -v= | --version=) # Handle the case of an empty --version= + echo >&2 '"--version=" requires a non-empty option argument.' + exit 17 + ;; + *) # Default case: No more options, so break out of the loop. + break ;; + esac + shift +done + # get the name from the query TODO: find better filter -BOOKNAME=$(echo ${QUERY%%[0-9][0-9]?:*} | xargs echo -n) -BOOKNAME=$(echo ${BOOKNAME%%[0-9]?:*} | xargs echo -n) -BOOKNAME=$(echo ${BOOKNAME%%[0-9]:*} | xargs echo -n) +BOOK_NAME=$(echo "${SCRIPTURE%%[0-9][0-9]?:*}" | xargs echo -n) +BOOK_NAME=$(echo "${BOOK_NAME%%[0-9]?:*}" | xargs echo -n) +BOOK_NAME=$(echo "${BOOK_NAME%%[0-9]:*}" | xargs echo -n) + # check if the name was given by number re='^[0-9]+$' -if [[ "$BOOKNAME" =~ $re ]]; then +if [[ "$BOOK_NAME" =~ $re ]]; then # get the list of books from the API to get the book number BOOKS=$(curl -s "https://getbible.net/v2/${VERSION}/books.json") - BOOK_NAME=$(echo "$BOOKS" | jq -r ".[] | select(.nr == ${BOOKNAME}) | .name") + BOOK_FULL_NAME=$(echo "$BOOKS" | jq -r ".[] | select(.nr == ${BOOK_NAME}) | .name") # get chapter and verses numbers - NUMBERS=$(echo "${QUERY/$BOOKNAME/}" | xargs echo -n) + NUMBERS=$(echo "${SCRIPTURE/$BOOK_NAME/}" | xargs echo -n) # get chapter and verses numbers - echo "${BOOK_NAME} ${NUMBERS}" + echo "${BOOK_FULL_NAME} ${NUMBERS}" else - echo "$QUERY" + echo "$SCRIPTURE" fi exit 0