4.5    Die elementaren Programme

Nun besprechen wir sowohl die wichtigen internen Shellkommandos als auch die wichtigen Programme zur täglichen Arbeit mit der Shell. Fast alle dieser Kommandos »spielen« mit normalem Text herum. Denken Sie jetzt jedoch bitte nicht, dass diese Kommandos nicht zeitgemäß wären: Linux ohne Shell(-programme) wäre wie Windows ohne grafische Oberfläche, macOS ohne Maus oder ein Smartphone ohne Gestensteuerung.

4.5.1    echo und Kommandosubstitution

Beginnen wir mit dem echo-Kommando. Der Sinn und Zweck von echo ist es, Text auf dem Bildschirm auszugeben. Der auszugebende Text wird dabei einfach als Parameter angegeben:

user$ echo "Das echo-Kommando ist nicht immer shellintern."
Das echo-Kommando ist nicht immer shellintern.

Listing 4.13     Das echo-Kommando

In Skripten wird echo oft zum Ausgeben der Werte von Variablen benutzt oder um die Ausgaben eines Programms in Text einzubetten.

Doch nun zurück zur Ausgabe von Variablen. Es gibt drei verschiedene Möglichkeiten zur Ausgabe von Text mittels echo.

Die erste benutzt normale Anführungszeichen. Bei dieser Variante kann der Wert einer Variablen ausgegeben werden. Die zweite Variante benutzt Backshifts und bewirkt die Ausführung eines Befehls und damit die Integration der Ausgabe dieses Befehls in den eigentlichen Text. Die Ausführung eines Befehls auf diese Weise wird als Kommandosubstitution bezeichnet. Variante Numero 3 wird in Hochkommata gepackt und erlaubt keine Wertausgaben oder Kommandosubstitutionen. Variablenaufrufe und Kommandos werden also direkt ausgegeben. Das folgende Beispiel soll diese Schreibweisen zum besseren Verständnis demonstrieren. Später werden Sie lernen, dass Variablen über die Syntax $VARIABLEN_NAME angesprochen werden.

// Normale Anführungszeichen geben neben dem eigentlichen
// Text auch den Wert von Variablen preis:
user$ echo "Der Wert von NUMMER ist $NUMMER"
Der Wert von NUMMER ist 13
// Backticks nutzt man zur Kommandosubstitution:
user$ echo "Heute ist `date` !"
Heute ist Sat Oct 14 17:41:09 CEST 2023 !

// Mit Hochkommata wird Ihnen gar nichts gegönnt:
user$ echo 'Heute ist `date` und der Wert von X ist $X'
Heute ist `date` und der Wert von X ist $X

Listing 4.14     Entwirrung der Schreibweisen

4.5.2    sleep

Das sleep-Kommando wartet einen gewissen Zeitraum, bevor es sich beendet. Dies ergibt in der Shellprogrammierung hin und wieder Sinn. Der Aufruf sleep 10 »schläft« für zehn Sekunden. Wenn wir zweimal die aktuelle Uhrzeit mit dem date-Befehl ausgeben lassen und dazwischen schlafen, zeigt sich der Effekt:

user$ date; sleep 10; date
So 12. Mai 18:52:40 CEST 2024
So 12. Mai 18:52:50 CEST 2024
$

Listing 4.15     Anwendungsbeispiel für sleep

4.5.3    Erstellen eines Alias

Unter Linux ist es möglich, einen sogenannten Alias zu erstellen. Ein solcher Alias wird verwendet, um eine Kurzform für ein in der Regel etwas längeres Kommando zu schaffen. Beispielsweise könnten Sie einen Alias namens ll anlegen, der stellvertretend für ls -laF steht.

Um diese Funktionalität der Linux-Shells zu verwenden, greift man auf das Kommando alias zurück. Im Normalfall listet es nur die aktuell eingerichteten Kommando-Aliasse auf, doch es kann auch zur Erstellung eines neuen benutzt werden.

user$ alias
alias ll="ls -laF"
alias ls="/bin/ls -aF"
user$ ls ~/projects/netlib
./      eigrp.h   imap.h         pop3.h    test*
../     hello.h   ip4.h          rip.h     test.c
arp.h   http.h    ip6.h          signal.h  testcode/
bgp.h   icmp.h    net_error.h    smtp.h    udpd*
dhcp.h  icmp6.h   net_wrapper.h  snmp.h    udpd.c
dns.h   icmprd.h  netlib.h       tcpscn.h  udpscn.h
egp.h   igrp.h    ospf.h         telnet.h  x11.h

Listing 4.16     Das alias-Kommando

Ein neuer Alias wird mit alias name="Kommando" erstellt, wobei das Kommando nur in Anführungszeichen geschrieben werden muss, wenn es nicht druckbare Zeichen enthält oder Escapesequenzen angewandt werden müssen. Ein Alias wird via unalias <Alias> entfernt.

$ alias p=pwd
$ p
/home/swendzel/projects/netlib
$ unalias p
$ p
bash: p: command not found

Listing 4.17     Einen eigenen Alias einrichten und löschen

4.5.4    cat

cat ist eines der wichtigsten Programme jedes Linux-Rechners und gibt die ihm angegebenen Dateien auf dem Monitor aus. cat wird vor allem verwendet, um die Ausgabe einer Datei in eine (andere) Datei umzulenken oder um den Inhalt der Datei an ein anderes Programm weiterzugeben. Wir werden darauf in naher Zukunft noch genauer zu sprechen kommen.

user$ cat /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
…
…
…
nobody:x:99:99:nobody:/:
swendzel:x:1000:100:Steffen W.,,,:/home/swendzel:/bin/bash

// Es ist möglich, mehrere Dateien ausgeben zu lassen.
user$ cat DateiA
Inhalt von DateiA
user$ cat DateiB
Inhalt von DateiB
user$ cat DateiA DateiB
Inhalt von DateiA
Inhalt von DateiB

Listing 4.18     Das cat-Programm