Shell­script

Ein Shell­script ist ein wenig der Batch­da­tei in Win­dows ähn­lich. Ein Shell­script arbei­tet im Nor­mal­fall im Ter­mi­nal. Da die Bash, das ist unse­re Shell, unter Linux aber all­mäch­tig ist, hinkt der Ver­gleich mit der Batch­da­tei von Win­dows. Denn auch die soge­nann­te “PowerS­hell” von Win­dows hat nicht annä­hernd die Kraft einer Bash.

Inhalts­ver­zeich­nis

Was bringt ein Shell­script

Stel­len Sie sich vor, sie haben wöchent­lich wie­der­keh­ren­de Arbei­ten zu erle­di­gen, die immer nach einen Mus­ter abge­ar­bei­tet wer­den. Oder Sie wol­len auch in gro­ßen Zeit­ab­stän­den, aber sehr kom­ple­xe Kom­man­dos nut­zen, sind aber zu faul, jedes mal die sehr lan­ge Zei­chen­ket­te ein­zu­ge­ben. Da kommt das Shell­script ins Spiel.

Hier ein Moti­va­ti­ons­bei­spiel für etwas kom­ple­xe­res. Sie wol­len Ihr Sys­tem wie folgt aktua­li­sie­ren, repa­rie­ren und berei­ni­gen.

  1. Ein­le­sen der Paket­lis­ten # apt update
  2. Neue Pake­te sol­len älte­re Ver­sio­nen erset­zen, auch not­wen­di­ge Abhän­gig­kei­ten # apt upgrade
  3. Es soll auf ein Dis­tri­bu­ti­ons-Upgrade geprüft wer­den # apt dist-upgrade
  4. Wenn not­wen­dig, Kon­fi­gu­ra­ti­on des Paket­ver­wal­ters bei feh­ler­haf­ten Pake­ten # dpkg –con­fi­gu­re -a
  5. Wenn not­wen­dig, den Paket­ver­wal­ter selbst repa­rie­ren # apt install -f
  6. Paket­caches lee­ren, also unge­nutz­te Instal­la­ti­ons­da­tei­en # apt clean
  7. Ver­wais­te Abhän­gig­kei­ten mit Ihren Pake­ten löschen # apt autore­mo­ve
  8. Anzei­ge ob die Befeh­le feh­ler­frei abge­ar­bei­tet wur­den
  9. Oder wo Feh­ler ent­stan­den sind

Alle die­se Kom­man­dos kön­nen in weni­gen Sekun­den durch ein Script erle­digt wer­den. Jetzt kön­nen Sie über Fern­war­tung Ihrem Freund oder Ihrer Mut­ter schnell ein aktu­el­les und sau­be­res debi­an-basie­ren­des Sys­tem erstel­len.

Aber unser inter­es­san­tes Bei­spiel-Script wird wesent­lich ein­fa­cher sein, ver­spro­chen.

Zusam­men­ge­fasst

  • Eige­ne Shell­scrip­te ver­ein­fa­chen All­tags­ar­bei­ten
  • Eige­ne Shell­scrip­te spa­ren eine Men­ge an Zeit
  • Eige­ne Shell­scrip­te kön­ne Werk­zeu­ge sein, die ande­ren Men­schen hel­fen

Grund­la­gen

Im All­ge­mei­nen spricht man von einem Shell-Script. Da unter vie­len Dis­tri­bu­tio­nen die Bash-Shell, die meist genutz­te Shell ist, wer­den wir uns auf die­se kon­zen­trie­ren.

Um gleich die Angst zu neh­men, das Bash-Script ist eine ein­fa­che Text­da­tei, fer­tig aus.

Der Unter­schied zu ande­ren Text­da­tei­en, ist die ers­te Zei­le in die­ser Datei und Sie soll­ten wis­sen, was ein Linux­be­fehl, auch Kom­man­do, ist.

Außer­dem soll­ten Sie wis­sen, wo Sie sich im Ver­zeich­nis­baum befin­den, damit Sie die Aus­ga­be Ihres Shell­scripts auch fin­den.

