SCRIPT_TIME_SHORT="$(date +%Y%m%dT%H%M%S%z)" # Save current date & time in ISO-8601 format (YYYYmmddTHHMMSS+zzzz).
SCRIPT_DATE_SHORT="$(date +%Y%m%d)" # Save current date in ISO-8601 format.
+#==BEGIN Define script parameters
+declare -Ag appRollCall # Associative array for storing app status (function checkapp())
+declare -Ag fileRollCall # Associative array for storing file status (function checkfile())
+#==END Define script parameters
+
#== Function Definitions ==
-# Yell, Die, Try Three-Fingered Claw technique
-# Ref/Attrib: https://stackoverflow.com/a/25515370
-yell() { echo "$0: $*" >&2; }
+
+yell() { echo "$0: $*" >&2; } # Yell, Die, Try Three-Fingered Claw technique; # Ref/Attrib: https://stackoverflow.com/a/25515370
die() { yell "$*"; exit 111; }
try() { "$@" || die "cannot $*"; }
-
echoerr() {
# Usage: echo [ arguments ]
# Description: Prints provided arguments to stderr.
# License: GPLv3+
# Ref./Attrib:
- if [ "$OPTION_VERBOSE" == "true" ]; then
+ if [ "$OPTION_VERBOSE" = "true" ]; then
FUNCTION_TIME=$(date --iso-8601=ns); # Save current time in nano seconds.
- echoerr "[$FUNCTION_TIME] ""$@"; # Display argument text.
+ echoerr "[$FUNCTION_TIME] ""$*"; # Display argument text.
fi
# End function
# Perform work
while [ ! $# -eq 0 ]; do # While number of arguments ($#) is not (!) equal to (-eq) zero (0).
#1>&2 echo "DEBUG:Starting processArguments while loop." # Debug stderr message. See [1].
- #1>&2 echo "DEBUG:Provided arguments are:""$@" # Debug stderr message. See [1].
+ #1>&2 echo "DEBUG:Provided arguments are:""$*" # Debug stderr message. See [1].
case "$1" in
-h | --help) showUsage; exit 1;; # Display usage.
--version) showVersion; exit 1;; # Show version
vbm "DEBUG:checkExecutables function called."
declare -a candidateCommandsNames # Initialize array for storing positional arguments provided to this function.
candidateCommandsNames=("$@") # Save positional arguments to variable as string. See [3].
- vbm "DEBUG:candidateCommandsNames:""$@"
+ vbm "DEBUG:candidateCommandsNames:""$*"
vbm "DEBUG:candidateCommandsNames[0]:""${candidateCommandsNames[0]}"
vbm "DEBUG:candidateCommandsNames[1]:""${candidateCommandsNames[1]}"
vbm "DEBUG:candidateCommandsNames[2]:""${candidateCommandsNames[2]}"
vbm "DEBUG:updateTimeConstants function ended."
return 0; # Function finished.
} # Update time constants
+checkapp() {
+ # Desc: If arg is a command, save result in assoc array 'appRollCall'
+ # Usage: checkapp arg1 arg2 arg3 ...
+ # Input: global assoc. array 'appRollCall'
+ # Output: adds/updates key(value) to global assoc array 'appRollCall'
+ local returnState
+ #echo "DEBUG:$(date +%S.%N)..Starting checkapp function."
+ #echo "DEBUG:args: $*"
+ #echo "DEBUG:returnState:$returnState"
+
+ #===Process Args===
+ for arg in "$@"; do
+ #echo "DEBUG:processing arg:$arg"
+ if command -v "$arg" 1>/dev/null 2>&1; then # Check if arg is a valid command
+ appRollCall[$arg]="true";
+ #echo "DEBUG:appRollCall[$arg]:"${appRollCall[$arg]}
+ if ! [ "$returnState" = "false" ]; then returnState="true"; fi
+ else
+ appRollCall[$arg]="false"; returnState="false";
+ fi
+ done
+
+ #for key in "${!appRollCall[@]}"; do echo "DEBUG:$key => ${appRollCall[$key]}"; done
+ #echo "DEBUG:evaluating returnstate. returnState:"$returnState
+
+ #===Determine function return code===
+ if [ "$returnState" = "true" ]; then
+ #echo "DEBUG:checkapp returns true for $arg";
+ return 0;
+ else
+ #echo "DEBUG:checkapp returns false for $arg";
+ return 1;
+ fi
+} # Check that app exists
+checkfile() {
+ # Desc: If arg is a file path, save result in assoc array 'fileRollCall'
+ # Usage: checkfile arg1 arg2 arg3 ...
+ # Input: global assoc. array 'fileRollCall'
+ # Output: adds/updates key(value) to global assoc array 'fileRollCall';
+ # Output: returns 0 if app found, 1 otherwise
+ local returnState
+
+ #===Process Args===
+ for arg in "$@"; do
+ #echo "DEBUG:processing arg:$arg"
+ if [ -f "$arg" ]; then
+ fileRollCall["$arg"]="true";
+ #echo "DEBUG:fileRollCall[\"$arg\"]:"${fileRollCall["$arg"]}
+ if ! [ "$returnState" = "false" ]; then returnState="true"; fi
+ else
+ fileRollCall["$arg"]="false"; returnState="false";
+ fi
+ done
+
+ #for key in "${!fileRollCall[@]}"; do echo "DEBUG:fileRollCall key [$key] is:${fileRollCall[$key]}"; done
+ #echo "DEBUG:evaluating returnstate. returnState:"$returnState
+
+ #===Determine function return code===
+ if [ "$returnState" = "true" ]; then
+ #echo "DEBUG:checkapp returns true for $arg";
+ return 0;
+ else
+ #echo "DEBUG:checkapp returns false for $arg";
+ return 1;
+ fi
+} # Check that file exists
+
#== Main Program Definition ==
main() {