Bash Scripting

Schleifen

For als Zählschleife

Zählt von 0 bis 5 was 6 Durchläufen entspricht

#/bin/bash

for ((i=0; i<=5; i++)); do

echo $i

# ... do some other code

done

 

For mit Argument expansion


Aufruf z.B. mit:

. [ script_name ].sh a b c d

liefert folgendes Ergebnis:

Dein 1. Arugument ist: a
Dein 2. Arugument ist: b
Dein 3. Arugument ist: c
Dein 4. Arugument ist: d

#/bin/bash

count=0

for ENTRY in ${@}; do

count=`expr $count + 1`

if [[ ! -z $ENTRY ]]; then

echo "Dein $count. Arugument ist: ${ENTRY}"

fi

done

 

While mit Abbruchbedingung [ -gt, -lt, eq ...]


#/bin/bash

count=0

# solange $count kleiner ist als 10

while [ $count -lt 10 ]; do

.. do some code

count=`expr $COUNT + 1`

done

 

Until mit Abbruchbedingung [ -gt, -lt, eq ...]


#/bin/bash

count=0

# solange 10 groesser ist als $count

until [ $count -gt 10 ]; do

.. do some code

count=`expr $COUNT + 1`

done

 
If Konditionen

Existens von Verzeichnissen
prüfen


#/bin/bash

DIR=dein_verzeichnis_name

if [[ ! -d "$DIR" ]]; then

echo "$DIR existiert nicht"

# ggf. Verezeiches erstellen

mkdir $DIR

fi

 

Existens von Dateien
prüfen


#/bin/bash

FILE=/dein_pfad/dein_datei_name

#/bin/bash

if [[ ! -f "$FILE" ]]; then

echo "$FILE existiert nicht"

# ggf. Datei erstellen

touch $FILE

fi

 

Parameter auf NULL / Nicht NULL prüfen


Prüfung auf NULL [ -z ]

#/bin/bash

VAR=$1

if [[ -z "$VAR" ]]; then

echo "$VAR ist leer."

fi

 

Prüfung auf nicht NULL [ ! -z ]

#/bin/bash

VAR=$1

if [[ ! -z "$VAR" ]]; then

echo "$VAR ist NICHT leer."

fi

 

Prüfung auf Geleichheit / Ungleichheit


Zeichenkettenverleich auf Gleichheit

#/bin/bash

VAR="true"

if [[ "$VAR" == "true" ]]; then

echo "Die Variable 'VAR' ist gleich der Zeichenkette 'true'"

fi

 

Zeichenkettenverleich auf Ungleichheit

#/bin/bash

VAR="false"

if [[ "$VAR" != "true" ]]; then

echo "Die Variable 'VAR' ist ungleich der Zeichenkette 'true' sondern $VAR"

fi

 

Zahlenverleich auf Gleichheit

#/bin/bash

VAR=100

if [[ $VAR -eq 100 ]]; then

echo "Die Variable 'VAR' ist gleich der Zahl 100"

fi

 

Zahlenverleich auf Ungleichheit

#/bin/bash

VAR=99

if [[ $VAR -ne 100 ]]; then

echo "Die Variable 'VAR' ist ungleich der Zahl 100 sondern $VAR"

fi

 

Prüfung auf größer / kleiner als


Zahlenvergleich auf größer als

#/bin/bash

VAR=100

if [[ "$VAR" -gt 100 ]]; then

echo "Die Variable 'VAR' ist größer als der Wert 100"

fi

 

Zahlenvergleich auf kleiner als

#/bin/bash

VAR=100

if [[ "$VAR" -lt 100 ]]; then

echo "Die Variable 'VAR' ist kleiner als der Wert 100"

fi

 

Zahlenvergleich auf größer oder gleich wie

#/bin/bash

VAR=100

if [[ "$VAR" -ge 100 ]]; then

echo "Die Variable 'VAR' ist größer oder gleich groß wie der Wert 100"

fi

 

Zahlenvergleich auf kleiner oder gleich wie

#/bin/bash

VAR=100

if [[ "$VAR" -le 100 ]]; then

echo "Die Variable 'VAR' ist kleiner oder gleich groß wie der Wert 100"

fi

 

Prüfung auf Integer


Prüfen ob eine Zahl ein Integer ist

#/bin/bash

VAR=100

if [[ $VAR == ?(-)+([0-9]) ]];then

