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

}