style(bkgpslog):Update timeDuration
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Thu, 2 Jul 2020 21:54:26 +0000 (21:54 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Thu, 2 Jul 2020 21:54:26 +0000 (21:54 +0000)
exec/bkgpslog

index 97231f80a702e3b304e3f244cd52234f2d2c07c2..723960f1d444e3fd63df7424f3bb010a6f0b67fa 100755 (executable)
@@ -351,59 +351,61 @@ dateShort(){
     echo "$DATE_CURRENT_SHORT";
 } # Get YYYYmmdd
 timeDuration(){
     echo "$DATE_CURRENT_SHORT";
 } # Get YYYYmmdd
 timeDuration(){
-    # Desc: Output approximate time duration string before given time (default:current date)
+    # Desc: Given seconds, output ISO-8601 duration string
     # Ref/Attrib: ISO-8601:2004(E), §4.4.4.2 Representations of time intervals by duration and context information
     # Note: "1 month" ("P1M") is assumed to be "30 days" (see ISO-8601:2004(E), §2.2.1.2)
     # Ref/Attrib: ISO-8601:2004(E), §4.4.4.2 Representations of time intervals by duration and context information
     # Note: "1 month" ("P1M") is assumed to be "30 days" (see ISO-8601:2004(E), §2.2.1.2)
-    # Usage: timeDuration [arg1] ([arg2])
-    # Version: 1.0.1
+    # Usage: timeDuration [1:seconds] ([2:precision])
+    # Version: 1.0.3
     # Input: arg1: seconds as base 10 integer >= 0  (ex: 3601)
     #        arg2: precision level (optional; default=2)
     # Output: stdout: ISO-8601 duration string (ex: "P1H1S", "P2Y10M15DT10H30M20S")
     # Input: arg1: seconds as base 10 integer >= 0  (ex: 3601)
     #        arg2: precision level (optional; default=2)
     # Output: stdout: ISO-8601 duration string (ex: "P1H1S", "P2Y10M15DT10H30M20S")
+    #         exit code 0: success
+    #         exit code 1: error_input
+    #         exit code 2: error_unknown
     # Example: 'timeDuration 111111 3' yields 'P1DT6H51M'
     # Depends: date 8 (gnucoreutils), yell, 
     # Example: 'timeDuration 111111 3' yields 'P1DT6H51M'
     # Depends: date 8 (gnucoreutils), yell, 
-    local returnState ARG1 ARG2 remainder precision witherPrecision
+    local returnState argSeconds argPrecision remainder precision witherPrecision
     local fullYears fullMonths fullDays fullHours fullMinutes fullSeconds
     local displayYears displayMonths displayDays displayHours displayMinutes displaySeconds
     local hasYears hasMonths hasDays hasHours hasMinutes hasSeconds
     
     local fullYears fullMonths fullDays fullHours fullMinutes fullSeconds
     local displayYears displayMonths displayDays displayHours displayMinutes displaySeconds
     local hasYears hasMonths hasDays hasHours hasMinutes hasSeconds
     
-    ARG1="$1";
-    ARG2="$2";
+    argSeconds="$1"; # read arg1 (seconds)
+    argPrecision="$2"; # read arg2 (precision)
     precision=2; # set default precision
     precision=2; # set default precision
-    returnState="true"; # set default return state
 
     # Check that between one and two arguments is supplied
     if ! { [[ $# -ge 1 ]] && [[ $# -le 2 ]]; }; then
        yell "ERROR:Invalid number of arguments:$# . Exiting.";
 
     # Check that between one and two arguments is supplied
     if ! { [[ $# -ge 1 ]] && [[ $# -le 2 ]]; }; then
        yell "ERROR:Invalid number of arguments:$# . Exiting.";
-       returnState="ERROR_INPUT"; fi
+       returnState="error_input"; fi
 
 
-    # Check that arg1 provided
+    # Check that argSeconds provided
     if [[ $# -ge 1 ]]; then
     if [[ $# -ge 1 ]]; then
-       ## Check that arg1 is a positive integer
-       if [[ "$ARG1" =~ ^[[:digit:]]+$ ]]; then
+       ## Check that argSeconds is a positive integer
+       if [[ "$argSeconds" =~ ^[[:digit:]]+$ ]]; then
            :
        else
            :
        else
-           yell "ERROR:ARG1 not a digit.";
-           returnState="ERROR_INPUT";
+           yell "ERROR:argSeconds not a digit.";
+           returnState="error_input";
        fi
     else
        yell "ERROR:No argument provided. Exiting.";
        exit 1;
     fi
 
        fi
     else
        yell "ERROR:No argument provided. Exiting.";
        exit 1;
     fi
 
-    # Consider whether arg2 was provided
+    # Consider whether argPrecision was provided
     if  [[ $# -eq 2 ]]; then
     if  [[ $# -eq 2 ]]; then
-       # Check that the second arg is a positive integer
-       if [[ "$ARG2" =~ ^[[:digit:]]+$ ]] && [[ "$ARG2" -gt 0 ]]; then
-       precision="$ARG2";
+       # Check that argPrecision is a positive integer
+       if [[ "$argPrecision" =~ ^[[:digit:]]+$ ]] && [[ "$argPrecision" -gt 0 ]]; then
+       precision="$argPrecision";
        else
        else
-           yell "ERROR:ARG2 not a positive integer. (is $ARG2 ). Leaving early.";
-           returnState="ERROR_INPUT";
+           yell "ERROR:argPrecision not a positive integer. (is $argPrecision ). Leaving early.";
+           returnState="error_input";
        fi;
     else
        :
     fi;
     
        fi;
     else
        :
     fi;
     
-    remainder="$ARG1" ; # seconds
+    remainder="$argSeconds" ; # seconds
     ## Calculate full years Y, update remainder
     fullYears=$(( remainder / (365*24*60*60) ));
     remainder=$(( remainder - (fullYears*365*24*60*60) ));
     ## Calculate full years Y, update remainder
     fullYears=$(( remainder / (365*24*60*60) ));
     remainder=$(( remainder - (fullYears*365*24*60*60) ));
@@ -503,8 +505,6 @@ timeDuration(){
     fi;
     if $witherPrecision; then ((precision--)); fi;
 
     fi;
     if $witherPrecision; then ((precision--)); fi;
 
-
-
     ## Determine whether or not the "T" separator is needed to separate date and time elements
     if ( $displayHours || $displayMinutes || $displaySeconds); then
        displayDateTime="true"; else displayDateTime="false"; fi
     ## Determine whether or not the "T" separator is needed to separate date and time elements
     if ( $displayHours || $displayMinutes || $displaySeconds); then
        displayDateTime="true"; else displayDateTime="false"; fi
@@ -527,14 +527,17 @@ timeDuration(){
        OUTPUT=$OUTPUT$fullSeconds"S"; fi
 
     ## Output duration string to stdout
        OUTPUT=$OUTPUT$fullSeconds"S"; fi
 
     ## Output duration string to stdout
-    if [[ "$returnState" = "true" ]]; then echo "$OUTPUT"; fi
+    echo "$OUTPUT" && returnState="true";
 
     #===Determine function return code===
     if [ "$returnState" = "true" ]; then
        return 0;
 
     #===Determine function return code===
     if [ "$returnState" = "true" ]; then
        return 0;
-    else
-       echo "$returnState" 1>&2;
+    elif [ "$returnState" = "error_input" ]; then
+       yell "ERROR:input";
        return 1;
        return 1;
+    else
+       yell "ERROR:Unknown";
+       return 2;
     fi
 
 } # Get duration (ex: PT10M4S )
     fi
 
 } # Get duration (ex: PT10M4S )