Shell scripting

arrays benutzen

Mit Arrays hat man die Möglichkeit Werte eines defierten Typs abzuspeichern und zu bearbeiten. Arrays werden auch als Vektoren, Felder oder Reihungen bezeichnet. In der Shell-Programmierung kann man nur eindimensionale Arrays erzeugen bzw. benutzen. Mittels ${variablex}, das x steht hier für die Nummer als ganze positive Zahl des Feldes (Feldindex), wird auf die Werte zugegriffen. Bevorzugt verwendet man Arrays in Schleifen.

Arrays kennt leider nur die Korn-Shell und die Bash. Die Anwendung der Arrays erfolgt in gleicher Weise. Bei der Wertzuweisung unterscheiden sie sich aber.
  • Werte dem Arrays zuweisen

Wenn Sie in das array farbe einen Wert ROT in ein schreiben wollen, müssen Sie den Feldindex angeben.
Hier haben wir das zweite Feld von mit einer Zeichenkette belegt.
farbe[2]="ROT"

Sinnvoll ist es mit dem Feldindex 0 zu beginnen
farbe[0]="ROT"
farbe[1]="GELB"
farbe[2]="GRUEN"
farbe[3]="BLAU"

in dem Shell array dürfen die Felder aber auch Lücken enthalten.

CCF Shell Programmierung

Basis Konfiguration

Bei diversen Projekten hat sicht gezeigt, dass eine effektive Shell Programmierung nur durch die Trennung von Konfigurationsdaten und dem eigentlichen Programmcode erreicht werden kann. Anbei will ich zeigen, wie dies realisiert werden kann.

Zuerst muß definiert werden wo das Basis Directory liegt und wie der PATH aussehen soll. Hierbei sollen die unterschiedlichen Betriebssysteme und individuelle Server Konfigurationen berücksichtigt werden. Programme werden immer unter einem bin und Konfigurationen unter einem etc Directory abgelegt. Als Basis Variable wurde die COMPANY_BASE eingeführt. Die COMPANY_BASE entspricht dem "root" Directory für unsere Programmierung. Der PATH sieht dann für:
export COMPANY_BASE=/ccf
export COMPANY_BIN=$COMPANY_BASE/local/bin

wie folgt aus:
PATH=$PATH:$COMPANY_BASE/$(hostname)/bin:$COMPANY_BASE/$(uname)/bin:$COMPANY_BASE/local_bin

daraus resultiert, dass Programme und Kofigurationnen in folgender Reihenfolge abgearbeitet werden.
Für einen Server hpx26a001 unter HPUX sieht der PATH dann wie folgt aus:
...:/ccf/hpx26a001/bin:/ccf/HP-UX/bin:/ccf/local/bin

Für einen Server p620a003 unter AIX sieht der PATH dann wie folgt aus:
...:/ccf/p620a003/bin:/ccf/AIX/bin:/ccf/local/bin

Siehe auch: /etc/profile.local

Benötigtes Programm um Umgebungsvariable (environments) zu setzen

Ein environment2.sh shell script wird dazu benutzt um aus einem:
/ccf/[HOSTNAME]/etc/environment.cfg
/ccf/[OS]/etc/environment.cfg
oder
/ccf/local/etc/environment.cfg
vordefinierte Umgebungsvariable auszulesen, die in unseren shell scripten benutzt werden sollen.
Anbei ein Ausschnitt von einer Konfigurationsdatei.
#Hostname/Standard      #Environment            #Variable
#-----------------------------------------------------------------------
...
STANDARD                #SYSTEM_NAME            #`hostname`
STANDARD                #DATE_DAY               #`date +%y%m%d`
STANDARD                #DATE_FILE              #`date +%Y%m%d_%H%M%S`
STANDARD                #LOGDIR                 #/tmp
STANDARD                #LOGOWNER               #root:sys
STANDARD                #LOGPERM                #644
STANDARD                #REPORTLOGFILE          #$LOGDIR/`date +%y%m%d`_CCF.log
STANDARD                #REPORTOWNER            #root:sys
STANDARD                #REPORTPERM             #644
STANDARD                #TMPFILEDIR             #/tmp
STANDARD                #CONFIGDIR              #$COMPANY_BIN/../etc
STANDARD                #ORACONFIGDIR           #/usr/local/oracle/etc
STANDARD                #BACKUP_CONFIG          #$COMPANY_BASE/`hostname`/etc
STANDARD                #CLEANUP_AGE            #45
STANDARD                #FIND_EXCLUDE           #"/SD_CDROM"
STANDARD                #TRUE                   #1
STANDARD                #FALSE                  #0
STANDARD                #RTN_CODE               #0
STANDARD                #RTN_BORDER             #0
STANDARD                #MAIL_RECEIVER          #"Reinhold.Flecke@xxx.com"
...

Basis Funktionen definieren

Da viele Funktionalitäten immer wieder benötigt werden, wurden diese in dem Shell script functions2.sh definiert. Diese können dann im Hauptprogramm genutzt werden.

Anwendungen erstellen

Mittels einiger shell scripte werde ich den Zusammenhang von Konfigurations files, dem shell script functions2.sh und environment2.sh erklären.

HPUX image backup

script make_net_recovery.sh zum erstellen eines IgniteUX OS image backup.

script um beliebige Kommandos auszuführen

run_command.sh




Das Originaldokument ist zu finden unter http://ccf-it.de/tiki-5.0/tiki-index.php?page=CCF-Shell