newscript
#!/bin/ksh
#
# original template : /home/hans/.../newksh.ksh
# file : /home/hans/bin/newksh-2.1.ksh
# creator : hans
# creation date : 19990929
#
################################################################################
#
# updater update date version action
# hans 2015 1113 2.1 script aangepast aan Linux Mint anno 2015
# hans 2014 0313 2.0 script aangepast aan Linux Mint anno 2014
# hans 1999 0929 1.0 script created
################################################################################
#
# Doel van dit script
#
# Zie de functie script uitleg. Daarin wordt uitgelegd wat dit script gaat doen.
################################################################################
# De functies in dit script worden op twee manieren gebruikt :
# als functie en als hulpmiddel om regels uit te hekken.
# Zie het kommentaar aldaar
################################################################################
# De allereerste clear blijft altijd staan !
clear
################################################################################
# STEP : DEFINITIE VAN DATUM EN TIJD
# BEPAAL DATUM EN TIJD VAN NU.
VANDAAG=`/bin/date +%Y-%m-%d`
DE_TIJD=`/bin/date +%H:%M`
MOMENT=`/bin/date +%Y-%m-%d_%H:%M`
SCRIPT_DATE=`/bin/date +%Y%m%d%H%M`
RUN_TIME=`/bin/date +%Y%m%d%H%M`
################################################################################
# STEP : SPECIALS SETUP
print '\07'
BEEP='\07'
print "$BEEP"
################################################################################
################################################################################
# STEP : SCRIPT PROPERTIES
# Definieer de naam en lokatie van het script
# basename en dirname van dit script
# print De naam van script is vol uit : $0
SCRIPT_PATH=`dirname $0`
SCRIPT_NAME=`basename $0`
################################################################################
# STEP : SHOW SCRIPT PROPERTIES
function script_properties {
clear
print "De filename van het script zelf\t\t: $SCRIPT_NAME"
print "De directory waarin het script staat\t: $SCRIPT_PATH"
print "Het is vandaag\t: $VANDAAG"
print "Het is nu\t: $DE_TIJD"
print "\n"
print "\n"
# print "\nEnter ENTER om door te gaan ..."
# read EEN_TOETS
sleep 1
}
# einde functie script_properties
# Verwijder hieronder het # om de funktie hierboven te aktiveren
script_properties
################################################################################
# STEP : SHOW SCRIPT UITLEG
function script_uitleg {
clear
cat << EOF
********************************************************************************
newksh-2.0.ksh : DE_OMSCHRIJVING_VAN_DIT_SCRIPT
Dit script ...
WERKWIJZE: $SCRIPT_NAME
WERKWIJZE: $SCRIPT_NAME PARAM_1
WERKWIJZE: $SCRIPT_NAME PARAM_1 PARAM_2 PARAM_3
Bijvoorbeeld :
bla bla
********************************************************************************
EOF
}
# einde functie script_uitleg
# Verwijder hieronder het # om de funktie hierboven te aktiveren
# De print en read opdracht moeten hier niet in de functie zelf !
# script_uitleg
# print "\nEnter ENTER om door te gaan ..."
# read EEN_TOETS
################################################################################
# STEP : DEFINITIE VAN DIRECTORIES
# Een gedeelte van de regels kan ook voor in plaats van in de funktie geplaatst worden.
# Voordeel : Ervoor is altijd aktief.
function makethisdir {
if [[ ! -d $1 ]]
then
print "Directory $1 bestaat nog niet"
mkdir -p $1
else
print "Directory $1 bestaat al !"
fi
}
function checkthisdir {
if [[ ! -d $1 ]]
then
print "INPUT_DIR : $1 is er niet ! ... dat is fout ..."
print "Lees de uitleg ...\nen zoek het uit ...\n"
print "Eruit bij exit 1"
exit 1
else
print "Directory $1 gevonden. Het is OK !"
fi
}
WORK_DIR=$PWD
function make_dirs {
BIN_DIR=$WORK_DIR/bin
makethisdir $BIN_DIR
INPUT_DIR=$WORK_DIR/input
checkthisdir $INPUT_DIR
OUTPUT_DIR=$WORK_DIR/output
checkthisdir $OUTPUT_DIR
COMMON_DIR=$WORK_DIR/common
makethisdir $COMMON_DIR
DOC_DIR=$WORK_DIR/doc
makethisdir $DOC_DIR
LOG_DIR=$WORK_DIR/logfiles
makethisdir $LOG_DIR
TMP_DIR=$WORK_DIR/tmp
makethisdir $TMP_DIR
}
# einde functie make_dirs
# Verwijder hieronder het # om de funktie hierboven te aktiveren
# make_dirs
################################################################################
# STEP : DEFINITIE VAN VARIABELEN
# Definieer even met welke editor we files open op het scherm kunnen zetten
# Tekst files kunnen dan geopend worden met : $EDITOR filename.txt &
EDITOR=/usr/bin/geany
# Openen van een file met volledig path in de variabele
# $EDITOR `basename $MY_FILE_WITH_FULL_PATH` &
TEMPLATE_DIR=$COMMON_DIR
TEMPLATE=$COMMON_DIR/filename
################################################################################
# STEP : SHOW VARIABELS
function all_variabels {
print "\n\nOverzicht van alle variabelen\n"
print "PARAM_1 : $PARAM_1"
print "PARAM_2 : $PARAM_2"
print "PARAM_3 : $PARAM_3"
print "PARAM_QTY : $PARAM_QTY"
print "PARAM_FOUT : $PARAM_FOUT"
print "PARAM_X : $PARAM_X"
print "BIN_DIR : $BIN_DIR"
print "COMMON_DIR : $COMMON_DIR"
print "DOC_DIR : $DOC_DIR"
print "INPUT_DIR : $INPUT_DIR"
print "LOG_DIR : $LOG_DIR"
print "OUTPUT_DIR : $OUTPUT_DIR"
print "TMP_DIR : $TMP_DIR"
print "WORK_DIR : $WORK_DIR"
print "\nEinde van dit overzicht van alle variabels\n\n"
}
# Verwijder hieronder het # om de funktie hierboven te aktiveren
# einde functie all_variabels
# all_variabels
################################################################################
################################################################################
# STEP : PARAMETER DEFINITION
# positional parameters / argumenten test
# Kontroleer de parameters op hun kwaliteit
# Aantal parameters is : 0
# WERKWIJZE: $SCRIPT_NAME
PARAM_QTY=$#
print "Het aantal parameters wordt opgeslagen in PARAM_QTY"
print "Het aantal parameters PARAM_QTY : $PARAM_QTY"
################################################################################
# STEP : TEST OP GEEN PARAMETERS
function param0test {
print "Aantal op te geven parameters is : 0"
# PARAM_QTY=$# ## PARAM_QTY is eerder in het script bepaald
if (( PARAM_QTY == 0 )); then
print "\nEr mogen geen parameters opgegeven worden."
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "Dat is goed."
sleep 3
else
script_uitleg
print "\nHet opgegeven aantal parameters is niet goed."
print "\nEr zijn geen parameters nodig."
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "Lees de uitleg ...\n"
print "Eruit bij exit 5"
exit 5
fi
}
# einde functie param0test
# Verwijder hieronder het # om de funktie hierboven te aktiveren
# param0test
################################################################################
# STEP : TEST PARAMETER 1
# positional parameters / argumenten test
# Kontroleer de parameters op hun kwaliteit
# Aantal parameters is : 1
# WERKWIJZE: $SCRIPT_NAME PARAM_1
# Over de function param1test
# Als het een funktie is :
# dan werkt het niet, want $1 wordt niet uitgelezen door PARAM_1 !
# Als het geheel geen functie is, dan werkt het wel.
# Dus :
# Niet Toepassen van param1test
# Hek de functie er in (Let op : dus geen hekje bij { en bij } !),
# Roep de functie niet aan, dan wordt eea dus niet gelezen.
# Dan worden alle regels van de functie overgeslagen.
#
# Wel Toepassen van param1test
# Hek de functie er uit (Let op : dus wel een hekje bij { en bij } !),
# Dan worden alle regels van de functie gelezen, want het is geen functie meer.
PARAM_1="$1" ## Dit mag niet binnen een funktie ! (Why not ?)
# Als param1test nodig is, plaats dan een hekje voor function param1test {
function param1test {
print "Aantal op te geven parameters is : 1"
# PARAM_QTY=$# ## PARAM_QTY is eerder in het script bepaald
# ipv == werkt ook : ==, !=, >, <, >=, <=,
if (( PARAM_QTY == 0 )); then
script_uitleg
print "\nEr zijn geen parameters opgegeven."
print "Er is 1 parameter nodig."
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "Lees de uitleg ...\n"
print "Eruit bij exit 11"
exit 11
elif (( PARAM_QTY == 1 )); then
# PARAM_1="$1" ## Dit mag niet binnen een funktie ! (Why not ?)
print "\nEr is een parameter ingelezen !"
print "Parameter PARAM_1 is : $PARAM_1\n"
sleep 3
else
script_uitleg
print "\nHet opgegeven aantal parameters is niet goed."
print "Er is 1 parameter nodig."
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "Lees de uitleg ...\n"
print "Eruit bij exit 12"
exit 12
fi
}
# einde functie param1test
# Als param1test nodig is, plaats dan een hekje voor de }
# Verwijder hieronder nooit het #. Roep deze functie nooit aan als functie
# param1test
# sleep 3
function param1quality {
# positional parameters / argumenten test
# Kontroleer de parameters op hun kwaliteit
PARAM_FOUT=0
print "PARAM_FOUT is : $PARAM_FOUT (0 is goed !)"
if [[ "$PARAM_1" = "AAA" ]]; then
print "PARAM_1 is goed : $PARAM_1\n"
else
print "PARAM_1 is fout : $PARAM_1"
script_uitleg
PARAM_FOUT=1
fi
# Check op meerdere mogelijke waarden :
case $PARAM_1 in
AAA | BBB | CCC)
print "Parameter PARAM_1 is goed : $PARAM_1"
;;
*)
print "Parameter PARAM_1 is fout : $PARAM_1"
PARAM_FOUT=1
;;
esac
if (( PARAM_FOUT != 0 )); then
script_uitleg
print "Parameter PARAM_1 is : $PARAM_1"
print "Dit is geen geldige waarde.\n"
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "PARAM_FOUT is : $PARAM_FOUT"
print "Eruit bij exit 13\n\n"
exit 13
fi
}
# einde functie param1quality
# Verwijder hieronder het # om de funktie hierboven te aktiveren
# param1quality
# sleep 3
# exit
################################################################################
# STEP : TEST OP 2 OF MEER PARAMETERS
# positional parameters / argumenten test
# Kontroleer de parameters op hun kwaliteit
# Aantal parameters is : > 1
# In dit voorbeeld zijn er 3 parameters
# WERKWIJZE: $SCRIPT_NAME PARAM_1 PARAM_2 PARAM_3
# Over de function param3test
# Als het een funktie is :
# dan werkt het niet, want $1,$2,$3 worden niet uitgelezen door PARAM_1, 2 en 3 !
# Als het geheel geen functie is, dan werkt het wel.
# Dus :
# Niet Toepassen van param3test
# Hek de functie er in (Let op : dus geen hekje bij { en bij } !),
# Roep de functie niet aan, dan wordt eea dus niet gelezen.
# Dan worden alle regels van de functie overgeslagen.
#
# Wel Toepassen van param3test
# Hek de functie er uit (Let op : dus wel een hekje bij { en bij } !),
# Dan worden alle regels van de functie gelezen, want het is geen functie meer.
PARAM_1="$1" ## Dit mag niet binnen een funktie ! (Why not ?)
PARAM_2="$2" ## Dit mag niet binnen een funktie ! (Why not ?)
PARAM_3="$3" ## Dit mag niet binnen een funktie ! (Why not ?)
# Als param3test nodig is, plaats dan een hekje voor function param3test {
function param3test {
print "Aantal op te geven parameters is : 3"
# PARAM_QTY=$# ## PARAM_QTY is eerder in het script bepaald
# ipv == werkt ook : ==, !=, >, <, >=, <=,
if (( PARAM_QTY == 3 )); then
# PARAM_1="$1" ## Dit mag niet binnen een funktie ! (Why not ?)
# PARAM_2="$2" ## Dit mag niet binnen een funktie ! (Why not ?)
# PARAM_3="$3" ## Dit mag niet binnen een funktie ! (Why not ?)
print "\nEr zijn 3 parameters ingelezen !"
print "Parameter PARAM_1 is : $PARAM_1"
print "Parameter PARAM_2 is : $PARAM_2"
print "Parameter PARAM_3 is : $PARAM_3\n"
sleep 3
elif (( PARAM_QTY == 0 )); then
script_uitleg
print "\nEr zijn geen parameters opgegeven."
print "Er zijn 3 parameters nodig."
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "Lees de uitleg ...\n"
print "Eruit bij exit 21"
exit 21
else
script_uitleg
print "\nHet opgegeven aantal parameters is niet goed."
print "\nEr zijn 3 parameters nodig."
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "Lees de uitleg ...\n"
print "Eruit bij exit 22"
exit 22
fi
}
# einde functie param3test
# Als param3test nodig is, plaats dan een hekje voor de }
# Verwijder hieronder nooit het #. Roep deze functie nooit aan als functie
# param3test
sleep 1
function param3quality {
# positional parameters / argumenten test
# Kontroleer de parameters op hun kwaliteit
PARAM_FOUT=0
if [[ "$PARAM_1" = "AAA" ]]; then
print "Parameter PARAM_1 is goed : $PARAM_1"
else
print "Parameter PARAM_1 is fout : $PARAM_1"
PARAM_FOUT=1
fi
if [[ "$PARAM_2" = "BBB" ]]; then
print "Parameter PARAM_2 is goed : $PARAM_2"
else
print "Parameter PARAM_2 is fout : $PARAM_2"
PARAM_FOUT=1
fi
if [[ "$PARAM_3" = "CCC" ]]; then
print "Parameter PARAM_3 is goed : $PARAM_3"
else
print "Parameter PARAM_3 is fout : $PARAM_3"
PARAM_FOUT=1
fi
# Check op meerdere mogelijke waarden :
case $PARAM_1 in
AAA | BBB | CCC)
print "Parameter PARAM_1 is goed : $PARAM_1"
;;
*)
print "Parameter PARAM_1 is fout : $PARAM_1"
PARAM_FOUT=1
;;
esac
case $PARAM_2 in
AAA | BBB | CCC)
print "Parameter PARAM_2 is goed : $PARAM_2"
;;
*)
print "Parameter PARAM_2 is fout : $PARAM_2"
PARAM_FOUT=1
;;
esac
case $PARAM_3 in
AAA | BBB | CCC)
print "Parameter PARAM_3 is goed : $PARAM_3"
;;
*)
print "Parameter PARAM_3 is fout : $PARAM_3"
PARAM_FOUT=1
;;
esac
sleep 3
if (( PARAM_FOUT != 0 )); then
script_uitleg
print "Parameter PARAM_1 is : $PARAM_1"
print "Parameter PARAM_2 is : $PARAM_2"
print "Parameter PARAM_3 is : $PARAM_3"
print "Minstens een ervan heeft geen geldige waarde.\n"
print "Het aantal opgegeven parameters is : $PARAM_QTY"
print "\nPARAM_FOUT is : $PARAM_FOUT"
print "Eruit bij exit 33"
exit 33
fi
}
# einde functie param3quality
# Verwijder hieronder het # om de funktie hierboven te aktiveren
# param3quality
################################################################################
# STEP : MEERDERE PARAMETERS MET SHIFT STUK VOOR STUK VERWERKEN
# positional parameters test
# Kontroleer de parameters op hun kwaliteit
# Aantal parameters is : >= 1
# shift parameters tot ze op zijn.
# Toepassen als elke parameter apart verwerkt moet worden
# De eerste parameter is altijd $1
# Deze wordt getest en toegewezen aan een script parameter
# Door de shift optie wordt telkens de ingelezen parameter verwijderd.
# De volgende wordt dan ook weer $1
# Wederom de vraag of dit kan functioneren vanuit een functie !? Nee dus !
# Definieer een functie waarmee elke ingelezen parameter bewerkt wordt
function procesparam {
print "Een parameter wordt verwerkt ..."
print "PARAM_X $PARAM_NUM : $PARAM_X"
}
# Over de function paramshift
# Als het een funktie is :
# dan werkt het niet, want $1 wordt niet uitgelezen door PARAM_X !
# Als het geheel geen functie is, dan werkt het wel.
# Dus :
# Niet Toepassen van paramshift
# Hek de functie er in (Let op : dus geen hekje bij { en bij } !),
# Roep de functie niet aan, dan wordt eea dus niet gelezen.
# Dan worden alle regels van de functie overgeslagen.
#
# Wel Toepassen van paramshift
# Hek de functie er uit (Let op : dus wel een hekje bij { en bij } !),
# Dan worden alle regels van de functie gelezen, want het is geen functie meer.
# Als paramshift nodig is, plaats dan een hekje voor function paramshift {
function paramshift {
clear
PARAM_QTY=$#
# begin de lus, en werk met een teller
# PARAM_QTY=$# ## PARAM_QTY is eerder in het script bepaald
PARAM_X="Niks"
PARAM_NUM=1
# print "PARAM_NUM $PARAM_NUM : $PARAM_X\n\n"
print "De parameters worden ingelezen en verwerkt."
print "Het aantal parameters PARAM_QTY is $PARAM_QTY\n"
while (( PARAM_NUM <= PARAM_QTY ))
do
PARAM_X=$1
print "\nEen parameter wordt ingelezen ..."
# print "PARAM_X $PARAM_NUM : $PARAM_X"
procesparam
sleep 3
(( PARAM_NUM=PARAM_NUM + 1 ))
shift
done
print "\nHier gaat het verder na de lus"
}
# einde functie paramshift
# Als paramshift nodig is, plaats dan een hekje voor de }
# Verwijder hieronder nooit het #. Roep deze functie nooit aan als functie
# paramshift
sleep 1
# exit
################################################################################
################################################################################
# STEP : DEFINITIE VAN FUNKTIES
# Menu ? : Zie /home/hans/.../menufunc.ksh
################################################################################
# Mailen naar een lijst van users
# De benodigde tekst file kan er zo uitzien :
function mailtext {
cat << EOF
********************************************************************************
Hallo VOORNAAM,
Jouw VOORNAAM moet vervangen worden door een echte voornaam.
bla bla
bla bla bla bla
bla
Met vriendelijke groeten van Hans
_/ _/ _/_/_/_/ _/_/_/_/ _/_/_/_/
_/ _/ _/ _/ _/ _/ _/
_/_/_/_/ _/_/_/_/ _/ _/ _/_/_/_/
_/ _/ _/ _/ _/ _/ _/
_/ _/ _/ _/ _/ _/ _/_/_/_/
********************************************************************************
EOF
}
# einde functie mailtext
# Als mailtext nodig is, maak er dan een aparte file van
# Verwijder hieronder nooit het #. Roep deze functie nooit aan als functie
# mailtext
function mailtolist {
# "Maak een loop"
# "die een user specifieke mail tekst maakt"
# "die de mailtekst naar die user mailt."
# Zie /home/hans/.../mailtolist
# VOORNAAM wordt vervangen door elke echte voornaam.
# Mail namen volluit, gescheiden door puntjes werkt nog niet.
# Dat gaan we nog maken !
USERS=$WORK_DIR/user_accounts.lst
MAILTEKST=$WORK_DIR/mail.txt
LOGFILE=$WORK_DIR/mail.log
MOMENT_1=`/bin/date +%Y%m%d%H%M`
for USERNAAM in `cat $USERS`
do
MOMENT_X=`/bin/date +%Y%m%d%H%M`
VOORNAAM="`ypcat passwd | grep "^$USERNAAM:" |\
awk -F: ' { print $5 } ' | awk ' { print $1 } '`"
print "\n$MOMENT_X : User $USERNAAM (VOORNAAM : $VOORNAAM) is aan de beurt ..." | tee -a $LOGFILE
cat $MAILTEKST | sed 's/VOORNAAM/'$VOORNAAM'/g' > dummytekst.txt
clear; cat dummytekst.txt; sleep 1
# print "\nEnter ENTER om door te gaan ..."
# read EEN_TOETS
mailx -s "Subject_van_deze_mail !" $USERNAAM < dummytekst.txt
done
MOMENT_2=`/bin/date +%Y%m%d%H%M`
print "\nHet is klaar !\nGemaild van $MOMENT_1 tot $MOMENT_2"
}
################################################################################
# STEP : TELLER TRUUK
function tellertruuk {
# printing a beep
# print '\07'
BEEP='\07'
# print "$BEEP"
# begin de lus, en werk met een teller
typeset -i TELLER
TELLER=0
while (( TELLER < 5 ))
do
print $TELLER
sleep 1
(( TELLER=TELLER + 1 ))
done
while (( TELLER >= 0 ))
do
print -n $TELLER
print "$BEEP"
sleep 1
(( TELLER=TELLER - 1 ))
done
}
################################################################################
################################################################################
# STEP : HET SCRIPT ZELF KOMT HIERONDER
clear
cat << EOF
********************************************************************************
SCRIPT : DE_OMSCHRIJVING_VAN_DIT_SCRIPT
********************************************************************************
EOF
# print "\nEnter ENTER om door te gaan ..."
# read EEN_TOETS
# clear
################################################################################
# STEP : REPLACE LINK BY HAND, NOT BY SCRIPT
function newrevision {
clear; cd /home/hans/bin; ls -l
# gebruik onderstaande commando's met de hand om in jouw bin directory
# een symbolisch link (mooie naam, naar laatste versie) naar je script (met versie erbij) te maken
# vervang hans voor je eigen naam
# \rm /home/hans/bin/newksh
# ln -s /home/hans/bin/newksh-2.0.ksh /home/hans/bin/newksh
}