Shell­scripts haben die Datei­ex­ten­si­on „.sh“, aber ohne die­se Datei­na­mens­er­wei­te­rung geht es auch, ist aber für die Über­sicht­lich­keit nicht zu emp­feh­len.

In unse­rem Bei­spiel bezie­hen wir uns auf die Debi­an-Kom­man­dos, die auch für „Ubun­tu“, „Linux Mint“ und wei­te­re Debi­an-Deri­va­te gel­ten.

Zusam­men­ge­fasst

  1. Wir erstel­len ein Shell­script für die Bash
  2. Das Shell­script ist eine Text­da­tei mit einer vor­de­fi­nier­ten ers­ten Zei­le
  3. In einer Shell­script wer­den Linux­be­feh­le abge­ar­bei­tet
  4. Die Datei­endung eines Shell­scripts ist „.sh“

Unser Bei­spiel

Es wäre ja inter­es­sant zu wis­sen, wel­che Pake­te in unse­rem lau­fen­den GNU/Linux vor­han­den sind. Ein­mal um Pro­gram­me zu fin­den, die nicht mehr genutzt wer­den und im gra­fi­schen „Soft­ware­ma­na­ger“ lei­der nicht ange­zeigt wer­den. Und es könn­te für eine Wie­der­her­stel­lung des bestehen­den Sys­tems, ein Back­up der Paket­lis­te erstellt wer­den.

Das war das Stich­wort „Paket­lis­te“. Wir erstel­len mit Hil­fe eines ein­fa­chen Scripts eine Paket­lis­te aller instal­lier­ten Pake­te in Form einer Text­da­tei mit Spal­ten­an­sicht.

Zudem bekommt jede Datei das aktu­el­le Datum mit in den Datei­na­men geschrie­ben, so kön­nen Sie schnell Ver­glei­che anstel­len.

Und das Sah­ne­häub­chen, alle Pake­te wer­den mit Anga­be der Ver­si­on und einer Beschrei­bung Ihrer Funk­ti­on aus­ge­lie­fert!

Zusam­men­ge­fasst

  • Unser Shell­script erstellt eine Lis­te aller instal­lier­ten Pake­te
  • Die Lis­te ist eine txt-Datei, auch Plain­text-Datei
  • Im Datei­na­men ist das aktu­el­le Datum gleich mit ange­ge­ben
  • In der Paket­lis­te wird jedem Paket die Ver­si­ons­num­mer, eine Kurz­be­schrei­bung und ande­re Infor­ma­tio­nen mit­ge­ge­ben

Das Shell­script

Bit­te legen Sie eine Text­da­tei mit dem Namen „paketliste_neu.sh“ an und fül­len Sie mit dem fol­gen­den Inhalt. Zum Abschluss bit­te die­se Datei abspei­chern.

#!/bin/bash

# Author:	Max Mustermann <https://max.mustermann.de>
# License:	GPL3
# Date:		2018-11-31
# Scriptname:	backup-paketliste
# Version:	0.2
# Description:	this script safe the packages_list with few informations

COLUMNS=200 dpkg-query -l > ~/paketliste_`date +%Y%m%d`.txt
exit [n]

: <<Kommentar
Für deutsche Benutzer
Dieses Script listet alle installierten Pakete mit Name, Version, Architektur und Beschreibung auf und speichert diese in eine Datei mit aktuellem Datum im Dateinamen und Dateierweiterung für Plaintext in "/home/BENUTZER/".
Beachte, vor date und nach day ist KEIN Apostroph, sondern jeweils ein Gravis.
Kommentar

Das Shell­script im Ein­zel­nen

Nun die Zei­len detail­liert beschrie­ben.

Zei­le 1. Das ist die inter­pre­tie­ren­de Shell. In unse­rem Fall die Bash, also die Bourne-Again-Shell. Die­se Zei­le wird auch „She­bang“ genannt. Hier hat die Rau­te kei­ne Kom­men­tar­funk­ti­on. Außer­dem dür­fen kei­ne wei­te­re Zei­chen ange­ge­ben wer­den. Nur Argu­men­te haben noch eine Berech­ti­gung in die­ser Zei­le.

