Shell­script

Ein Shell­script ist ein we­nig der Batch­da­tei in Win­dows ähn­lich. Ein Shell­script ar­bei­tet im Nor­mal­fall im Ter­mi­nal. Da die Bash, das ist un­se­re Shell, un­ter Li­nux aber all­mäch­tig ist, hinkt der Ver­gleich mit der Batch­da­tei von Win­dows. Denn auch die so­ge­nann­te “PowerS­hell” von Win­dows hat nicht an­nä­hernd die Kraft ei­ner Bash.

In­halts­ver­zeich­nis

Was bringt ein Shell­script

Stel­len Sie sich vor, sie ha­ben wö­chent­lich wie­der­keh­ren­de Ar­bei­ten zu er­le­di­gen, die im­mer nach ei­nen Mus­ter ab­ge­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, je­des mal die sehr lan­ge Zei­chen­ket­te ein­zu­ge­ben. Da kommt das Shell­script ins Spiel.

Hier ein Mo­ti­va­ti­ons­bei­spiel für et­was kom­ple­xe­res. Sie wol­len Ihr Sys­tem wie folgt ak­tua­li­sie­ren, re­pa­rie­ren und be­rei­ni­gen.

  1. Ein­le­sen der Pa­ket­lis­ten # apt up­date
  2. Neue Pa­ke­te sol­len äl­te­re Ver­sio­nen er­set­zen, auch not­wen­di­ge Ab­hän­gig­kei­ten # apt up­grade
  3. Es soll auf ein Dis­tri­bu­ti­ons-Up­grade ge­prüft wer­den # apt dist-up­grade
  4. Wenn not­wen­dig, Kon­fi­gu­ra­ti­on des Pa­ket­ver­wal­ters bei feh­ler­haf­ten Pa­ke­ten # dpkg –con­fi­gu­re -a
  5. Wenn not­wen­dig, den Pa­ket­ver­wal­ter selbst re­pa­rie­ren # apt in­stall -f
  6. Pa­ket­caches lee­ren, also un­ge­nutz­te In­stal­la­ti­ons­da­tei­en # apt clean
  7. Ver­wais­te Ab­hän­gig­kei­ten mit Ih­ren Pa­ke­ten lö­schen # apt au­tore­mo­ve
  8. An­zei­ge ob die Be­feh­le feh­ler­frei ab­ge­ar­bei­tet wur­den
  9. Oder wo Feh­ler ent­stan­den sind

Alle die­se Kom­man­dos kön­nen in we­ni­gen Se­kun­den durch ein Script er­le­digt wer­den. Jetzt kön­nen Sie über Fern­war­tung Ih­rem Freund oder Ih­rer Mut­ter schnell ein ak­tu­el­les und sau­be­res de­bi­an-ba­sie­ren­des Sys­tem er­stel­len.

Aber un­ser in­ter­es­san­tes Bei­spiel-Script wird we­sent­lich ein­fa­cher sein, ver­spro­chen.

Zu­sam­men­ge­fasst

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

Grund­la­gen

Im All­ge­mei­nen spricht man von ei­nem Shell-Script. Da un­ter vie­len Dis­tri­bu­tio­nen die Bash-Shell, die meist ge­nutz­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 Un­ter­schied zu an­de­ren Text­da­tei­en, ist die ers­te Zei­le in die­ser Da­tei und Sie soll­ten wis­sen, was ein Li­nux­be­fehl, auch Kom­man­do, ist.

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

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

In un­se­rem Bei­spiel be­zie­hen wir uns auf die De­bi­an-Kom­man­dos, die auch für „Ubun­tu“, „Li­nux Mint“ und wei­te­re De­bi­an-De­ri­va­te gel­ten.

Zu­sam­men­ge­fasst

  1. Wir er­stel­len ein Shell­script für die Bash
  2. Das Shell­script ist eine Text­da­tei mit ei­ner vor­de­fi­nier­ten ers­ten Zei­le
  3. In ei­ner Shell­script wer­den Li­nux­be­feh­le ab­ge­ar­bei­tet
  4. Die Da­tei­endung ei­nes Shell­scripts ist „.sh“

Un­ser Bei­spiel

Es wäre ja in­ter­es­sant zu wis­sen, wel­che Pa­ke­te in un­se­rem lau­fen­den GNU/Linux vor­han­den sind. Ein­mal um Pro­gram­me zu fin­den, die nicht mehr ge­nutzt wer­den und im gra­fi­schen „Soft­ware­ma­na­ger“ lei­der nicht an­ge­zeigt wer­den. Und es könn­te für eine Wie­der­her­stel­lung des be­stehen­den Sys­tems, ein Back­up der Pa­ket­lis­te er­stellt wer­den.

Das war das Stich­wort „Pa­ket­lis­te“. Wir er­stel­len mit Hil­fe ei­nes ein­fa­chen Scripts eine Pa­ket­lis­te al­ler in­stal­lier­ten Pa­ke­te in Form ei­ner Text­da­tei mit Spal­ten­an­sicht.

Zu­dem be­kommt jede Da­tei das ak­tu­el­le Da­tum mit in den Da­tei­na­men ge­schrie­ben, so kön­nen Sie schnell Ver­glei­che an­stel­len.

Und das Sah­ne­häub­chen, alle Pa­ke­te wer­den mit An­ga­be der Ver­si­on und ei­ner Be­schrei­bung Ih­rer Funk­ti­on aus­ge­lie­fert!

Zu­sam­men­ge­fasst

  • Un­ser Shell­script er­stellt eine Lis­te al­ler in­stal­lier­ten Pa­ke­te
  • Die Lis­te ist eine txt-Da­tei, auch Plain­text-Da­tei
  • Im Da­tei­na­men ist das ak­tu­el­le Da­tum gleich mit an­ge­ge­ben
  • In der Pa­ket­lis­te wird je­dem Pa­ket die Ver­si­ons­num­mer, eine Kurz­be­schrei­bung und an­de­re In­for­ma­tio­nen mit­ge­ge­ben

Das Shell­script

Bit­te le­gen Sie eine Text­da­tei mit dem Na­men „paketliste_neu.sh“ an und fül­len Sie mit dem fol­gen­den In­halt. Zum Ab­schluss bit­te die­se Da­tei ab­spei­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 de­tail­liert be­schrie­ben.

Zei­le 1. Das ist die in­ter­pre­tie­ren­de Shell. In un­se­rem Fall die Bash, also die Bourne-Again-Shell. Die­se Zei­le wird auch „She­bang“ ge­nannt. 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 an­ge­ge­ben wer­den. Nur Ar­gu­men­te ha­ben noch eine Be­rech­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, an­ge­zeigt durch die Rau­te. Der Kom­men­tar zeigt den Au­tor an, um ge­ge­be­nen­falls eine hilf­rei­che Rück­mel­dung zu sei­nem Script zu ge­ben.

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

Zei­le 4 ist ein Kom­men­tar. An­ga­be der Li­zenz un­ter der man die­ses Script ver­öf­fent­licht.

4. # License:	GPL3

Zei­le 5 ist ein Kom­men­tar. An­ga­be des Da­tum 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 Be­schrei­bung er­leich­tert kom­ple­xe­re Scrip­te in ih­ren 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 be­en­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 an­ge­ge­ben. In un­se­rem Fall dür­fen 200 Zei­chen auf ei­ner Zei­le ste­hen.
  • dpkg-que­ry -l Hier eine Ab­fra­ge des Pa­ket­ver­wal­ters „dpkg“ nach den in­stal­lier­ten Pa­ke­ten. Das Ar­gu­ment „-l“ steht hier als Wild­card, auch „Jo­ker“, für alle Pa­ke­te.
  • > Die­se Spit­ze Klam­mer soll ei­nen „Druck“ der Ab­fra­ge er­stel­len. Druck im Sin­ne von „Er­stel­le eine Da­tei“.
  • ~/ Die Til­de und der Frontslash ge­ben den Pfad an, wo die­se Da­tei ab­ge­legt wer­den soll. In un­se­rem Fall, durch de Til­de ge­kenn­zeich­net, di­rekt in das Hei­mat­ver­zeich­nis, in dem auch die Ver­zeich­nis­se „Bil­der“, „Do­ku­men­te“ und so wei­ter, lie­gen.
  • paketliste_date +%Y%m%d.txt Das ist der Da­tei­na­me mit dem Da­tum im Da­tei­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 be­en­det wer­den. Das klei­ne „n“ in den ecki­gen Klam­mern ist für die Aus­ga­be ei­ner Zif­fer. Die Zif­fer ist op­tio­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 ab­schlie­ß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, an­ge­zeigt durch den Dop­pel­punkt und den zwei spit­zen Klam­mern die nach links zei­gen und ei­nem 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 be­en­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 

Zu­sam­men­ge­fasst

  1. Je­des Shell­script be­ginnt mit An­ga­be des In­ter­pre­ters
  2. Ein Kopf mit den An­ga­ben des Au­tors, Li­zenz, Da­tum, Scriptname,Version und Be­schrei­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 ei­ner Rau­te ge­kenn­zeich­net
  5. Kom­men­ta­re er­leich­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 be­nö­tigt, vor dem Pfad und dem Script-Da­tei­na­me. Also wie folgt vor­ge­hen.

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

Wenn eine sehr lan­ge Lis­te in der Da­tei zu se­hen ist, ha­ben Sie Ihr ers­tes Script rea­li­siert, Glück­wunsch.

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

Win­dows-Um­stei­gern wol­len ei­nen Dop­pel­klick. Auch die­se „Er­leich­te­rung“ ist mög­lich. Dazu muss man wis­sen, un­ter Li­nux ist al­les eine Da­tei, egal ob ein Ge­rät, wie die Fest­plat­te oder ein Dop­pel­klick zum star­ten ei­nes Shell­script. Des­we­gen er­stel­len wir jetzt die Dop­pel­klick­da­tei, oder bes­ser die „NeuePaketliste.desktop“-Datei. Auch die­se Da­tei ist eine rei­ne Text­da­tei, aber mit der Dateinamenserweiterung“.desktop“ statt „.txt“.

Dop­pel­klick­da­tei er­stel­len

Also eine Dop­pel­klick­da­tei gibt es nicht in den ein­schlä­gi­gen Le­xi­ka, es ist eine Wort­schöp­fung um den Vor­gang zu vi­sua­li­sie­ren. Es ent­spricht in Win­dows der Da­tei-Ver­knüp­fung. Bit­te auf dem Schreib­tisch eine Text­da­tei an­le­gen und die­se mit „NeuePaketliste.desktop“ be­nen­nen. Öff­nen Sie die Da­tei mit Ih­rem Text­edi­tor, also Ge­dit oder Mou­se­pad, und ge­ben fol­gen­den In­halt 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 Da­tei der Pa­ket­lis­te vom Schreibtisch/Desktop aus mit ei­nem Dop­pel­klick er­stellt wer­den, die wie­der­um im Hei­mat­ver­zeich­nis zu fin­den ist.

Ihr Kom­men­tar | Ihre Spen­de[Pos1] Sei­ten­an­fang