Script-Tipps

#
# diverse Hint's zu scripten
#

#################################
# emails - howto

--> mit sendmail =

REPLAY_FILE="${DEST_DIR}/replay"
echo "To: ${MAIL_FROM}" > ${REPLAY_FILE}
echo "From: <mumatrixdoc@dotduck.homeunix.net>" >> ${REPLAY_FILE}
echo "Subject: Reply Message \n" >> ${REPLAY_FILE}
echo "Info: \n" >> ${REPLAY_FILE}
echo "\n"  >> ${REPLAY_FILE}
echo " " >> ${REPLAY_FILE}
cat ${REPLAY_FILE} | /usr/lib/sendmail -oi -t

--> mit mailx =

cat <<EOF| mailx -s ${2} ${1}
`cat  ${3}`
EOF

-------- weiteres mailx-beispiel :
/usr/local/bin/ipssend getconfig 1 AL | /usr/bin/mailx -s "`uname -n` - Daily Storage Status `date`" irgendwas@irgendwo.com

--- mailx mit attachment :
${WORKDIR}/uuencode ${WORKDIR}/sqloutput.zip ${WORKDIR}/sqloutput.zip |mailx -s "${SUBJECT}" ${MAILTO}
uuencode filename.zip filename.zip | mailx -s testmail <email-empfaenger>

################################
# DATUM
Gestern:
date --date='1 days ago' '+%d-%m-%Y'


#################################
#  UMLEITUNGEN

# Leitet den output ins dev/null ohne statusmeldungen zu generieren
0 6 * * * /usr/local/admin/bin/chk_local_storage > /dev/null 2>&1

* * * * *  /a/b/c/program >> /path/to/logfile.log 2>&1

############################
#
# AWK- Erweiterung
df -k | grep dev | awk '{a=a+$2}END{print a/1024/1024}'
# printet das letzte feld, in diesem beispiel den letzen ordner
sudo find /var/lib/mysql -type d|awk -F/ '{print $NF}'

###################################
#
# SED Tipps

# eine zeile suchen und unterhalb einen neue zeile mit inhalt einfuellen
# erklaerung
# ^[]* sucht leerzeichen & tabs am anfang
# check_command.*$ nimmt die ganze linie
# &\ nimmt den vorherigen suchstring(linie) und fuegt diesen wieder ein
# \n neue linie
# \t = tab
# bbb ccc = neuer zeileninhalt
cat file1 | sed 's/^[ ]* check_command.*$/&\n\tbbb\t\t\t\tccc/g' > file2
cat file.cfg| sed 's/^[ \t]*check_command.*$/&\n\tbbb\t\t\t\tccc/g'

#####################
  cat ServerAut_DMZ.cfg |sed 's/^[ \t]*host_name.*$/&\n\tuse\t\t\t\thost-template/g' > file1
  #####################
 
  CHKCOMMAND AUSTAUSCHEN !
  cat Service_jmx.cfg | sed 's/^[ \t]*check_command.*$/\tcheck_command\t\t\submit_check_result/g'
  #######################
um string zu suchen und ganze linie ersetzen und gleich die permissions setzen. kann in einer for-schlaufe laufen gelassen werden

#!/bin/bash -x
cat $1 | sed 's/^[ \t]*check_command.*$/\tcheck_command\t\t\tservice-is-stale/g' > file1 && mv file1 $1 && chown nagios:nagios $1

# delete the whole line
for i in `ls -R ` ; do cat $i | sed '/3M1-RS1,3M1-RS2/d' >tmpfile && mv -f tmpfile $i ; done

# replace string in a bash-script with variables :
# --> Important the doublequotes... costs me 2h to find that out....
#!/bin/bash
cat $SSHD | sed "s/${VAR_CHG}/${VAR1F}/g" >> $SSHD.sed
mv $SSHD.sed $SSHD

# all in 1
for i in `ls .`; do cat $i |sed 's/notification_options            d,u,r,f/notification_options            d,r,f/g' >> $i.tmp && mv $i.tmp $i  ; done

# array in cat-faehige liste umwandeln :
sed 's/ /\n/g' arrayliste1 > arrayliste2

# exakter string suchen und nur diesen ersetzen/loeschen
cat ${TMPFILE1} | sed "/^${subtrsrv}$/d" > ${TMPFILE3}


####################################
#liste mit 2 oder mehrere linien auslesen und richtig wieder ausgeben
#!/bin/bash


#--- get parameters
OLD_IFS=$IFS

IFS='
'
for row in `cat filel.conf`
do
# hier ist der IFS der field seperator !!
  IFS="="
  set $row
  param_name=$1
  param_value=$2

  echo $param_name = $param_value
done

IFS=$OLD_IFS


####################################
#
# FLOATING NUMBERS - Auf/Abrunden von Zahlen
#
###################################
#!/bin/bash
# get floating point number
floating_point_number=3.3446
echo $floating_point_number
# round floating point number with bash
for bash_rounded_number in $(printf %.0f $floating_point_number); do
echo "Rounded number with bash:" $bash_rounded_number
done
##########################################
#
# IF und IF NOT BEDINGUNGEN
#
##########################################

if [ bedingung1 = bedingung1 ]; then
echo gugus
fi
# geht nicht immer
NICHT WAHR =
if [ bedingung != bedingung ]; then
echo gaga
if
# geht mal mehr
if ! [ bedingung = bedingung ]; then
echo "nicht wahr"
fi
##########################################
#
#ARRAY oder sowas in der art
#!/bin/bash
#
#
GRP_TO_CHK_1="a"
GRP_TO_CHK_2="b"
GRP_TO_CHK_3="c"
GRP_TO_CHK_4="d"
GRP_TO_CHK_5="e"
GRP_TO_CHK_6=""
GRP_TO_CHK_7=""
GRP_TO_CHK_8=""
GRP_TO_CHK_9=""
#
#
for i in $GRP_TO_CHK_{1..9} ; do echo $i; done
#
##########################################
# gibt die variable-nummer wieder -> hier #1
echo "\$GAGA_1" |rev|cut -c1-1
1
##########################################
# Rechnen mit bc
echo "scale=2;8/10" | bc
##########################################