User Tools

Site Tools


bash_functions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
bash_functions [2014/08/05 18:49]
k2patel [Print lines on screen descending from the current point]
bash_functions [2020/08/10 02:35] (current)
Line 225: Line 225:
  
 [[ https://​www.linkedin.com/​groups/​How-can-i-verify-if-3716796.S.5862974732210556931?​view=&​item=5862974732210556931&​type=member&​gid=3716796&​trk=eml-b2_anet_digest-null-2-null&​fromEmail=fromEmail&​ut=3KLlfwU1D4UCk1 | From Article ]] [[ https://​www.linkedin.com/​groups/​How-can-i-verify-if-3716796.S.5862974732210556931?​view=&​item=5862974732210556931&​type=member&​gid=3716796&​trk=eml-b2_anet_digest-null-2-null&​fromEmail=fromEmail&​ut=3KLlfwU1D4UCk1 | From Article ]]
 +
 +==== floating point multiplication ====
 +<code bash>
 +fpmul() #@ Perform floating-point multiplication in the shell
 +{ #@ USAGE: fpmul [VAR] NUM.DEC ...
 +local _var= _places _tot _neg _n _int _dec _df _fpmul
 +if [[ ${1^^} =~ ^[A-Z_][A-Z0-9_]*$ ]]
 +then
 +_var=$1
 +shift
 +fi
 +_places=
 +_tot=1
 +_neg=
 +for _n
 +do
 +## 2 negatives make a positive
 +case $_n in
 +-*) [ "​$_neg"​ = '​-'​ ] && _neg= || _neg='​-'​
 +_n=${_n#-}
 +;;
 +esac
 +
 +## Check for non-numeric characters
 +case $_n in
 +*[!0-9.]*) return 1 ;;
 +esac
 +
 +## count the number of decimal _places,
 +## then remove the decimal point
 +case $_n in
 +.*) _int=
 +_dec=${_n#?​}
 +_places=$_places$_dec
 +_n=$_dec
 +;;
 +*.*) _dec=${_n#​*.}
 +_int=${_n%.*}
 +_places=$_places$_dec
 +_n=$_int$_dec
 +;;
 +esac
 +
 +## remove leading zeroes
 +while :
 +do
 +case $_n in
 +""​|0) _n=0
 +_fpmul=0
 +return
 +;;
 +0*) _n=${_n#0} ;;
 +*) break;;
 +esac
 +done
 +
 +## multiply by the previous _total
 +_tot=$(( $_tot * ${_n:-0} ))
 +
 +## report any overflow error
 +case $_tot in
 +-*) printf "​fpmul:​ overflow error: %s\n" "​$_tot"​ >&2
 +return 1
 +;;
 +esac
 +done
 +
 +while [ ${#_tot} -lt ${#_places} ]
 +do
 +_tot=0$_tot
 +done
 +
 +_df=
 +while [ ${#_df} -lt ${#_places} ]
 +do
 +left=${_tot%?​}
 +_df=${_tot#​$left}$_df
 +_tot=$left
 +done
 +_fpmul=$_tot${_df:​+.$_df}
 +
 +## remove trailing zeroes or decimal points
 +while :
 +do
 +case $_fpmul in
 +*.*[0\ ]|*.) _fpmul=${_fpmul%?​} ;;
 +.*) _fpmul=0$_fpmul ;;
 +*) break ;;
 +esac
 +done
 +
 +[[ $_var ]] &&
 +printf -v "​$_var"​ %s "​$_fpmul"​ ||
 +printf '​%s\n'​ "​$_fpmul"​
 +}
 +num.dec
 +</​code>​
 +
 +[[http://​www.linkedin.com/​groups/​Fridays-function-fpmul-Perform-floatingpoint-3716796.S.5921339472191987716?​view=&​item=5921339472191987716&​type=member&​gid=3716796&​trk=eml-b2_anet_digest-hero-1-hero-disc-disc-0&​midToken=AQG8JYIVdmXjvA&​fromEmail=fromEmail&​ut=3_RJ7vAOch56s1|From article]]
 +
 +==== show array ====
 +<code bash>
 +ashow() #@ Display contents of array[s]
 +{ #@ USAGE: ashow ARRAYNAME ...
 +local _arg _num=0
 +for arg
 +do
 +:; ((_num++)) && echo
 +:; declare -n array=$arg
 +:; [[ -n ${array[*]} ]] && printf '​%s\n'​ "​${array[@]}"​
 +done
 +}
 +</​code>​
 +
 +[[https://​www.linkedin.com/​groups/​Fridays-function-ashow-Display-contents-3716796.S.5918816399794409474?​view=&​item=5918816399794409474&​type=member&​gid=3716796&​trk=eml-b2_anet_digest-hero-4-hero-disc-disc-0&​midToken=AQG8JYIVdmXjvA&​fromEmail=fromEmail&​ut=19mP4Lva0K56s1|From Article]]
 +
 +==== Reverse Word ====
 +<code bash>
 +revword() #@ Reverse the order of characters in STRING
 +{ #@ USAGE: revword STRING [VAR]
 +local _n _word=$1 _var=$2 _len _r _rw= _l
 +while read -n1 _l
 +do
 +_rw=$_l$_rw
 +done <<<​ "​$_word"​
 +[[ ${_var^^} =~ ^[A-Z_][A-Z0-9_]*$ ]] &&
 +printf -v "​$_var"​ %s "​$_rw"​ ||
 +printf '​%s\n'​ "​$_rw"​
 +}
 +</​code>​
 +
 +[[ https://​www.linkedin.com/​groups/​Fridays-function-revword-Reverse-order-3716796.S.5916260779903975428?​view=&​item=5916260779903975428&​type=member&​gid=3716796&​trk=eml-b2_anet_digest-hero-1-hero-disc-disc-0&​midToken=AQG8JYIVdmXjvA&​fromEmail=fromEmail&​ut=13sqjyjg1356s1 | From Article ]]
 +
 +==== Trim Spaces ====
 +<code bash>
 +trim() #@ Trim spaces (or char in $2) from both ends of $1
 +{ #@ USAGE: trim STRING [CHAR [VAR]]
 +local _trim_string _trim=$1 _char=${2:- } _var=$3
 +_trim_string=${_trim##​*[!$_char]}
 +_trim=${_trim%"​$_trim_string"​}
 +_trim_string=${_trim%%[!$_char]*}
 +_trim=${_trim#"​$_trim_string"​}
 +is_var "​$_var"​ &&
 +printf -v "​$_var"​ %s "​$_trim"​ ||
 +printf '​%s\n'​ "​$_trim"​
 +}
 +</​code>​
 +
 +[[ https://​www.linkedin.com/​groups/​Fridays-function-trim-Trim-spaces-3716796.S.5908643378429460481?​view=&​item=5908643378429460481&​type=member&​gid=3716796&​trk=eml-b2_anet_digest-hero-1-hero-disc-disc-0&​midToken=AQG8JYIVdmXjvA&​fromEmail=fromEmail&​ut=2lgJiLIHdb56s1 | From Article ]]
bash_functions.1407264541.txt.gz ยท Last modified: 2020/08/10 02:28 (external edit)