For als Zählschleife
#/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
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
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
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 ]
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 |
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
#/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
Länge einer Zeichenkette
#/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
#/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
#/bin/bash
if [[ "$VAR" = *ipsum* ]]; then
echo -e "[ \"$VAR\" ]" enthaelt "[ \"ipsum\" ]";
else
echo "no match!";
fi
Zeichenkete mit '?' auf Inhalt prüfen
#/bin/bash
if [[ "$VAR" = *ips?m* ]]; then
echo -e "[ \"$VAR\" ]" enthaelt "[ \"ipsum\" ]";
else
echo "no match!";
fi
Zeichenkete mit '?([char])' auf Inhalt prüfen
#/bin/bash
if [[ "$VAR" = *ips?(u)m* ]]; then
echo -e "[ \"$VAR\" ]" enthaelt "[ \"ipsum\" ]";
else
echo "no match!";
fi
Zeichenketenmanipulation
#/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
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"
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