#! /bin/bash # Copyright 2024 Steinar Knutsen # # Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the # European Commission - subsequent versions of the EUPL (the "Licence"); You may # not use this work except in compliance with the Licence. You may obtain a copy # of the Licence at: # # https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 # # Unless required by applicable law or agreed to in writing, software # distributed under the Licence is distributed on an "AS IS" basis, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # Licence for the specific language governing permissions and limitations under # the Licence. set -o errexit set -o pipefail shopt -s extglob helptext() { cat <<'EOF' Usage: bashtemplate [-b] [-h] [-s string] [-x number] first second Template file with a bunch of arbitrary settings to use for templating scripts. -b Set a boolean value to true. -h Print this message and exit. -s name Set a string value to "name". -x number Set a value for arithmetic operations to "number". EOF exit $1 } check_number() { if [[ "$1" != +([0-9]) ]]; then echo >&2 'X must be an integer equal to or greater than zero.' exit 1 fi echo $1 } BOOLEAN='' NAME='' X=0 while getopts bhs:x: option; do case $option in (b) BOOLEAN=TRUE;; (h) helptext 0;; (s) NAME="$OPTARG";; (x) X=$(check_number "$OPTARG");; (*) helptext >&2 1;; esac done shift $(( OPTIND - 1 )) if [[ $# -ne 2 ]]; then helptext >&2 1 fi FIRST="$1" SECOND="$2" TRAPZERR() { if [[ -v WORKFILE && -f "$WORKFILE" ]]; then rm -f "$WORKFILE" fi } trap TRAPZERR ERR WORKFILE="$(mktemp)" echo First is "$FIRST" echo Second is "$SECOND" if [[ -n "$BOOLEAN" ]] && (( X > 0 )); then echo Boolean is set and X is larger than 0. fi if [[ -z "$BOOLEAN" ]]; then echo Boolean is false. fi echo X is "$X" if [[ -n "$NAME" ]]; then echo Hello, "$NAME". fi rm "$WORKFILE"