Menüs

Ein Textmenü für Terminalsitzungen zeigt das Beispiel in Listing 12. Darin läuft eine While-Endlosschleife, die im Anschluss an eine Auswahl mit break terminiert. Daher können Sie weitere Befehle nach der Schleife im Skript abarbeiten lassen. Das Skript lässt sich außerdem als eine Art Baukasten benutzen und nach Ihren Wünschen ändern sowie erweitern.

Listing 12

#!/bin/sh
while true; do
  clear
  echo "     1   Editor Nano"
  echo "     2   Htop"
  echo "     3   Root-Anmeldung"
  echo "     4   Plattenbelegung /home"
  echo "     9   ENDE"
  echo "     ---------------"
  echo -n "     "
  read pnr
        if [ $pnr -eq 1 ]; then
    nano
  elif [ $pnr -eq 2 ]; then
    htop
  elif [ $pnr -eq 3 ]; then
    su -
  elif [ $pnr -eq 4 ]; then
    df -h /home; sleep 3
  elif [ $pnr -eq 9 ]; then
    break
  fi
done
echo "Programmende angefordert"

Mit Hilfsprogrammen wie yad ergänzen Sie Shellprogramme um eine Bedienung per GUI. Die Fähigkeiten gehen hier weit über eine Menüsteuerung hinaus und reichen bis hin zu komfortablen Masken für Datenbankanwendungen. Das Beispiel aus Listing 13 verdeutlicht die grundlegende Vorgehensweise, die Abbildung 7 zeigt das kleine GUI-Skript im Betrieb.

Das Menü residiert in einer Endlosschleife, eine Variable nimmt die einzelnen Menüpunkte in der Form Punkt1!Punkt2... auf. Die Variable aktion nimmt das Ergebnis der Auswahl in Yad auf, der Inhalt lautet bei der Auswahl des ersten Punktes Punkt1|. Mithilfe des Befehls cut befreit das Skript den Programmnamen vom anhängenden Trennzeichen und startet die Anwendung via exec im Hintergrund. So können Sie weiter auf das Menü zugreifen und andere Programme starten. Falls Sie das nicht möchten, lassen Sie am Ende der exec-Zeile das Zeichen & weg.

Im Yad-Formular (--form) erfolgt die Auswahl in der Anweisung --field, genauer spezifiziert durch die Option CB (für "Checkbox"). Für das Beenden der Endlosschleife werten Sie den Exit-Code entsprechend aus, den Sie dazu den entsprechend vorbelegten --button-Anweisungen entnehmen. Möchten Sie das Skript auch per [Esc] beenden können, müssen Sie neben dem Exit-Code 1 auch noch die 252 beachten.

Das Beispiel verwendet als Aktionen das Spiel Xbomb, den Taschenrechner Xcalc, den Editor Xedit sowie das Terminalprogramm Xterm. Hier können Sie ganz nach Gusto auch weitere oder andere Programmaufrufe eintragen und auch die Überschriften nach Ihren Wünschen abändern. Falls Sie das Skript mittels Fernsitzung ausführen wollen, müssen Sie bei der Verbindungsaufnahme auch gleich für die notwendige Display-Umleitung sorgen (ssh -X ...).

Listing 13

#!/bin/bash
while true; do
  # Menue-Inhalt, Feldtrenner="!", beliebig erweiterbar
  aktionen="xbomb!xcalc!xedit!xterm"
  aktion=$(yad --title="Programmstarter mit Yad" \
               --text="Programm aus der Auswahl starten." \
               --form --field="Aktion: ":CB $aktionen \
               --button="Abbruch":1 --button="Starten":0)
  # Exit-Code auswerten
  ec=$(echo $?)
  if [ $ec -eq 1 ]; then
    # Skript-Ende, falls Schalter 'Abbruch' gedrueckt
    exit
  elif [ $ec -eq 252 ]; then
    # Skript-Ende mit [Esc]
    exit
  fi
  # Auslesen der gewählten Aktion
  aktion=$(echo $aktion  | cut -d \| -f1)
  # Aufruf des gewählten Programms
  exec $aktion &
done
Abbildung 7: Das mit Yad erstellte grafische Menü aus Listing 13.

