bash_functions
#!/bin/bash
function psg()
{
/bin/ps aux | grep -v 'grep' |grep -i $1
}
function len()
{
string=$1
echo ${#string}
}
function pgrep() {
ps aux | grep -v grep | grep -i $1
}
function pkill() {
local pid
pid=$(ps ax | grep $1 | grep -v grep | awk '{ print $1 }')
kill -9 $pid
echo -e "Killed $1 (process $pid)\n"
}
#safe remove, mv the files to .Trash with unique name
#and log the acction
function rm()
{
if [ -d $HOME/.local/share/Trash/files ];then
trash="$HOME/.local/share/Trash/files"
else
trash="$HOME/.Trash"
fi
log="" #/var/log/trash.log"
stamp=`date "+%Y-%m-%d %H:%M:%S"` #current time
while [ -f "$1" ] || [ -d "$1" ]; do
#remove the possible ending /
file=`echo $1 |sed 's#\/$##' `
pure_filename=`echo $file |awk -F / '{print $NF}' |sed -e "s#^\.##" `
if [ `echo $pure_filename | grep "\." ` ]; then
new_file=` echo $pure_filename |sed -e "s/\([^.]*$\)/$RANDOM.\1/" `
else
new_file="$pure_filename.$RANDOM"
fi
trash_file="$trash/$new_file"
mv "$file" "$trash_file"
if [ -w $log ]; then
echo -e "[$stamp]\t$file\t=>\t[$trash_file]" |tee -a $log
else
echo -e "[$stamp]\t$file\t=>\t[$trash_file]"
echo 'not writeble log file'
fi
shift #increment the loop
done
}
function mountiso()
{
sudo umount -f /media/cdrom
sudo mount -o loop -t iso9660 "$1" /media/cdrom
}
function pt() {
# to check if a port has been used
if [ $# -lt 1 ]; then
echo "Usage: pt <PortNumber> #to check if a port has been used"
return
fi
sudo lsof -i :$*
}
function md(){
#make dir and enter
if [ -f "$1" ] ; then
echo "File $1 exists~"
return
fi
if [ ! -d "$1" ] ;then
mkdir -p "$1"
cd "$1"
else
echo "$1 exists~"
fi
}
function tt() {
#compress on file/folder to *.tgz
filename=`echo "$1" | sed -e 's@/$@@' `".tgz"
tar czvf $filename "$1"
}
function xx() {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.tar.xz) tar Jxvf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
function upper() { echo ${@^^}; }
function lower() { echo ${@,,}; }
#sudo kill pkill
function k() {
cfm=Y
if [ ! -z "$1" ]; then
if [[ ! -z "$1" ]]; then
/bin/ps aux | grep -v grep | grep -i "$1"
read -p "killall? [Yn]" cfm
case $cfm in
'')
/bin/ps aux |grep -v grep | grep -i "$1" |awk '{print $2}' |xargs sudo kill -9
;;
'Y')
/bin/ps aux |grep -v grep | grep -i "$1" |awk '{print $2}' |xargs sudo kill -9
;;
'y')
/bin/ps aux |grep -v grep | grep -i "$1" |awk '{print $2}' |xargs sudo kill -9
;;
*)
echo "aborted..."
;;
esac
else
echo "no such process."
fi
fi
}
function rand()
{
#provide a 16-digit random string
options='abc'
option_count=${#options}
length=16
choice=$((RANDOM % option_count))
chosen=${options:choice:1}
function a()
{
#the length must be divided by 2
openssl rand -hex $((length / 2 ))
}
function b(){
#a trailing '; echo' is required for line break
#by @Gokuu (http://fanfou.com/Gokuu)
head /dev/urandom | xxd -p | head -c $length; echo
}
function c()
{
#by @bitstream (http://fanfou.com/wangcong)
printf "%04x%04x%04x%04x" $RANDOM $RANDOM $RANDOM $RANDOM
}
#the core of this function
$chosen
}
c()
{
#an one-liner caculator
bc <<EOF
scale=3
$*
EOF
}
#caculate the md5sum of a folder
function md5folder()
{
limitSize='104857600' #100M
path=$1
tmpmd5=$(mktemp md5sum.XXXXXX)
for file in `find $path| grep -v "\.git"`
do
if [ -f $file ]
then
cat $file >>$tmpmd5
fi
done
md5sum $tmpmd5 | grep -oP "\b[a-f\d]{8}(?=[a-z\d]{24}\b)"
rm -f $tmpmd5
}
function hc(){
# one-liner caculator, with result in hexadecimal.
if [ $# -gt 0 ]; then
python -c "print '''0x%x''' % ($*)"
else
echo "Usage: $FUNCNAME <math expression> #caculator in hex"
fi
}
function isgd()
{
url="$1"
if [ $# -gt 0 ]; then
shorten=`curl -s "http://is.gd/create.php?format=simple&logstats=1&url=$url"`
echo $shorten
echo $shorten | pbcopy #save to clipboard
else
echo "Usage: $FUNCNAME <URL_TO_SHORTEN>"
fi
}
#show full path of an file/folder
full() {
local i;for i in $*;do readlink -f $i;done
}
#convert epoch seconds to Date
sec2date(){
sec="$1"
if [ $# -gt 0 ]; then
date=`date -d "@$sec" +"%Y-%m-%d %H:%M:%S +0800"`
echo $date
echo $date |tr -d "\n" |pbcopy
else
echo "Usage: $FUNCNAME <SECONDS>"
fi
}