Shell-Programmierung

Script ausführbar machen

chmod +x <Scriptname>  # Ausführbar machen
./<scriptname>         # Ausführen


Zuweisungen

a="blub" # Hier keine Leerzeichen


Auswertung

echo $a
echo "Hallo $a
echo 'Hallo $a' #Gibt Hallo $a aus. Hier wird also der Variablennamen ausgegeben, nicht aber deren Inhalt.


Subshell

#           Subshell
#        ___|____
for i in $(seq 9)
do
     echo $i
done
 
#Ausgabe: 123456789


Parameter

#!/bin/bash -> Shebang

$0     = Skriptname inkl. Pfad
$#     = Gibt die Anzahl der Parameter zurück
$@     = Alle Parameter
var    = $1  -> Zuweißund der Parameter an eine Variable
shift -> 


Shift

Wirft immer ersten übergebenen Parameter von $@ weg.

while [ $i ]
do
     echo $@
     shift
done
 
#Eingabe: 7 8 9 10
#Ausgabe: 8 9 10
#Ausgabe: 9 10
#Ausgabe: 10


Parameter an Script übergeben

Aufruf: scriptname Klaus Norbert

#!/bin/bash
 
echo "Lieber $1,"
echo "lange nichts mehr von dir gehört. Geht es Dir gut? Melde Dich mal wieder!"
echo " "
echo "Liebe Grüße $2"


IF-Anweisung

Basisaufbau

if [ BEDINGUNG ] #Leerzeichen sind hier wichtig
then
     Anweisung1
fi


if [ BEDINGUNG ] #Leerzeichen sind hier wichtig
then
     Anweisung1
else
     Anweisung2
fi


if [ BEDINGUNG ] #Leerzeichen sind hier wichtig
then
    Anweisung1
elif [ BEDINGUNG2 ]
     Anweisung2
else
     Anweisung3
fi


Bedingungen

=  : equal
-lt: less than
-le: less equal
-gt: greater than
-ge: greater equals
-eq: equal
-ne: not-equal

STRING1  = STRING2 -> True if the strings are equal.   
STRING1 != STRING2 -> True if the strings are not equal.
        
EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.

etc.
siehe: help test

Beispiel1

Prüfen ob Script mit zwei Parametern aufgerufen wurde Aufruf: scriptname parm1 parm2 parmn

#!/bin/bash
 
if [ $# = 2 ]
then
     echo "Ich wurde mit 2 Parametern aufgerufen"
else
     echo "Ich wurde mit mehr oder weniger als zwei Parametern aufgerufen"
fi


For-Schleife

Basisaufbau

for i in $@
do
     Anweisung1 mit $i
done


Weiteres

for var in a b c
do
     echo $var
done


9 Dateien mit dem Namen Datei1.txt …Datei9.txt mit dem Inhalt „Ich bin Datei1…9“

#!/bin/bash
 
for i in {0..9}
do
 
     echo "Datei $i angelegt"
     echo "Hallo ich bin Datei $i" >> datei$i.txt
 
done


Übergebene Parameter rückwärts ausgeben

#!/bin/bash
 
ausgabe=""
 
for i in $@
do
     ausgabe="$i $ausgabe"
done
 
echo $ausgabe 
 
#Eingabe: 1 2 3 4 5 6 7 8 9
#Ausgabe: 9 8 7 6 5 4 3 2 1


Planetenliste untereinander ausgeben

#!/bin/bash
for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus
do
     echo $planet
done


While-Schleife

while [ Bedingung ]
do
     Anweisung 1
done


Weiteres

#       Leerzeichen! 
#      _||_
while [ $1 ]
do
     #mach was
     shift
done


Dateiliste in lowercase umbenennen

#!/bin/bash
while [ $1 ]
do
     mv $1 $(echo $1 | tr A-Z a-z)
     shift
done


Weiteres allgemein

Dateinamen in lowercase umbenennen

#!/bin/bash
 
mv $1 $(echo $1 | tr A-Z a-z)

linux/shell-programmierung.txt · Zuletzt geändert: 2015/07/06 22:32 (Externe Bearbeitung)