From: Ian Kelling Date: Mon, 5 Sep 2016 06:50:38 +0000 (-0700) Subject: use gnu getopt for more flexible arg parsing X-Git-Url: https://iankelling.org/git/?a=commitdiff_plain;h=387a42dd5c45172627ba168355c9814536abb5da;p=basic-https-conf use gnu getopt for more flexible arg parsing --- diff --git a/apache-site b/apache-site index 8a67722..4550e85 100755 --- a/apache-site +++ b/apache-site @@ -13,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# run as root. [[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@" set -eE -o pipefail @@ -28,14 +27,13 @@ location for storing certs. EXTRA_SETTINGS_FILE can be - for stdin -p PORT --i Insecure, no ssl +-i Insecure, no ssl -c CERT_DIR In priority: this arg, $ACME_TINY_WRAPPER_CERT_DIR, $HOME/webservercerts, if the other options aren't set. --h|--help Print help and exit -r DocumentRoot --- Subsequent arguments are never treated as options +-h|--help Print help and exit -Note: options and non-options can be in any order. +Note: Uses GNU getopt options parsing style EOF exit $1 } @@ -48,22 +46,22 @@ if [[ ! $cert_dir ]]; then fi ssl=true extra_settings= -args=() port="*:443" -while [[ $1 ]]; do +temp=$(getopt -l help ic:p:r:h "$@") || usage 1 +eval set -- "$temp" +while true; do case $1 in - -i) ssl=false; shift ;; # i for insecure + -i) ssl=false; shift ;; -c) cert_dir="$2"; shift 2 ;; -p) port="$2"; shift 2 ;; -r) root="$2"; shift 2 ;; --) shift; break ;; - -?*|-h|--help) usage ;; - *) args+=("$1"); shift ;; + -h|--help) usage ;; + *) echo "$0: Internal error!" ; exit 1 ;; esac done -args+=("$@") -if (( ${#args[@]} == 2 )); then +if (( ${#@} == 2 )); then read extra_settings h <<<"${args[@]}" else read h <<<"${args[@]}"