User Tools

Site Tools


bash_functions

Differences

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

Link to this comparison view

bash_functions [2014/09/29 02:13]
k2patel [show array]
bash_functions [2020/08/10 02:35]
Line 1: Line 1:
-====== Bash Functions ====== 
-==== index # Print the position of $2 in $1 ==== 
-<code bash> 
-index() #@ Print the position of $2 in $1 
-{ #@ USAGE: index STRING SUBSTRING 
-local idx 
-case $1 in 
-*$2*) idx=${1%%$2*} 
-echo $(( ${#idx} + 1 )) ;; 
-*) echo 0 ;; 
-esac 
-} 
-</​code>​ 
-[[http://​www.linkedin.com/​groups/​Fridays-function-index-3716796.S.237745984?​view=&​srchtype=discussedNews&​gid=3716796&​item=237745984&​type=member&​trk=eml-anet_dig-b_pd-ttl-cn&​ut=0kcr73WwfdW5I1 | From Article]] 
  
-==== die # Exit with error code and optional message ==== 
-<code bash> 
-die() #@ Exit with error code and optional message 
-{ #@ USAGE: die RETURN_CODE [MESSAGE] 
-result=$1 
-shift 
-[ -n "​$*"​ ] && printf "​%s\n"​ "​$*"​ >&2 
-exit "​$result"​ 
-} 
-</​code>​ 
-[[ http://​www.linkedin.com/​groups/​Fridays-function-die-3716796.S.236067929?​qid=da8e8fcc-4fda-480a-91a1-3ef360d90e53&​trk=group_most_popular_guest-0-b-ttl&​goback=.gde_3716796_member_237745984.gmp_3716796 | From Article ]] 
- 
- 
-==== Place SUBSTRING over STRING beginning at OFFSET ​ ==== 
-<code bash> 
-overlay() #@ Place SUBSTRING over STRING beginning at OFFSET ​ 
-{ #@ USAGE: overlay VARNAME SUBSTRING OFFSET ​ 
-local varname=$1 substr=$2 start=$3 string ​ 
-eval "​string=\${$varname}" ​ 
-left=${string:​0:​start} ​ 
-right=${string:​start+${#​substr}} ​ 
-printf -v "​$varname"​ %s%s%s "​$left"​ "​$substr"​ "​$right" ​ 
-} 
-</​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 ]] 
- 
-==== 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 ]] 
bash_functions.txt ยท Last modified: 2020/08/10 02:35 (external edit)