# LECA Bash library # # The LECA bash library provides a set of function used for helping # development of bash script mainly to write job script on the luke # cluster # # The files from the LECA Bash library must be sourced from your main script # # # Provides function for manipulating a stack of values # ==================================================== # # Provides function: # # - newstack # Creates a new stack named STACKNAME # # - stacksize # Returns the count of element stored in the stack # # - pushvalue # Adds the value VALUE at the end of the stack STACKNAME # # - popvalue # Pops out the last pushed value of the stack. # If the stack is already empty the function returns nothing # and the return status is set to 1 instead of 0 usually # include logging logdebug "Load stacks package" function newstack() { eval declare -a "${1}" } function stacksize() { eval "echo \${#${1}[@]}" } function pushvalue() { p="${1}[$(stacksize ${1})]=\"${2}\"" eval "$p" } function popvalue() { local __popvalue_STACK="${1}" shift if [[ ! -z "${1}" ]]; then local __popvalue_COMMAND="${1}=" else local __popvalue_COMMAND="echo " fi local __popvalue_s=$(stacksize ${__popvalue_STACK}) if (( __popvalue_s == 0 )); then return 1 fi local __popvalue_valcmd="${__popvalue_COMMAND}\${${__popvalue_STACK}[\$(( __popvalue_s - 1 ))]}" eval $__popvalue_valcmd __popvalue_valcmd="unset ${__popvalue_STACK}[\$(( __popvalue_s - 1 ))]" eval $__popvalue_valcmd return 0 }