1. #!/bin/bash

Zei­le 2, ist eine Leer­zei­le zur Über­sicht

2.

Zei­le 3, ist ein Kom­men­tar, ange­zeigt durch die Rau­te. Der Kom­men­tar zeigt den Autor an, um gege­be­nen­falls eine hilf­rei­che Rück­mel­dung zu sei­nem Script zu geben.

3. # Autor:	Max Mustermann <https://max.mustermann.de>

Zei­le 4 ist ein Kom­men­tar. Anga­be der Lizenz unter der man die­ses Script ver­öf­fent­licht.

4. # License:	GPL3

Zei­le 5 ist ein Kom­men­tar. Anga­be des Datum der Script-Ver­öf­fent­li­chung.

5. # Date:	2018-11-31

Zei­le 6 ist ein Kom­men­tar. Ein aus­sa­ge­kräf­ti­ger Name für das Script.

6. # Scriptname:	backup-paketliste

Zei­le 7 ist ein Kom­men­tar. Eine Ver­si­ons­num­mer hilft die Feh­ler­be­he­bung oder Ent­wick­lung nach­zu­voll­zie­hen

7. # Version:	0.2

Zei­le 8 ist ein Kom­men­tar. Eine Beschrei­bung erleich­tert kom­ple­xe­re Scrip­te in ihren Funk­tio­nen zu ver­ste­hen.

8. # Description:	this script safe the packages_list with few informations

Zei­le 9 ist eine Leer­zei­le um den Kopf zu been­den.

9. 

Zei­le 10, jetzt kom­men die Kom­man­dos, also das Herz­stück des Shell­script. Nach­fol­gend auf­ge­schlüs­selt.

  • COLUMNS=200 Hier wird die Spal­ten­an­zahl ange­ge­ben. In unse­rem Fall dür­fen 200 Zei­chen auf einer Zei­le ste­hen.
  • dpkg-que­ry -l Hier eine Abfra­ge des Paket­ver­wal­ters „dpkg“ nach den instal­lier­ten Pake­ten. Das Argu­ment „-l“ steht hier als Wild­card, auch „Joker“, für alle Pake­te.
  • > Die­se Spit­ze Klam­mer soll einen „Druck“ der Abfra­ge erstel­len. Druck im Sin­ne von „Erstel­le eine Datei“.
  • ~/ Die Til­de und der Frontslash geben den Pfad an, wo die­se Datei abge­legt wer­den soll. In unse­rem Fall, durch de Til­de gekenn­zeich­net, direkt in das Hei­mat­ver­zeich­nis, in dem auch die Ver­zeich­nis­se „Bil­der“, „Doku­men­te“ und so wei­ter, lie­gen.
  • paketliste_date +%Y%m%d.txt Das ist der Datei­na­me mit dem Datum im Datei­na­me und als Text­da­tei.
COLUMNS=200 dpkg-query -l > ~/paketliste_date +%Y%m%d.txt

Zei­le 11, das Script soll nun been­det wer­den. Das klei­ne „n“ in den ecki­gen Klam­mern ist für die Aus­ga­be einer Zif­fer. Die Zif­fer ist optio­nal für eine Feh­ler­aus­ga­be.

exit [n]

Zei­le 12 ist eine Leer­zei­le um die Kom­man­dos vom abschlie­ßen­den Kom­men­tar zu tren­nen.

12. 

Zei­le 13 bis vor­letz­te Zei­le, das ist ein mehr­zei­li­ger Kom­men­tar, ange­zeigt durch den Dop­pel­punkt und den zwei spit­zen Klam­mern die nach links zei­gen und einem Wort, hier ist es „Kom­men­tar“.