Beispiel: Aktionen nach Datum/Zeit ohne cron/at auslösen

Nicht immer müssen Sie at oder cron nutzen, um eine Aktion nach Datum oder Zeit auszuführen – auch per Shellskript lässt sich ein Programm nach einer vorgegebenen Zeit beenden. Das Beispiel zeigt eine Lösung, die einen Webbrowser stets zur vollen nächsten Stunde diskussionsfrei beendet. Sie können das noch weiterspinnen, indem Sie stattdessen gleich die ganze Sitzung des Fräulein Tochters respektive des Herrn Sohns beenden oder sogar den Rechner ganz herunterfahren. Alternativ taugt der Lösungsansatz auch für ein kleines "Internet-Café" im Vereinsheim.

Listing 14 zeigt den Ablauf. Zuerst werden die Start- und Endzeit festgelegt. Der Einfachheit halber agiert das Shellskript ungerecht: Wer zur Minute 01 startet, bekommt mehr Zeit als der Benutzer, der erst später loslegt. Das Skript startet den Webbrowser (hier Iceweasel) und legt dessen Prozess-ID in einer Variablen ab. In der While-Schleife am Ende nimmt das Skript alle 59 Sekunden einen "Uhrenvergleich" vor. Stimmen angegebene Schlussstunde und aktuelle Stunde überein, beendet das Skript den Webbrowser-Prozess und anschließend sich selbst. 

Listing 14

#!/bin/sh
# Stunde des Anwendungsstarts
startstunde=$(date +%H)
# Eine Stunde spaeter,
# Tagesueberlauf beruecksichtigt
if [ $startstunde -eq 23 ]; then
  endestunde=0
else
  endestunde=$(echo $startstunde + 1 | bc)
fi
# Programm starten ...
iceweasel &
# ... und PID auslesen
pid=$(echo $!)
# Kontrollschleife
while true; do
  # Aktuelle Stunde
  stunde=$(date +%H)
  # Uebereinstimmung: Webbrowser beenden
  if [ $stunde -eq $endestunde ]; then
    kill -9 $pid
    exit
  fi
  # 59 Sekunden warten
  sleep 59
done

Der Autor

Harald Zisler beschäftigt sich seit den frühen 1990-ern mit FreeBSD und Linux. Zu Technik- und EDV-Themen verfasst er Zeitschriftenbeiträge und Bücher; frisch erschienen ist gerade beim Rheinwerk-Verlag die dritte Auflage von "Computer-Netzwerke".

Glossar

Shebang

Die Zeichenkombination #! am Anfang eines Skripts bewirkt, dass die enthaltenen Kommandos mit dem angegebenen Programm, oft einer bestimmten Shell oder auch den Perl- und Python-Interpretern, ausgeführt werden.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Verschlungene Pfade
    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.
  • Teil 5: Kontrollstrukturen die Zweite
    Nach der Einführung in die Kontrollstrukturen und Vorstellung von einfachen Vergleichsmöglichkeiten im letzten Teil beschäftigen wir uns diesmal mit Reihenvergleichen, Schleifen, Tastatureingaben und kleinen Auswahlmenüs.
  • Bash-Skripte sind Programme
    Wer regelmäßig mit der Shell arbeitet, wird leicht zum Programmierer: Schreiben Sie mehrere Shell-Befehle in eine Textdatei und machen diese ausführbar, haben Sie schon Ihr erstes Shell-Skript entwickelt. Die Shell bietet als Programmiersprache aber noch viel mehr.
  • Scripted Reality
    Aus den Shell-Tipps und dem Guru-Training kennen Sie viele nützliche Kommandozeilentools. Die können Sie in kleinen Shell-Skripten zu leistungsfähigen Miniprogrammen bündeln. Im einfachsten Fall lassen Sie damit mehrere Befehle automatisch nacheinander ablaufen, doch Skripte haben noch mehr zu bieten.
  • Erste Schritte mit Bash-Skripten
    Das Programmieren von Shell-Skripten ist keine Hexerei. Schon mit wenigen Grundkenntnissen sparen Sie durch das Automatisieren alltäglicher Aufgaben viel Zeit.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...