echo "Die Variable '$VAR' ist ein Interger"

fi

 
Arrays

Array anlegen


#/bin/bash

entries=( "eintrag 1" "eintrag 2" "eintrag 3" "..." )

Über Array itterrieren


#/bin/bash

count=0

for ENTRY in "${entries[@]}"; do

count=`expr $count + 1`

if [[ ! -z $entries ]]; then

echo "Dein $count. Argument ist: ${ENTRY}"

fi

done

 
Eingabe

Promt Text (-p) und Eingabe einlesen in eine Var.


#/bin/bash

read -p 'Gebe etwas ein: ' VAR

echo "Deine Eingabe war: $VAR"

 

Zeilenweises Einlesen einer Datei
mit Filedeskriptor


#/bin/bash

while read line; do

echo $line

done < [ datei ]

 
Ausgabe

Farbige Ausgabe


#/bin/bash

NC='\033[0m' # No color

BLUE='\033[1;34m'

GREEN='\033[1;32m'

RED='\033[1;31m'

 

# Das -e hinter 'echo' nicht vergessen"

echo -e "${BLUE}ein blauer Text${NC}"

echo -e "${GREEN}ein gruener Text${NC}"

echo -e "${RED}ein roter Textt${NC}"

ein blauer Text

ein grüner Text

ein roter Text

 

Print Format


#/bin/bash

text_1="beliebiger Text"

text_2="Text"

printf "Hier wurde ein beliebiger %s eingesetzt\n" $text_1

printf "Hier wurde ein %-10s mit ein einer min. Zeichenlaenge von 10 Zeichen eingesetzt\n" $text_2

Hier wurde ein beliebiger Text eingesetzt

Hier wurde ein Text       mit ein einer min. Zeichenlaenge von 10 Zeichen eingesetzt

 

Mögliche Parameterangaben für printf

%s Zeichenkette Zeichenkette beliebiger Länge
%d | %i Ganzzahl Ganzzahl mit Vorzeichen
%u Ganzzahl positive Ganzzahl Negative Werte werden dann in der positiven CPU-Darstellung ausgegeben.
%f reelle Zahl Gleitpunktzahl
%e | %E reelle Zahl Gleitpunktzahl in der Exponentialschreibweise
%x | %X Ganzzahl Ganzzahl in hexadezimaler Form
%g | %G reelle Zahl Ist der Exponent kleiner als –4, wird das Format %e verwendet, ansonsten %f.
%% Prozentzeichen Prozentzeichen einfügen
 
Parameter

Auslesen des Scriptnamens mit $0

#/bin/bash

echo "Scriptname: $0"

Patameterübergabe mit Argument - Array $*

#/bin/bash

echo "Inhalt Argument-Array '$*':" $*

for i in $*; do

echo '$*:' $i

done

$> . sript.sh -a -b -c -d ...

Patameterübergabe Zeichenketten - Array $@

#/bin/bash

echo "Inhalt Argument-Array '$@':" $@

for i in $@; do

echo '$*:' $i

done

$> . sript.sh -a -b -c -d ...

Anzal der übergebenen Argumente $#

#/bin/bash

echo Anzahl der übergebenen Artumente '$#': " $#

$> . sript.sh -a -b -c -d ...

Praxisbeispiel I

Auswertung der Übergabeparameter

#/bin/bash

for i in $@; do

case "$i" in

-[tT]|-test) echo "Option \"test\" aufgerufen";;

-[hH]|-help|-hilfe) echo "Option \"hilfe\" aufgerufen";;

*) echo "($i) Unbekannte Option aufgerufen!"

esac

done

$> . sript.sh -t -h

 

Praxisbeispiel II

Einen durch Prameter gekennezeichneten wert auslesen

z.B. $> script -p=mein.wert -> mein.wert

#/bin/bash

for i in $@; do

if [[ "$i" = -p=* ]]; then

