feat(user/rand_media_pl.sh):Make robust and parallelize
[BK-2020-03.git] / unitproc / bktemplate
index 134d3ce422d7b5aa9f6b223982d4ce68f21ab2b0..111cf7df6d77aaab96fcd5df59ffa658b7e7b0ac 100755 (executable)
@@ -4,9 +4,9 @@
 # Description: Template for bash scripts.
 # Note: Use hide-show-block function to aid readability. (ex: https://www.emacswiki.org/emacs/HideShow ).
 
 # Description: Template for bash scripts.
 # Note: Use hide-show-block function to aid readability. (ex: https://www.emacswiki.org/emacs/HideShow ).
 
-#== Variable Initialization ==
+#==BEGIN Variable Initialization==
 
 
-#== Global constants ==
+#===BEGIN Global constants===
 SCRIPT_TTL=10                   # Limit script life to this in seconds.
 PATH="/usr/local/bin/:$PATH"    # Add user binary executable directory to PATH.
 PATH="/opt/bktei:$PATH"         # Add 'optional' executable directory to PATH.
 SCRIPT_TTL=10                   # Limit script life to this in seconds.
 PATH="/usr/local/bin/:$PATH"    # Add user binary executable directory to PATH.
 PATH="/opt/bktei:$PATH"         # Add 'optional' executable directory to PATH.
@@ -14,16 +14,19 @@ SCRIPT_HOSTNAME=$(hostname)     # Save hostname of system running this script.
 SCRIPT_VERSION="bktemplate.sh 0.0.0" # Define version of script. Used by function 'showVersion'.
 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.
 SCRIPT_VERSION="bktemplate.sh 0.0.0" # Define version of script. Used by function 'showVersion'.
 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.
+#===END Global constants===
 
 
-#== Function Definitions ==
+#===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
+#==END Variable Initialization==
 
 
-# Yell, Die, Try Three-Fingered Claw technique
-# Ref/Attrib: https://stackoverflow.com/a/25515370
-yell() { echo "$0: $*" >&2; }
+#==BEGIN Function Definitions==
+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 $*"; }
 
 die() { yell "$*"; exit 111; }
 try() { "$@" || die "cannot $*"; }
 
-
 echoerr() {
     # Usage: echo [ arguments ]
     # Description: Prints provided arguments to stderr.
 echoerr() {
     # Usage: echo [ arguments ]
     # Description: Prints provided arguments to stderr.
@@ -54,9 +57,9 @@ vbm() {
     # License: GPLv3+
     # Ref./Attrib:
 
     # 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.
        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
     fi
 
     # End function
@@ -178,7 +181,7 @@ processArguments() {
     # 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].
     # 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
        case "$1" in
            -h | --help) showUsage; exit 1;; # Display usage.
            --version) showVersion; exit 1;; # Show version
@@ -267,7 +270,7 @@ checkExecutables() {
     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: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:candidateCommandsNames[0]:""${candidateCommandsNames[0]}"
     vbm "DEBUG:candidateCommandsNames[1]:""${candidateCommandsNames[1]}"
     vbm "DEBUG:candidateCommandsNames[2]:""${candidateCommandsNames[2]}"
@@ -339,8 +342,72 @@ updateTimeConstants() {
     vbm "DEBUG:updateTimeConstants function ended."
     return 0; # Function finished.
 } # Update time constants
     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
 
 
-#== Main Program Definition ==
+    #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() {
     # Usage: main "$@"    # See [1].
     # Input: unspecified (note: all Global Constants declared at beginning of script assumed to be available)
 main() {
     # Usage: main "$@"    # See [1].
     # Input: unspecified (note: all Global Constants declared at beginning of script assumed to be available)
@@ -400,8 +467,10 @@ main() {
     # End function
     vbm "DEBUG:main function ended."
     return 0; # Function finished.
     # End function
     vbm "DEBUG:main function ended."
     return 0; # Function finished.
-}
+} # Main function
+#==END Function Definitions==
 
 
-#== Perform work and exit ==
+#==BEGIN Perform work and exit==
 main "$@" # Run main function.
 exit 0;
 main "$@" # Run main function.
 exit 0;
+#==END Perform work and exit==