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 [2013/05/18 17:56]
k2patel [die # Exit with error code and optional message]
bash_functions [2020/08/10 02:35] (current)
Line 39: Line 39:
 </​code>​ </​code>​
 [[ http://​www.linkedin.com/​groups/​Fridays-function-overlay-3716796.S.241936021?​view=&​gid=3716796&​type=member&​item=241936021&​trk=eml-anet_dig-b_nd-pst_ttle-cn | From Article ]] [[ http://​www.linkedin.com/​groups/​Fridays-function-overlay-3716796.S.241936021?​view=&​gid=3716796&​type=member&​item=241936021&​trk=eml-anet_dig-b_nd-pst_ttle-cn | From Article ]]
 +
 +==== Print the ASCII value of the first character ====
 +<code bash>
 +asc() #@ Print the ASCII value of the first character of each argument ​
 +{ #@ USAGE: asc STRING ... 
 +for char 
 +do 
 +printf "​%d${EOV-\n}"​ "'​$char" ​
 +done
 +}
 +</​code>​
 +[[ http://​www.linkedin.com/​groups/​Fridays-function-asc-Print-ASCII-3716796.S.252009597?​view=&​gid=3716796&​type=member&​item=252009597&​trk=eml-anet_dig-b_nd-pst_ttle-cn | From Article ]]
 +
 +==== Print argument in reverse ====
 +<code bash>
 +revword() #@ print each argument with bytes reversed
 +for w
 +do
 +len=${#w}
 +w2=
 +n=0
 +while (( ${#w2} < len ))
 +do
 +w2=${w:​n++:​1}$w2
 +done
 +printf "​%s\n"​ "​$w2"​
 +done
 +</​code>​
 +[[ http://​www.linkedin.com/​groups/​Fridays-function-revword-3716796.S.253755071?​view=&​gid=3716796&​type=member&​item=253755071&​trk=eml-anet_dig-b_nd-pst_ttle-cn | From Article ]]
 +
 +==== Add directory or directories to PATH ====
 +<code bash>
 +addpath() #@ add directory or directories to $PATH
 +{ #@ USAGE: addpath DIR ...
 +local prefix=0 quiet=0 OPTIND=1 p
 +
 +while getopts iq var
 +do
 +case "​$var"​ in
 +i) prefix=1 ;;
 +q) quiet=1 ;;
 +esac
 +done
 +shift $(( $OPTIND - 1 ))
 +
 +for p
 +do
 +p=${p%"​${p##​*[!/​]}"​} ## remove trailing slashes
 +case $p in
 +""​|.) continue ;;
 +esac
 +case :$PATH: in
 +*:$p:*)
 +(( quiet == 0 )) && echo "​addpath:​ $p already in path" >&2
 +continue
 +;;
 +esac
 +if [ -d "​$p"​ ]
 +then
 +(( prefix == 1 )) && PATH=$p:​$PATH || PATH=$PATH:​$p
 +else
 +[ $quiet -eq 0 ] && echo "​addpath:​ $p is not a directory"​ >&2
 +fi
 +done
 +export PATH ## probably unnecessary
 +}
 +</​code>​
 +
 +[[ http://​www.linkedin.com/​groups/​Fridays-function-addpath-Add-one-3716796.S.255801510 | From Article ]]
 +
 +==== Return random date in given range of years ====
 +<code bash>
 +random_date() #@ Return random date in given range of years
 +{ #@ USAGE: random_date FIRST LAST [VAR]
 +#@ Global variables set: random_date [VAR]
 +local first=${1:​-1752} last=${2:​-2100} var=$3
 +declare -i year month day dim
 +year=$(( RANDOM % (last-first) + first ))
 +month=$(( RANDOM % 12 + 1 ))
 +days_in_month dim "​$month"​ "​$year"​
 +day=$(( RANDOM % dim + 1 ))
 +printf -v random_date "​%d-%02d-%02d"​ "​$year"​ "​$month"​ "​$day"​
 +is_var "​$var"​ &&
 +printf -v "​$var"​ %s "​$random_date"​ ||
 +printf "​%s\n"​ "​$random_date"​
 +}
 +</​code>​
 +
 +[[ http://​www.linkedin.com/​groups/​Fridays-function-randomdate-Return-random-3716796.S.5799573907065286656 | From Article ]]
 +
 +==== Check if it is factor ====
 +<code bash>
 +is_factor() #@ Return successfully if $2 is a factor of $1
 +{ #@ USAGE: is_factor NUMBER FACTOR
 +local number=$1 factor=$2
 +(( ((number / factor) * factor) == number ))
 +}
 +</​code>​
 +
 +[[ http://​www.linkedin.com/​groups/​Fridays-function-isfactor-Return-successfully-3716796.S.5794561860833390593 | From Article ]]
 +
 +==== Check if it is factor ====
 +<code bash>
 +dec2bin() #@ Convert decimal integer to binary optionally padding with zeroes ​
 +{ #@ USAGE: dec2bin INT [WIDTH] [VAR] 
 +local val=$1 _w=$2 var=$3 _b=2 _r bin 
 +if (( $# == 1 )) || is_var "​$2"​ ## is_var() posted last month 
 +then 
 +_w=1 
 +fi 
 +while ((val)) ​
 +do 
 +_r=$(( $val % $_b )) 
 +bin=$_r$bin; ​
 +val=$(( val / _b )) 
 +done 
 +printf -v bin "​%0${_w}d"​ "​$((10#​$bin))" ​
 +is_var "​$var"​ && printf -v "​$var"​ %s "​$bin"​ || printf "​%s\n"​ "​$bin" ​
 +}
 +</​code>​
 +
 +[[ http://​www.linkedin.com/​groups/​Fridays-functon-dec2bin-Convert-decimal-3716796.S.277082108 | From Article ]]
 +
 +==== List running process matching args ====
 +<code bash>
 +psg() #@ Show all running processes matching ARG[s]
 +{ #@ USAGE: psg STRING ...
 +local ss
 +for ss
 +do
 +## Enclose first character in brackets so grep doesn'​t show its own process
 +ss=\[${ss:​0:​1}\]${ss#?​}
 +ps -ef | grep "​$ss"​
 +[ $# -gt 1 ] && echo
 +done
 +}
 +</​code>​
 +
 +[[ http://​www.linkedin.com/​groups/​Fridays-function-psg-Show-all-3716796.S.5827514953933824001?​view=&​gid=3716796&​type=member&​item=5827514953933824001&​trk=eml-anet_dig-b_nd-pst_ttle-cn | From Article ]]
 +
 +==== Print the result of arithmetical calulation ====
 +
 +<code bash>
 +calc() #@ Print the result of arithmetical calulation
 +{ #@ USAGE: calc EXPRESSION
 +awk 'BEGIN {print '"​${*//​x/​*}"'​}'​
 +}
 +</​code>​
 +
 +[[ http://​www.linkedin.com/​groups/​Fridays-function-calc-Print-result-3716796.S.5832542139925430274?​view=&​srchtype=discussedNews&​gid=3716796&​item=5832542139925430274&​type=member&​trk=eml-anet_dig-b_pd-ttl-cn&​fromEmail=&​ut=04XvycE_RsJm41 | From Article ]]
 +
 +==== Print lines on screen descending from the current point ====
 +
 +<code bash>
 +lines() #@ Print lines on screen descending from the current point
 +{ #@ USAGE: [printat ROW COL [STRING];] lines STRING ...
 +local cu_save=$'​\e[s'​ cu_restore=$'​\e[u'​ cu_down=$'​\e[B'​
 +printf "​$cu_restore$cu_down$cu_save%s"​ "​$@"​
 +}
 +</​code>​
 +
 +[[ https://​www.linkedin.com/​groups/​Fridays-function-lines-Print-lines-3716796.S.5900869707560415236?​view=&​item=5900869707560415236&​type=member&​gid=3716796&​trk=eml-b2_anet_digest-hero-1-hero-disc-disc-0&​midToken=AQG8JYIVdmXjvA&​fromEmail=fromEmail&​ut=0fjZG80YW_UCk1 | From Article ]]
 +
 +==== Integer or Decimal ====
 +
 +<code bash>
 +case ${1#-} in 
 +*[!0-9.]*|.) echo not an integer or float ;; 
 +*.*) echo float ;; 
 +*) echo int ;; 
 +esac
 +</​code>​
 +- OR - 
 +<code bash>
 +i=$1 
 +let '​i++' ​
 +
 +if [ $? -eq 0 ] # check in not error returned ​
 +then 
 +echo "​integer" ​
 +else 
 +echo "not integer" ​
 +fi
 +</​code>​
 +
 +[[ 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.1368899810.txt.gz ยท Last modified: 2020/08/10 02:28 (external edit)