#!/bin/bash ############################################################################### # Opdracht uitvoeren. # # Geschreven door Karel Zimmer . ############################################################################### PROGRAM_PATH=$(realpath "$(dirname "$0")") readonly PROGRAM_PATH #source "$PROGRAM_PATH"/kz-common.sh readonly PROGRAM_NAME='kz' readonly DISPLAY_NAME=${PROGRAM_NAME/kz-/kz } readonly RELEASE_YEAR=2021 ############################################################################### # Global constants ############################################################################### readonly SUCCESS=0 readonly ERROR=1 readonly USAGE="Gebruik: $DISPLAY_NAME OPDRACHT [ARG] of: $DISPLAY_NAME [-l|--list] [-u|--usage] [-h|--help] [-v|--version]" readonly HELP="Gebruik: $DISPLAY_NAME OPDRACHT [ARG] of: $DISPLAY_NAME OPTIE Opdracht uitvoeren. Opties: -l, --list toon beschikbare OPDRACHTen -h, --help toon deze hulptekst -u, --usage toon een korte gebruikssamenvatting -v, --version toon programmaversie Argumenten: OPDRACHT uit te voeren opdracht ARG argumenten behorend bij OPDRACHT" ############################################################################### # Global variables ############################################################################### # Terminalattributen, zie 'man terminfo'. Gebruik ${}. declare BLUE='' declare NORMAL='' ############################################################################### # Functions ############################################################################### function init_script { # Script-hardening. set -o errexit set -o errtrace set -o nounset set -o pipefail BLUE=$(tput bold; tput setaf 4) NORMAL=$(tput sgr0) } function check_input { # Geen getopt want opgegeven opties zijn voor 'OPDRACHT', niet voor kz. if ! [[ "$*" ]]; then printf "$DISPLAY_NAME: %s\n" "verplicht argument 'OPDRACHT' ontbreekt Typ '$DISPLAY_NAME --usage' voor meer informatie." >&2 exit $ERROR elif [[ $1 == *-u* ]]; then process_option_usage exit $SUCCESS elif [[ $1 == *-h* ]]; then process_option_help exit $SUCCESS elif [[ $1 == *-v* ]]; then process_option_version exit $SUCCESS elif [[ $1 == *-l* ]]; then show_commands exit $SUCCESS elif ! [[ -e "$PROGRAM_PATH/kz-$1" ]]; then printf "$DISPLAY_NAME: %s\n" "opdracht '$1' bestaat niet Typ '$DISPLAY_NAME --usage' voor meer informatie." >&2 exit $ERROR fi } function show_commands { printf '%s\n' 'De volgende OPDRACHTen zijn beschikbaar: OPDRACHT' find "$PROGRAM_PATH"/kz-* \ -maxdepth 1 \ -type f \ -executable \ -readable \ -not -name '*~' \ -not -name 'kz' \ -printf '%f\n' | sort | sed --expression='s/kz-//' | nl --number-width=2 \ --number-format=rn \ --number-separator='] ' \ --body-numbering=a | sed --expression='s/^/[/' printf '\n%s %s\n' \ "Om een OPDRACHT uit te voeren:" \ "${BLUE}$DISPLAY_NAME OPDRACHT${NORMAL}" } function process_option_usage { printf '%s\n\n%s\n' \ "$USAGE" \ "Typ '$DISPLAY_NAME --help' voor meer informatie." } function process_option_help { printf '%s\n\n%s\n' "$HELP" "Typ 'man $DISPLAY_NAME' voor meer informatie." } function process_option_version { local build='' local copyright_years=1970 local this_year=1970 build=$(cat /usr/local/etc/kz-build 2> /dev/null || printf '%s' 'unknown') this_year=$(date +%Y) if [[ $RELEASE_YEAR -eq $this_year ]]; then copyright_years=$this_year else copyright_years=$RELEASE_YEAR-$this_year fi printf '%s\n' "$DISPLAY_NAME versie 365 (kz build $build) Geschreven door Karel Zimmer . Auteursrecht (c) $copyright_years Karel Zimmer. GNU Algemene Publieke Licentie ." } function process_input { local program_name='' program_name=$1 shift exec "$PROGRAM_PATH/kz-$program_name" "$@" } function term_script { exit $SUCCESS } ############################################################################### # Script ############################################################################### function main { init_script check_input "$@" process_input "$@" term_script } main "$@"