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
Next revision Both sides next revision
bash_functions [2013/05/18 17:56]
k2patel [die # Exit with error code and optional message]
bash_functions [2014/09/29 02:22]
k2patel [Reverse Word]
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.txt ยท Last modified: 2020/08/10 02:35 (external edit)