Bash Grundlagen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bash Grundlagen

    Bei diesem Grundkurs werden dir die Funktionen von Bash erklärt.

    Inhaltsverzeichnis:

    |- 1. Einleitung / Was ist Bash ?
    |- 2. Anwendungsbereiche
    |- 3. Methoden & Abfragen
    |- 4. Erste Beispiele
    |- 5. Erweiterte Beispiele

    Teil 2

    |- 6. Arrays


    1. Einleitung / Was ist Bash ?

    Bash (Bourne-Again Shell) ist die Standart Shell unter den meisten Linux Distributionen.
    In der Regel wird BASH als Kommandozeile genutzt, aber BASH ist auch eine Programmiersprache.

    Bash ist ein Kommandozeileninterpreter. Das heißt das BASH die Eingaben des Benutzers / Skripts ausführt.

    Gibt man zum Beispiel in PuTTY den Befehl "whoami" ein, so erhält man den Benutzernamen des aktuell eingeloggten Benutzers.

    Beispiel Ausgabe: root

    Das gleiche kann man auch mit einem Bash Skript lösen.



    2. Anwendungsbereiche

    Bash kommt im Alltag sehr oft zum Einsatz.
    Möchte man zum Beispiel ein automatisiertes Backupskript auf Systemebene schaffen,
    löst man das meistens mit BASH.

    Aber auch andere Systemaufgaben, wie das Übertragen von Dateien zwischen mehreren Servern kann BASH wunderbar lösen.

    Grundsätzlich werden BASH Skripte eingesetzt um Automatisierungen vorzunehmen, um
    Zeit durch die Eingabe in eine Shell zu sparen und um Sachen zu
    vereinfachen.




    3. Methoden & Abfragen

    Ausgabe:
    Eine Ausgabe kann mit "echo" und "echo -e" erzeugt werden.

    "echo -e" erlaubt Backslashes, zb für Zeilemumbrüche ("\r\n")

    Es gibt aber noch viele weitere Möglichkeiten.

    Einfach in der Shell (PuTTY etc) folgendes eingeben: man echo

    String:

    Ein String wird unter BASH folgendermaßen eingeleitet:

    STRING="Hallo Welt"


    Um den Text auszugeben, fügen wir folgendes hinzu:

    echo
    $STRING

    Das Skript sieht dann so aus:

    Shell-Script

    1. #!/bin/bash
    2. STRING="Hallo Welt"
    3. echo $STRING


    Ausgabe: Hallo Welt

    Ein String wird ohne Dollarzeichen deklariert.
    Bei der Verwendung, muss das Dollarzeichen dann vorhanden sein.

    Beispiel:

    Quellcode

    1. TAG="Montag"
    2. echo $TAG


    Möchten wir bei einem String ein Shell Kommando ausführen,
    dann muss dieser Befehl in Backticks stehen.

    Beispiel: Wir möchten in einem String den aktuell eingeloggten Benutzer speichern.

    Quellcode

    1. STRING=`whoami`



    --

    Wichtig: Nach dem Gleichheitszeichen darf kein Leerzeichen erfolgen!

    Richtig: STRING="HALLO"

    Falsch: STRING = "HALLO"



    IF Abfrage

    Eine IF-Abfrage ist unter BASH ebenfalls zu lösen.

    Dazu leiten wir die Abfrage mit einem "if" ein und fügen anschließend die Anweisung hinzu:

    Quellcode

    1. if [ ANWEISUNG ]; then
    2. #Ausführung
    3. fi


    Nachdem "if" folgt unsere Anweisung.

    Trifft diese Anweisung zu (then), folgt unser Ausführcode.

    Eine If-Abfrage wird mit "fi" beendet.

    Möchten wir also abfragen ob bei einem String ein gewisser Satz steht,
    machen wir das folgendermaßen:

    Shell-Script

    1. #!/bin/bash
    2. STRING="Mir gehts gut"
    3. if [ "$STRING" == "Mir gehts gut" ]; then
    4. echo "Anweisung korrekt!"
    5. fi


    Ausgabe: Anweisung korrekt!

    --

    Möchten wir nun eine ELSE Abfrage hinzufügen, dann geht das so:

    Quellcode

    1. STRING="gehts gut"
    2. if [ "$STRING" == "Mir gehts gut" ]; then
    3. echo "Anweisung korrekt!"
    4. else
    5. echo "Anweisung nicht korrekt!"
    6. fi
    Alles anzeigen


    Wie man nun sehen kann, wurde beim String einfach das "Mir" weggenommen.

    Nun stimmt die Anweisung nicht mehr und das Skript gibt folgendes aus:

    "Anweisung nicht korrekt!"

    --

    Möchten wir nun eine ELSEIF Abfrage einfügen, dann geht das folgendermaßen:

    Shell-Script

    1. #!/bin/bash
    2. STRING="gehts gut"
    3. if [ "$STRING" == "Mir gehts gut" ]; then
    4. echo "Anweisung korrekt!"
    5. elif [ "$STRING" == "gehts gut" ]; then
    6. echo "Anweisung zum Teil korrekt!"
    7. else
    8. echo "Anweisung nicht korrekt!"
    9. fi
    Alles anzeigen


    ELSEIF heißt unter BASH = elif

    Wenn der STRING den Text "gehts gut" beinhaltet, dann geben wir "Anweisung zum Teil korrekt!" aus.

    Wenn der STRING nicht beiden Anweisungen entspricht, geben wir "Anweisung nicht korrekt!".


    --

    Möchte man Zahlen vergleichen, kann man andere Operatoren nehmen:

    -lt entspricht <

    -gt entspricht >

    -le entspricht <=

    -ge entspricht >=

    -eq entspricht ==

    -ne entspricht !=


    Quellcode

    1. ZAHL=1
    2. WEITERE_ZAHL=2
    3. if [ $ZAHL -eq $WEITERE_ZAHL ]; then
    4. echo "Beide Zahlen stimmen"
    5. else
    6. echo "Beide Zahlen sind nicht identisch!"
    7. fi
    Alles anzeigen



    --

    Wichtig: Zwichen Eckklammern und Anweisung müssen Leerzeichen sein!

    Richtig: if [ ANWEISUNG ]; then

    Falsch: if [ANWEISUNG]; then


    Man kann auch mit BASH rechnen und weitere Abfragen machen.

    Stichwort: operatoren



    4. Erste Beispiele

    Wir erinnern uns an den Befehl "whoami" (siehe 1.).

    Damit wir diesen Befehl in einem BASH Skript einsetzen können,

    legen wir eine Datei mit dem Namen "test.sh" an.

    Ein Bash Skript startet immer mit einem Shebang.
    Das ist Zeichenkombination #! am Anfang eines Skripts.

    Danach müssen wir den Interpreter einsetzen.
    Das wäre in unserem Fall: /bin/bash

    Unser Skript sieht bis jetzt so aus:


    Shell-Script

    1. #!/bin/bash



    Da wir den Befehl "whoami" ausführen möchten, fügen wir diesen Befehl einfach eine Zeile drunter ein:

    Shell-Script

    1. #!/bin/bash
    2. whoami


    Unser Skript ist nun fertig.

    Damit wir das Bash Skript auch starten können, müssen wir es ausführbar machen.

    Dazu gebe bitte in deiner Shell folgendes ein:

    chmod +x test.sh

    Wenn das Skript zb unter /var liegt, dann einfach

    chmod +x /var/test.sh

    Man kann auch direkt zur Datei navigieren (mit cd /) und den Befehl ausführen.

    Damit wir unser Skript starten können, navigieren wir zu dem Skript (cd/) und geben folgenden Befehl ein:

    ./test.sh

    Nun erhalten wir den Benutzernamen des aktuell eingeloggten Benutzers.

    Beispiel Ausgabe: root


    Wie man also sehen kann, kann BASH genau das machen, was man manuell mit der Shell macht.

    Machen wir mit einem weiterem Beispiel weiter.

    Jeder kennt unter Linux den Befehl "top".

    Gibt man in seiner Shell (PuTTY etc) den Befehl "top" ein,
    bekommt man eine Auflistung von den Prozessen, die derzeit laufen.

    Beispiel Ausgabe:

    [Blockierte Grafik: http://puu.sh/1bUJL]

    Möchten wir diesen Befehl in einem BASH-Skript nutzen, fügen wir ihn hinzu:

    Shell-Script

    1. #!/bin/bash
    2. top


    Nun startet das BASH Skript das Programm "top".


    5. Erweiterte Beispiele

    In diesem Beispiel möchten wir dem User "root" alle Verzeichnisse und Dateien auflisten lassen (ls).
    Ist der Benutzer nicht "root", geben wir ihm eine Fehlermeldung aus.

    Quellcode

    1. STRING=`whoami`
    2. if [ "$STRING" == "root" ]; then
    3. ls
    4. else
    5. echo "Du bist nicht der Benutzer >root<"
    6. fi
    Alles anzeigen


    --

    Um zu überprüfen ob eine Datei existiert:

    Quellcode

    1. if [ -f /var/www/index.html ]; then
    2. echo "Datei existiert"
    3. else
    4. echo "Datei existiert nicht"
    5. fi



    --

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von oSteven ()

  • Bash Grundlagen [TEIL 2]

    6. Arrays

    Wie in den meisten anderen Programmiersprachen, kann man auch bei BASH Arrays nutzen.
    Der Syntax-Aufbau ist dabei fast gleich, wie bei anderen Sprachen.


    |Syntax|


    ARRAYNAME=(ELEMENTE)

    oder

    ARRAYNAME[INDEX0]='ELEMENT'
    ARRAYNAME[INDEX1]='ELEMENT'
    ARRAYNAME[INDEX2]='ELEMENT'


    ------

    |Beispiel Array erstellen|

    UnserArray=("1" "2" "3")


    Unser Beispiel-Array enthält 3 (1, 2, 3) Elemente.


    Man kann das ganze aber auch folgendermaßen machen:

    UnserArray[0]='1'
    UnserArray[1]='2'
    UnserArray[2]='3'


    Ich empfehle die obere Variante, weil diese übersichtlicher ist.

    ------

    Um einzelne Sachen ausgeben zu können, machen wir folgendes:


    |Element auslesen|

    echo ${ARRAYNAME[ELEMENT]}


    Bei unserem Beispiel also:

    echo ${UnserArray[0]}


    Die Ausgabe wäre: 1


    Immer daran denken, dass das Erste Element bei einem Array bei 0 anfängt.


    ------

    |Mehrere Elemente auslesen|


    Man kann natürlich auch mehrere Elemente aus einem Array auslesen.

    Damit wir mehrere Elemente auslesen können, müssen wir die Startpositon und die Endposition angeben.

    Bei unserem Beispiel:

    echo ${UnserArray[@]:0:2}


    Die 0 heißt "Vom Anfang" und die 2 "bis zum 3. Element".

    Das heißt dieser Code würde folgendes ausgeben:


    1 2 3


    Wir geben die Elemente 1 (0) bis 3 (2) aus.


    ------

    |Elemente gekürzt auslesen|

    Man kann natürlich auch einzelne Elemente gekürzt ausgeben.

    Angenommen wir haben ein Array mit folgenden Elementen:


    NeuesArray=("Hallo" "MeinName" "IstJoe")

    Wir möchten jetzt beim 2. Element nur das Wort "Name" haben.

    echo ${NeuesArray[1]:4:7}


    Erklärung:


    Wir wählen das 2. Element (1) und geben bei der ersten Stelle die Startposition an und bei der zweiten Stelle die Endposition.

    Da das "N" von "Name" das 4. Zeichen ist, geben wir bei der ersten Stelle eine 4 ein.
    Da "MeinName" 7 Zeichen lang ist, geben wir bei der Endposition eine 7 ein.



    Ausgabe:

    Name

    [Blockierte Grafik: http://puu.sh/1nx7T]
    [Blockierte Grafik: http://puu.sh/1nx8g]


    ------

    |Elemente zählen]

    Wenn wir die Elemente die in einem Array sind zählen möchten, dann machen wir folgendes:

    echo ${#ARRAYNAME[*]}


    Ausgabe: Die Anzahl der Elemente

    Bei unserem Beispiel Array wären es 3 Elemente.


    ------

    |Elemente ersetzen]

    Wir können natürlich auch vorhandene Elemente mit anderen ersetzen.

    Das geht folgendermaßen:

    echo ${UnserArray[@]/1/5}

    Die "1" wird in unserem Beispiel Array zur 5 geändert.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von oSteven ()

  • 7. For Schleife

    Wie bei den meisten Programmiersprachen kann man bei BASH auch Schleifen nutzen.
    Der Syntax unterscheidet sich nur minimal.


    [Syntax]
    for VARIABLE in {ZAHLEN}do
    ANWEISUNG
    done


    oder

    for (( VARIABLE=WERT; VARIABLE OPERATOR WERT; VARIABLE++))
    do
    ANWEISUNG
    done


    ------


    |Beispiel Schleife erstellen|

    Das nachfolgende Script würde 30 Durchgänge durchlaufen:


    for i in {1..30}
    do
    echo "Durchgang: $i"
    done



    Man kann auch einzelne Durchgänge machen:

    for i in 1 2 3 4
    do
    echo "Durchgang: $i"
    done

    Man kann auch mit dem gängigen Syntax arbeiten:

    for (( i=1; i<=3; i++))
    do
    echo "Durchgang: $i"
    done