diff --git a/teil23/parseargs.sh b/teil23/parseargs.sh new file mode 100755 index 0000000..8580467 --- /dev/null +++ b/teil23/parseargs.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# Universelle Parameterparser-Funktion +parse_args() { + POSITIONAL=() + while [[ $# -gt 0 ]]; do + case "$1" in + -h|--help) + echo "Usage: $0 [options]" + echo "Options:" + echo " -h, --help Show this help message" + echo " -v, --verbose Enable verbose mode" + echo " -f, --file Specify a file" + echo " -n, --number Specify a number (default: 42)" + exit 0 + ;; + -v|--verbose) + VERBOSE=true + shift + ;; + -f|--file) + if [[ -z "$2" || "$2" == -* ]]; then + echo "Error: --file requires a non-empty argument." + exit 1 + fi + FILE="$2" + shift 2 + ;; + -n|--number) + if [[ -z "$2" || "$2" == -* ]]; then + echo "Error: --number requires a non-empty argument." + exit 1 + fi + NUMBER="$2" + shift 2 + ;; + --) # Explicit end of options + shift + break + ;; + -*) # Unknown option + echo "Error: Unknown option $1" + exit 1 + ;; + *) # Positional argument + POSITIONAL+=("$1") + shift + ;; + esac + done + set -- "${POSITIONAL[@]}" # Restore positional parameters + + # Defaults + VERBOSE="${VERBOSE:-false}" + NUMBER="${NUMBER:-42}" +} + +# Aufruf der Funktion mit allen Skriptargumenten +parse_args "$@" + +# Beispielnutzung +echo "Verbose mode: $VERBOSE" +echo "File: ${FILE:-}" +echo "Number: $NUMBER" +echo "Positional arguments: $@" +