: <<Kommentar
Für deutsche Benutzer
Dieses Script listet alle installierten Pakete mit Name, Version, Architektur und Beschreibung auf und speichert diese in eine Datei mit aktuellem Datum im Dateinamen und Dateierweiterung für Plaintext in "/home/BENUTZER/".Beachte, vor date und nach day ist KEIN Apostroph, sondern jeweils ein Gravis.
Kommentar

Die letz­te Zei­le been­det den mehr­zei­li­gen Kom­men­tar mit der Wie­der­ho­lung des Wor­tes nach den spit­zen Klam­mern.

Kommentar 

Zusam­men­ge­fasst

  1. Jedes Shell­script beginnt mit Anga­be des Inter­pre­ters
  2. Ein Kopf mit den Anga­ben des Autors, Lizenz, Datum, Scriptname,Version und Beschrei­bung ist hilf­reich für die Nut­zung und Wei­ter­ent­wick­lung des Script
  3. Das Kern­stück des Scripts sind Kom­man­dos
  4. Ein­zei­li­ge Kom­men­ta­re wer­den mit einer Rau­te gekenn­zeich­net
  5. Kom­men­ta­re erleich­tern das Ver­ständ­nis für kom­ple­xe­re Scrip­te

Das Shell­script star­ten

Um ein Shell­script zu star­ten wird „sh“ und ein Leer­zei­chen benö­tigt, vor dem Pfad und dem Script-Datei­na­me. Also wie folgt vor­ge­hen.

  1. Öff­nen Sie ein Ter­mi­nal­fens­ter dort wo das Shell­script abge­legt ist, bei kom­ple­xen Scrip­ten bit­te die Kon­so­le statt dem Ter­mi­nal­fens­ter nut­zen
  2. Geben Sie ein „sh ~/paketliste_neu.sh“ und bestä­ti­gen Sie mit der „Enter“-Taste, fer­tig
  3. Nun in das Hei­mat­ver­zeich­nis gehen und die Paket­lis­te öff­nen

Wenn eine sehr lan­ge Lis­te in der Datei zu sehen ist, haben Sie Ihr ers­tes Script rea­li­siert, Glück­wunsch.

Shell­script mit Dop­pel­klick star­ten

Win­dows-Umstei­gern wol­len einen Dop­pel­klick. Auch die­se „Erleich­te­rung“ ist mög­lich. Dazu muss man wis­sen, unter Linux ist alles eine Datei, egal ob ein Gerät, wie die Fest­plat­te oder ein Dop­pel­klick zum star­ten eines Shell­script. Des­we­gen erstel­len wir jetzt die Dop­pel­klick­da­tei, oder bes­ser die „NeuePaketliste.desktop“-Datei. Auch die­se Datei ist eine rei­ne Text­da­tei, aber mit der Dateinamenserweiterung“.desktop“ statt „.txt“.

Dop­pel­klick­da­tei erstel­len

Also eine Dop­pel­klick­da­tei gibt es nicht in den ein­schlä­gi­gen Lexi­ka, es ist eine Wort­schöp­fung um den Vor­gang zu visua­li­sie­ren. Es ent­spricht in Win­dows der Datei-Ver­knüp­fung. Bit­te auf dem Schreib­tisch eine Text­da­tei anle­gen und die­se mit „NeuePaketliste.desktop“ benen­nen. Öff­nen Sie die Datei mit Ihrem Text­edi­tor, also Gedit oder Mou­se­pad, und geben fol­gen­den Inhalt ein.

[Desktop Entry] 
Version=1.0 
Name=paketliste_neu.sh 
Comment=this script safe the packages_list with few informations 
GenericName=NeuePaketliste 
Exec=sh
Terminal=true
Type=Application
Icon=preferences-system-windows
StartupNotify=true
Path=~/

Nun kann eine neue Datei der Paket­lis­te vom Schreibtisch/Desktop aus mit einem Dop­pel­klick erstellt wer­den, die wie­der­um im Hei­mat­ver­zeich­nis zu fin­den ist.

Ihr Kom­men­tar⬆ Sei­ten­an­fang