User Tools

Site Tools


bash_functions

This is an old revision of the document!


Bash Functions

index # Print the position of $2 in $1

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
}

From Article

die # Exit with error code and optional message

die() #@ Exit with error code and optional message
{ #@ USAGE: die RETURN_CODE [MESSAGE]
result=$1
shift
[ -n "$*" ] && printf "%s\n" "$*" >&2
exit "$result"
}

From Article

Place SUBSTRING over STRING beginning at OFFSET

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" 
}

From Article

asc() #@ Print the ASCII value of the first character of each argument 
{ #@ USAGE: asc STRING ... 
for char 
do 
printf "%d${EOV-\n}" "'$char" 
done
}

From Article

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

From Article

Add directory or directories to PATH

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
}

From Article

Return random date in given range of years

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"
}

From Article

Check if it is factor

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 ))
}

From Article

Check if it is factor

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" 
}

From Article

List running process matching args

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
}

From Article

bash_functions.1390324764.txt.gz · Last modified: 2020/08/10 02:28 (external edit)