Hier finden sich Aufgaben zur Shellprogrammierung.

Werden alle Aufgaben gelöst, so hat man ein hochpotentes Werkzeug zur Erstellung von Shellscripten.

Konventionen

sind wichtig, damit das Scriptsystem leicht les- und wartbar bleibt.
Folgende Konventionen sollen durchgängig eingehalten werden. Sie sind aber auch Bestandteil des ganzen Scriptsystems. Das soll später mit einem Befehl ein Script erzeugen, dafür eine Manpage erzeugen und die i18n/l10n gewährleisten. Zudem wird eine  BashLib  geboren, die alle Routinejobs zuverlässig erledigt und von jedem anderen Script einfach  gesourced  werden kann.

Um unsere Variablen von den System- und Shell internen Variablen leicht zu unterscheiden und versehentliches Überschreiben zu vermeiden, schreiben wir alle unsere Variablen in Kleinbuchstaben und verwenden den Unterstrich als Worttrenner.

Beispiel:
my_var="etwas"
my_other_var="was anderes"
is_root="true"

Scriptaufbau

Jedes Script soll immer sehr, sehr viele Kommentarzeilen enthalten und in jedem Fall dem unten folgenden  Skeleton folgen.

Drei aufeinander folgende "#" Zeichen dienen später zur automatischen Erstellung des Scriptes und der Dokumentation. Sie sind also syntakisch bedeutend und müssen  mit drei "#" beginnen.

Damit später automatisch Manpages verschiedenen Formaten erzeugt werden können, sind für Funktionen ebenfalls syntaktisch festgelegte Kommentare nötig. Unser Script "mkscript", das wir uns hier erarbeiten wird später nicht nur unsere Skripte mit allen gängigen Funktionen erstellen, sondern auch die Dokumenation in diversen Formaten.


Beispiel:
#!/bin/bash
#   Lizenz und Autor Angaben (optional)
#   (immer zwei Zeilen zwischen verschiedenen Blöcken)
#   (kann auch eine leere Zeile sein, also ein "Nichtkommentar")
### CONFIG VARS START ###
#   alle Variablen, die der User zur Konfiguration ändern kann
my_working_dir=/some/path
### CONFIG VARS END ###

### NOTHING TO CHANGE BEYOND THIS LINE; script starts in line line# ###
### INTERNAL VARS START ###
#   alle Variablen, die das Script intern verwendet
### INTERNAL VARS END ###

### FUNCTIONS START ###
#   alle "Sourcing" Zeilen, z.B.:
#   . messaging
#   source debug
#
#
#   danach alle Funktionen
### FUNCTION funktions_name START ###
funktions_name(){
	# Kurzbeschreibung
	# gibt eine Hexzahl formatiert als 'Hexzahl und als Dezimalzahl aus
	# Param: eine Hexzahl z.B.: 0x10
	# Param: -q|--quiet unformatierte Ausgabe
	# Returns: formatierter String oder nackte Dezimalzahl
	while (( $# > 0)); do
	  case $1 in
	    [[:digit:]]+ ) zahl=$1
		  shift
		  ;;
	  -q|--quiet ) quiet=true
	    shift
		  ;;
	  *	) echo FEHLER!
	    exit 1
	done
	if [[ $quiet == "true" ]]; then
		printf "%d" "$zahl"
	else
		printf "Die Hexzahl %x ist dezimal %d \n" $zahl $zahl
	fi
}
### FUNCTION funktions_name END ###


# weitere Funktionen ...
# weitere Funktionen ...
# weitere Funktionen ...

# Jedes Script braucht eine usage() Funktion
### FUNCTION usage START ###
usage(){
	:
}
### FUNCTION usage END ###


# und sollte ebenfalls eine "clean_up" Funktion haben.
### FUNCTION clean_up START  ###
clean_up(){
	# räumt bei Beendigung des Scriptes auf
	rm -rf $temp_directory
	echo ich bin fertig
}
### FUNCTION clean_up END ###


# FUNCTIONS END

### SCRIPT STARTS HERE ###

# clean_up Funktion "scharf schalten"
trap clean_up EXIT

# unser eigentliches Script beginnt dann hier.