VAR=${i#*=}

#ggf. continue

fi

done

echo "uebergebener Wert: $VAR"

$> . sript.sh -p=mein.wert
$> uebergebener Wert: mein.wert

 
Zeichenketten

Länge einer Zeichenkette


Mit hash (#) Operator innerhalb der Parameter-Expansion

#/bin/bash

VAR="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam"

echo -e ${#VAR} Zeichen in: "[ \"$VAR\" ]" gefunden

Zeichenkete von 0 bis x abschneiden


#/bin/bash

VAR="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam"

echo -e "[ \"$VAR\" ]" nach dem 6. Zeichen:

echo ${VAR:6}

Zeichenkete von - bis abschneiden


${VAR:[start]:[anz]} => von start bis (start + anz)

#/bin/bash

VAR="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam"

echo -e Ausschnitt aus: "[ \"$VAR\" ]" zwischen den Zeichen 5 und 5+6 = 11:

echo ${VAR:5:6}

Zeichenkete mit '*' auf Inhalt prüfen


* = Beliebige andere Zeichen

#/bin/bash

if [[ "$VAR" = *ipsum* ]]; then

echo -e "[ \"$VAR\" ]" enthaelt "[ \"ipsum\" ]";

else

echo "no match!";

fi

Zeichenkete mit '?' auf Inhalt prüfen


? = Ein Beliebiges Zeichen

#/bin/bash

if [[ "$VAR" = *ips?m* ]]; then

echo -e "[ \"$VAR\" ]" enthaelt "[ \"ipsum\" ]";

else

echo "no match!";

fi

Zeichenkete mit '?([char])' auf Inhalt prüfen


?([char]) = Kein oder das angegebene Zeichen

#/bin/bash

if [[ "$VAR" = *ips?(u)m* ]]; then

echo -e "[ \"$VAR\" ]" enthaelt "[ \"ipsum\" ]";

else

echo "no match!";

fi

Zeichenketenmanipulation


% -> Vom Ende der Zeichenkette
# -> Vom Anfang der Zeichenkette
/ -> Zeichenkette ersetzen

#/bin/bash

VAR="Lorem.ipsum.dolor.sit.amet.consetetur.sadipscing.elitr.sed.diam"

echo -e "Zeichenkette: \n\t$VAR"

$> Lorem.ipsum.dolor.sit.amet.consetetur.sadipscing.elitr.sed.diam

 

Nach dem letzten Vorkommen

TMP=${VAR%.*}

echo -e "Alles NACH dem letzten Vorkommen von '.' abschneiden \n\t$TMP"

$> Lorem.ipsum.dolor.sit.amet.consetetur.sadipscing.elitr.sed .diam

 

Nach dem ersten Vorkommen

TMP=${VAR%%.*}

echo -e "Alles NACH dem ersten Vorkommen von '.' abschneiden \n\t$TMP"

$> Lorem .ipsum.dolor.sit.amet.consetetur.sadipscing.elitr.sed.diam

 

Vor dem ersten Vorkommen

TMP=${VAR#*.}

echo -e "Alles VOR dem ersten Vorkommen von '.' abschneiden \n\t$TMP"

$> Lorem. ipsum.dolor.sit.amet.consetetur.sadipscing.elitr.sed.diam

 

Vor dem letzten Vorkommen

TMP=${VAR##*.}

echo -e "Alles VOR dem letzten Vorkommen von '.' abschneiden \n\t$TMP"

$> Lorem.ipsum.dolor.sit.amet.consetetur.sadipscing.elitr.sed. diam

 

Davor ersetzen

TMP=${VAR/*./replacement.}

echo -e "Alles VOR dem letzten Vorkommen von '.' ersetzen\n\t$TMP"

$> replacement. diam

 

Danach ersetzen

TMP=${VAR/.*/.replacement}

echo -e "Alles NACH dem ersten Vorkommen von '.' ersetzen\n\t$TMP"

$> Lorem .replacement

 
Funktionen

Definition

#/bin/bash

function myFunction() {

echo "you passed:" $1

echo "more code here"

return 42

# return muss nummerischer Wert sein!

}

Funktionsaufruf

myFunction param

echo Rueckgabewert: $?

# Parameter in Anführungszeichen übergeben -> "$PARAM"

 
Rechnen

Addition

#/bin/bash

$VAR_1=100; $VAR_2=50

RESULT=$(($VAR_1 + $VAR_2))

echo $RESULT

$> 150

Subtraktion

#/bin/bash

$VAR_1=100; $VAR_2=50

RESULT=$(($VAR_1 - $VAR_2))

echo $RESULT

$> 50

Multiplikation

#/bin/bash

$VAR_1=100; $VAR_2=50

RESULT=$(($VAR_1 * $VAR_2))

echo $RESULT

$> 5000

Division

#/bin/bash

$VAR_1=100; $VAR_2=50

RESULT=$(($VAR_1 / $VAR_2))

echo $RESULT

$> 2