💡 Erstes Skript & sandbox¶
Hier ist ein Beispiel für eine Sandbox, in der du gefahrlos mit shebang
, chmod
, ls
und grep
und dem Umgang mit Skripten experimentieren kannst, sofern du in dem Verzeichnis der sandbox bleibst:
Schritt 1: Sandbox erstellen¶
Erstelle einen Ordner, der als Sandbox dient, um deine Tests zu isolieren.
# Ordner erstellen
mkdir ~/sandbox
cd ~/sandbox
# Optional: Backup vor versehentlichen Löschungen
chmod -w ~/sandbox
Wenn du Änderungen am Sandbox-Verzeichnis machen möchtest, setze die Berechtigungen zurück:
chmod +w ~/sandbox
Schritt 2: Skript mit Shebang erstellen¶
Erstelle ein einfaches Skript, das du mit einem Shebang und ausführbaren Berechtigungen versiehst.
# Neues Skript erstellen
cat << 'EOF' > hello.sh
#!/bin/bash
# Ein einfaches Skript, das Inhalte einer Datei durchsucht
echo "Hallo, ich bin ein Skript!"
ls
grep "TODO" testfile.txt
EOF
Schritt 3: Skript ausführbar machen¶
Verändere die Berechtigungen, damit das Skript ausführbar ist.
# Datei ausführbar machen
chmod +x hello.sh
# Teste die Berechtigungen
ls -l hello.sh
Du siehst, dass die Datei mit -rwxr-xr-x
gekennzeichnet ist.
Schritt 4: Testdaten hinzufügen¶
Erstelle eine Datei, in der du mit grep
nach Mustern suchen kannst.
cat << 'EOF' > testfile.txt
# Dies ist eine Testdatei
TODO: Diese Zeile muss noch bearbeitet werden
Ein weiterer Text
TODO: Eine weitere Aufgabe
EOF
Schritt 5: Skript ausführen¶
Führe das Skript aus und überprüfe die Ergebnisse.
./hello.sh
Die Ausgabe sollte ungefähr so aussehen:
Hallo, ich bin ein Skript!
hello.sh
testfile.txt
TODO: Diese Zeile muss noch bearbeitet werden
TODO: Eine weitere Aufgabe
Schritt 6: Sandbox testen und erweitern¶
Du kannst die Sandbox beliebig erweitern, ohne dein System zu gefährden. Hier ein paar Ideen:
- Weitere Skripte erstellen, um mit unterschiedlichen Shebangs zu experimentieren (z.B.
#!/usr/bin/env python3
für Python). - Berechtigungen testen, z.B.:
chmod u-r hello.sh # Entfernt Leserechte für den Besitzer ./hello.sh # Sollte eine Fehlermeldung ausgeben chmod u+r hello.sh # Leserechte wiederherstellen
grep
erweitern, z.B. mit-i
für groß-/kleinunabhängige Suche oder-v
, um Zeilen auszuschließen.
Mit dieser Anleitung kannst du relativ gefahrlos experimentieren und die Basics lernen!
Zusatzinformationen zu cat
¶
Die Schreibweise cat << 'EOF' > testfile.txt
wird verwendet, um Inhalte direkt in eine Datei zu schreiben, ohne dass ein Texteditor benötigt wird. Dies ist nützlich für die schnelle Erstellung von Test- oder Konfigurationsdateien.
Aufbau der Syntax¶
Grundlegende Erklärung:¶
cat
: Das Unix-Toolcat
(kurz für "concatenate") gibt Inhalte aus.<< 'EOF'
: Dies ist ein sogenannter "Here-Document" (oderheredoc
). Es leitet die Eingabe aus dem Skript oder der Konsole bis zu einer definierten Begrenzung (EOF
) an den Befehl weiter.>
: Umleitung der Ausgabe in eine Datei (testfile.txt
).'EOF'
: Der Begrenzungstext (Delimiter), der das Ende der Eingabe markiert.
Wichtige Details:¶
'EOF'
(oder andere Begriffe wieEND
):- Die Begrenzung kann beliebig gewählt werden, muss aber konsistent sein.
- In einfachen Anführungszeichen
'
eingeschlossen, verhindert es die Interpretation von Variablen und anderen speziellen Zeichen in der Eingabe (literale Verarbeitung).
>
: Überschreibt die Datei, falls sie existiert. Mit>>
würde an die Datei angehängt.
Beispiel mit Erklärung¶
Befehlszeile:¶
cat << 'EOF' > testfile.txt
# Dies ist eine Testdatei
TODO: Diese Zeile muss noch bearbeitet werden
Ein weiterer Text
TODO: Eine weitere Aufgabe
EOF
Schritt-für-Schritt:¶
- Beginn: Nach
cat << 'EOF'
wird alles, was eingegeben wird, voncat
verarbeitet, bisEOF
eingegeben wird. - Eingabe: Der Nutzer gibt Zeilen ein, die in die Datei geschrieben werden sollen.
- Begrenzung (
EOF
): SobaldEOF
(oder der definierte Begriff) eingegeben wird, endet die Eingabe. - Umleitung (
>
): Alle Daten werden intestfile.txt
gespeichert.
Ergebnis:¶
Der Inhalt der Datei testfile.txt
ist nun:
# Dies ist eine Testdatei
TODO: Diese Zeile muss noch bearbeitet werden
Ein weiterer Text
TODO: Eine weitere Aufgabe
Erweiterte Varianten¶
1. Variablen interpretieren (ohne '
):¶
TODO="Fertigstellen"
cat << EOF > testfile.txt
# Dies ist eine Testdatei
$TODO: Diese Zeile muss noch bearbeitet werden
EOF
Ausgabe in der Datei:
# Dies ist eine Testdatei
Fertigstellen: Diese Zeile muss noch bearbeitet werden
2. An eine Datei anhängen (>>
):¶
cat << 'EOF' >> testfile.txt
Dies wird angehängt.
EOF
Ausgabe in der Datei:
# Dies ist eine Testdatei
TODO: Diese Zeile muss noch bearbeitet werden
Ein weiterer Text
TODO: Eine weitere Aufgabe
Dies wird angehängt.
3. Kombination mit Befehlen:¶
cat << 'EOF' > $(date +"test_%Y%m%d.txt")
# Automatisch generierte Datei mit Datum
EOF
Ergebnis: Eine Datei mit dem Namen test_20241208.txt
(Datum angepasst) wird erstellt.
Fazit¶
cat << 'EOF' > dateiname
ist eine einfache und schnelle Methode, Dateien direkt in der Shell zu erstellen.- Die Begrenzung (
EOF
) gibt Flexibilität und vermeidet die Notwendigkeit von Texteditoren. - Variablen oder Befehle können mit oder ohne Anführungszeichen flexibel eingebunden werden.
Zusatzinformation zu ~/
und ./
¶
~/
(Tilde-Slash)¶
Bedeutung:¶
~/
steht für das Home-Verzeichnis des aktuellen Benutzers.- Es ist eine Abkürzung, die dir erlaubt, schnell auf deinen Benutzerordner zuzugreifen.
Beispiele:¶
Navigation zum Home-Verzeichnis:
cd ~/
Effekt: Du landest im Home-Verzeichnis des Benutzers, z. B.
/home/benutzername
auf Linux oder/Users/benutzername
auf macOS.Dateien im Home-Verzeichnis bearbeiten:
nano ~/meine_datei.txt
Effekt: Öffnet die Datei
meine_datei.txt
im Home-Verzeichnis.Liste von Dateien im Home-Verzeichnis anzeigen:
ls ~/
Effekt: Zeigt die Inhalte des Home-Verzeichnisses an.
Vorteile:¶
- Spart Zeit und Tippaufwand.
- Dynamisch für jeden Benutzer – unabhängig vom genauen Pfad ihres Home-Verzeichnisses.
./
(Dot-Slash)¶
Bedeutung:¶
./
bezieht sich auf das aktuelle Verzeichnis, in dem du dich gerade befindest.- Es wird verwendet, um Dateien oder Programme direkt aus dem aktuellen Ordner auszuführen oder darauf zuzugreifen.
Beispiele:¶
Skript im aktuellen Verzeichnis ausführen:
./mein_skript.sh
Effekt: Führt das Skript
mein_skript.sh
aus, das sich im aktuellen Verzeichnis befindet.Datei im aktuellen Verzeichnis öffnen:
nano ./meine_datei.txt
Effekt: Öffnet die Datei
meine_datei.txt
, die im aktuellen Verzeichnis liegt.ls
kombiniert mit./
:ls ./scripts
Effekt: Zeigt den Inhalt des Unterordners
scripts
, der im aktuellen Verzeichnis liegt.
Warum ./
verwenden?¶
- In vielen Systemen sucht die Shell standardmäßig nicht im aktuellen Verzeichnis nach ausführbaren Dateien.
- Ohne
./
würde der Befehlmein_skript.sh
nicht funktionieren, es sei denn, das Skript liegt in einem Verzeichnis, das in der UmgebungsvariablePATH
definiert ist.
- Ohne
./
gibt explizit an, dass die Datei im aktuellen Verzeichnis liegt.
Unterschied zwischen ~/
und ./
¶
Merkmal | ~/ |
./ |
---|---|---|
Bezieht sich auf | Home-Verzeichnis des Benutzers | Aktuelles Arbeitsverzeichnis |
Beispielpfad | /home/benutzername/ |
/aktueller/pfad/ |
Verwendung | Zugriff auf Benutzerdateien | Zugriff auf lokale Dateien |
Typische Anwendung | Benutzerprofile, Konfigurationsdateien | Lokale Skripte oder Programme |
Fazit:¶
~/
: Nützlich, um immer Zugriff auf dein Home-Verzeichnis zu haben, unabhängig von deinem aktuellen Standort in der Verzeichnisstruktur../
: Praktisch, um spezifisch auf Dateien und Programme im aktuellen Arbeitsverzeichnis zuzugreifen.