#!/usr/bin/env bash set -euo pipefail usage() { printf "Usage: %s -n NAME [-v] [FILE...]\n" "${0##*/}" >&2 } verbose=0 name="" while getopts ":n:vh" opt; do case "$opt" in n) name=$OPTARG ;; v) verbose=1 ;; h) usage; exit 0 ;; :) printf "Missing argument for -%s\n" "$OPTARG" >&2; usage; exit 2 ;; \?) printf "Invalid option: -%s\n" "$OPTARG" >&2; usage; exit 2 ;; esac done shift "$((OPTIND - 1))" if [ -z "$name" ]; then printf "Missing required option: -n\n" >&2 usage exit 2 fi printf "name=%s\n" "$name" printf "verbose=%s\n" "$verbose" printf "remaining=%s\n" "$*"