Long ago, when I had the chance to build by myself a set of scripts that performed certain operations I ended up with a nice set of small things.
I would like to share, but it needs some explanation.
This library, group of tools, they do nothing by themselves, their only serve a single purpose which is “To standardize” .
At that time I was a “one man army”, I built stuff by myself, for myself and to myself, but then I realized that after me would come someone else, with different styles, different habits and so on,..
Since I needed to change as less code possible this library can be sourced and its functions called many times, they become read only , or they are atomic, so nothing has be worried about using its functions several times in a row.
#!/bin/bash
# Marcs library
#TODO
# there are two lower case converters
# funcion to download all the scripts at once
# funcion to clean up all the scripts
# set variables
declare -r TRUE=0
declare -r FALSE=1
declare -r PASSWD_FILE=/etc/passwd
declare -r RED='\033[0;41;30m'
declare -r STD='\033[0;0;39m'
declare -r CYAN='\e[1;37;44m'
declare -r TMPDIR='/tmp/'
##################################################################
# Purpose: Converts a string to lower case
# Arguments:
# $1 -> String to convert to lower case
##################################################################
function to_lower()
{
local str="$@"
local output
output=$(tr '[A-Z]' '[a-z]'<<<"${str}")
echo $output
}
##################################################################
# Purpose: Display an error message and die
# Arguments:
# $1 -> Message
# $2 -> Exit status (optional)
##################################################################
function die()
{
local m="$1" # message
local e=${2-1} # default exit status 1
echo "$m"
exit $e
}
##################################################################
# Purpose: Return true if script is executed by the root user
# Arguments: none
# Return: True or False
##################################################################
function is_root()
{
[ $(id -u) -eq 0 ] && return $TRUE || return $FALSE
}
##################################################################
# Purpose: Return true $user exits in /etc/passwd
# Arguments: $1 (username) -> Username to check in /etc/passwd
# Return: True or False
##################################################################
function is_user_exits()
{
local u="$1"
grep -q "^${u}" $PASSWD_FILE && return $TRUE || return $FALSE
}
##################################################################
# Purpose: Inform the user that this functions is not implemented
# Arguments: No arguments
# Return: No returns
##################################################################
function notImplemented()
{
echo "This functions is not implemented yet."
echo "Press any Key to continue or press Ctrl-C."
read x
}
##################################################################
# Purpose: Converts a string to lower case
# Arguments:
# $1 -> String to convert to lower case
##################################################################
lowercase(){
echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
}
##################################################################
# Purpose: Recover important information
# Arguments: If $1 == "debug" then output for each var will be printed
# Return: TRUE is first time execution. FALSE if already executed
# Read Only variables set:
# OS
# DIST
# DistroBasedOn
# PSUEDONAME
# REV
# KERNEL
# MACH
##################################################################
shootProfile(){
# This funcion creates readonly variables, if one of them has been set before it will crash
# check that all variables are unset.
[ -n "${OS+x}" ] && [ -n "${DIST+x}" ] && [ -n "${DistroBasedOn+x}" ] && [ -n "${PSUEDONAME+x}" ] && [ -n "${REV+x}" ] && [ -n "${KERNEL+x}" ] && [ -n "${MACH+x}" ] && echo " !!! shootProfile was called before. The variables are already available" && return $FALSE
OS=`lowercase \`uname\``
KERNEL=`uname -r`
MACH=`uname -m`
if [ "{$OS}" == "windowsnt" ]; then
OS=windows
elif [ "{$OS}" == "darwin" ]; then
OS=mac
else
OS=`uname`
if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=`uname -p`
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
if [ -f /etc/redhat-release ] ; then
DistroBasedOn='RedHat'
DIST=`cat /etc/redhat-release |sed s/\ release.*//`
PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/SuSE-release ] ; then
DistroBasedOn='SuSe'
PSUEDONAME=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
elif [ -f /etc/mandrake-release ] ; then
DistroBasedOn='Mandrake'
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/debian_version ] ; then
DistroBasedOn='Debian'
DIST=`cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }'`
PSUEDONAME=`cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }'`
REV=`cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }'`
fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
fi
OS=`lowercase $OS`
DistroBasedOn=`lowercase $DistroBasedOn`
readonly OS
readonly DIST
readonly DistroBasedOn
readonly PSUEDONAME
readonly REV
readonly KERNEL
readonly MACH
fi
fi
local debug=${1:-nodebug}
if [[ $debug = "debug" ]]; then
echo $OS
echo $DIST
echo $DistroBasedOn
echo $PSUEDONAME
echo $REV
echo $KERNEL
echo $MACH
fi
return $TRUE
}
##################################################################
# Purpose: Make sure package on $1 is installed
# Arguments:
# $@ -> Packages wich should be installed
##################################################################
installPkg()
{
[ -n "${DistroBasedOn-x}" ] && shootProfile
for i in $@
do
echo -n "Installing $i on $DistroBasedOn."
case $DistroBasedOn in
Debian | debian )
apt-get -y install $i
;;
SuSe | suse )
zypper install $i
;;
Mandrake | mandrake )
echo "do not know how to install $i package on mandrake "
;;
RedHat | redhat )
yum -y install $i
;;
*)
echo "\$DistroBasedOn variable has not a valid value. Value : ||$DistroBasedOn||"
;;
esac
done
return 0
}
##################################################################
# Purpose: Compare hostname
# Arguments:
# $1 => string
# Return : TRUE if $1 = `hostname` false otherwhise.
##################################################################
hostnameGet(){
[[ "`hostname`" = "$1" ]] && return $TRUE || return $FALSE
}
##################################################################
# Purpose: Return TRUE if $1 is confirmed, or keypresed
# Arguments:
# $1 => string
# Return : TRUE if $1 user presses the key.
##################################################################
confirm(){
read -sn 1 -p "$1 [y/N]? "
[[ $REPLY = [Yy] ]] && return $TRUE|| return $FALSE
}
#=== FUNCTION ================================================================
# NAME: downloadAndExec
# DESCRIPTION: downloads and launches a script
# PARAMETERS: $1 = script name
# RETURNS: TRUE if OK
#===============================================================================
downloadAndExec ()
{
scriptname=$1
workdir="/tmp"
workscript=$workdir/$scriptname
[ -f $workscript ] && rm $workscript
wget $MASTERURL/bin/$scriptname -O $workscript
chmod +x $workscript
$workscript
[[ $? -eq 0 ]] && rm $workscript && return $TRUE || return $FALSE
} # ---------- end of function downloadAndExec ----------
return 0
One thought on “The scripts that become functions, and the functions that belong to a library .”
Comments are closed.