Wer länger braucht, ist selber Schuld: Die bash für Einsteiger

Früher war es normal, dass man nach dem Einschalten eines Computers einen blinkenden Cursor erblickte. Das war bei den meisten Heimcomputern der 80er Jahre so, das war auch bei den PCs mit MSDOS so. Anders war das in den 80ern bei den Apple MacIntosh-Computern, welche wir PC-Freaks deshalb nicht ernst nahmen, weil wir dachten nur unsere Ansicht des Dateisystems wäre der „richtige“ Zugang zum Computer. Nicht ernst genommen hat man damals auch andere Computer mit grafischer Oberfläche, wie den tollen Atari und natürlich die Amigas mit ihren flimmrigen, hochauflösenden und bunten Oberflächen. Sowas nannten „echte Profis“ damals „Spielecomputer“.

Die Profis haben sich von Microsoft eines besseren belehren lassen und sitzen nun meist an 3D animierten Vista-PCs mit der Rechenleistung von 1000 PCs von damals – nur auf der Grafikkarte.
OK, wer´s braucht. Auch ich ziehe für die meiste Zeit am Computer eine grafische Oberfläche der „Kommandozeile“ vor, aber ich bin auch begeistert von den Möglichkeiten der bash. Gerade weil ich noch den kastrierten Kommandozeileninterpreter von MSDOS kenne, weiß ich die Möglichkeiten der bash zu schätzen. Der Verein „Linux User Schwabach e.V.“ betrachtet es als (s)eine wichtige Aufgabe, Kenntnisse über das freie Betriebssystem Linux zu vermitteln und bietet ein „Guru“training an, das dem an fundierten Wissen interessierten Einsteiger dabei hilft u.a. die „bash“ kennen – und vielleicht lieben – zu lernen. Meine folgenden Beispiele sind in Rahmen meiner Teilnahme an der LUSC-Veranstaltung entstanden.

Dass eine grafische Oberfläche wunderbar einher geht mit einer Shell (Kommandozeile) zeigt nicht nur Linux, sondern auch OS X. Auch Mac User haben eine Shell – auch wenn sie davon vielleicht nichts wissen. Die unter den aktuellen Linux-Distributionen übliche Shell ist die bash.

Ein Beispiel:
Stellen Sie sich mal vor, sie möchten für jeden Monat eines Jahres ein Verzeichnis anlegen. Und in jedem Monat möchten Sie für jeden Tag ein Unterverzeichnis anlegen. Wie lange brauchen Sie dafür?
Mit der bash (Version 3.x) geht das in ungefähr 1 Sekunde (Tipparbeit)

mkdir -p 2008/{1..12}/{1..31}

..und dann brauchen Sie noch 1 Minute um die Tage im Februar und in den Monaten zu entfernen, die keine 31 Tage haben. Na, wie viel Zeit braucht der Windows-Freak?

Stellen Sie sich mal vor, Sie möchten das nicht nur für das Jahr 2008, sondern für alle Ihre (bisherigen) Lebensjahre machen. Ich z.B. bin 1964 geboren, also tippe ich:

mkdir -p {1964..2008}/{1..12}/{1..31}

OK, das mit dem löschen der „falschen“ Tage wird langsam etwas aufwändiger. Vielleicht hat jemand hierzu eine gute Idee?

Oder Sie möchten ein Verzeichnis für jede Kalenderwoche des Jahres 2008?

mkdir -p 2008/{1..52}

und vielleicht in jeder Woche noch ein Unterverzeichnis für jeden Wochentag?

mkdir -p 2008/{1..52}/{Mo,Di,Mi,Do,Fr,Sa,So}

Ich denke diese Beispiele lassen erahnen welche Vorteile die bash – oder genauer – die Kommandosubstitution bringt. Es handelt sich nämlich nicht um eine Funktionalität des Befehls mkdir, sondern um eine Eigenschaft der bash, welche die Kommandos in der geschweiften Klammer umsetzt und dann sozusagen die sich ergebenden Einzelkommandos an den Befehl mkdir schickt.

Will man sehen, was für ein Kommando auf dem System „eigentlich“ ausgeführt wird, dann gibt man einfach vor dem bash-Kommando echo ein, also z.B.

echo mkdir -p 2008/{1..12}

und als Ergebnis bekommt man

mkdir -p 2008/1 2008/2 2008/3 2008/4 2008/5 2008/6 2008/7 2008/8 2008/9 2008/10 2008/11 2008/12
Die Geschichte mit den Pünktchen geht übrigens ERST ab der bash 3.x, nicht mit der bash 2.x die z.B. noch in Debian Sarge Standard war.

2 Antworten

  1. Hallo, dein Beispiel sorgt ziemlich sicher für den üblichen Kommandozeilenfrust:

    mkdir 2008/{1..12}/{1..31}

    zieht m.E. jede Menge Fehlermeldngen nach sich und nichts passiert.

    Grund: Das Verzeichnis 2008 bzw. 2008/1 muss vorhanden sein, wenn ein Verzeichnis 2008/1/1 erstellt werden soll!

    So geht’s m.E. (alles eine Zeile):
    mkdir 2008; mkdir 2008/{1..12}; mkdir 2008/{1..12}/{1..31}

    Comment: Nicht unbedingt nützlich, aber eine nette Demo der „Macht“ der bash-Kommandozeile

    H.

  2. hallo Hans,
    ich hatte das -p für „parental“ vergessen, welches dazu führt, dass neue Unterverzeichnisse mitsamt den nötigen darüber befindlichen neuen Verzeichnissen erstellt werden. Dann geht es schon alles in einem Rutsch. Danke für den Hinweis, habe es in obigem Text ergänzt!
    Übrigens könntest Du statt
    mkdir 2008; mkdir 2008/{1..12}; mkdir 2008/{1..12}/{1..31}
    auch kürzer sagen
    mkdir 2008 2008/{1..12} 2008/{1..12}/{1..31}
    denn mit mkdir kannst Du natürlich beliebig viele Verzeichnisse mit einem Befehl erstellen.
    Ciao Ralph

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert