
Als je met een besturingssysteem (OS) van Microsoft, Apple of Linux werkt, gebruik je shellscripts, misschien zonder dat je het weet. Sterker nog, je werkt met shells elke keer dat je je Linux-OS opstart.
Shellscripts helpen programmeurs, data scientists en gewone gebruikers tijd te besparen en repetitieve taken te vermijden via automatisering. Zo kunnen scripts dagelijkse back-ups uitvoeren, patches installeren, systemen en activiteiten monitoren en routinematige audits doen.
Shells lezen vrij intuïtieve, voor mensen begrijpelijke commando’s en zetten die om in iets wat het systeem begrijpt.
Wat is een Shell?
Een shell is een type computerprogramma, een command-line interpreter, waarmee Linux- en Unix-gebruikers hun besturingssysteem kunnen bedienen via command-line interfaces. Shells laten gebruikers efficiënt en direct met hun besturingssysteem communiceren.
Shellscripten is niet één enkele taal, maar omdat het deels natuurlijke taalcommando’s gebruikt, is het makkelijk te leren, ook zonder programmeerachtergrond. Elke shellscripttaalvariant wordt echter als een aparte taal gezien, en voor complexere activiteiten vergen shells veel oefening.
Shellscripten is een van de eenvoudigste manieren om automatisering in te richten. Met Linux- of Unix-commando’s geven shellscripten data scientists, DevOps- en TechOps-professionals voorwaardelijke en lus-constructies om commando’s te herhalen.
Shellscripts hebben niet altijd dezelfde naam. Sh, Bash (de meest voorkomende), csh, en tesh zijn allemaal shellscripts. In IBM’s VM-besturingssysteem heten ze EXEC; in DOS staan shellscripts bekend als batchbestanden.
Een shell kent twee categorieën: command-line shell en grafische shell. Command-line shells gebruik je via command-line interfaces, waarbij systemen invoer ontvangen in voor mensen leesbare commando’s en via de command-line de uitvoer tonen.
Grafische shells gebruiken een grafische gebruikersinterface (GUI) voor interacties en basisbewerkingen zoals bestanden openen, sluiten en opslaan.
Hier zijn enkele voorbeeldcommando’s:
Om te zien in welke map je zit: pwd
Om een commando in de handleiding te vinden: man command
Om een tekstbestand scrollbaar te maken: less file 1 of more file 1
Verschillende soorten shells
Bourne Shell
Hoe stoer de naam ook klinkt, de Bourne shell heeft niets te maken met spionnen of achtervolgingen. De Bourne shell, de op één na meest gebruikte Unix-shell, werd in 1979 gemaakt door Stephen Bourne bij Bell Labs. Net als zijn voorganger, de Thompson shell, is Bournes uitvoerbare bestandsnaam sh.
De Bourne shell is de standaardshell van het Solaris-OS. Ondanks zijn leeftijd is de Bourne shell vandaag de dag populair vanwege de snelheid en compactheid. De Bourne shell is echter niet erg interactief en kan zijn command history niet terughalen. Ook ontbreken logische en rekenkundige expressies.
Bourne-prompts zijn onder andere:
- Volledig pad van het commando:
/bin/shen/sbin/sh - Standaard voor niet-rootgebruiker:
$ - Standaard voor rootgebruiker:
#
command-line
De C shell, bestandsnaam csh, en zijn voorganger met bestandsnaam tcsh, is een andere Unix-shell uit de late jaren 70. Hij werd gemaakt door Bill Joy, destijds promovendus aan de University of California, Berkeley.
In tegenstelling tot de Bourne shell is de C shell interactief en herkent hij command history en aliases. C-shells bevatten ook C-achtige expressesyntax en ingebouwde rekenkunde.
command-line-prompts zijn onder andere:
- Volledig pad van het commando:
/bin/csh - Standaard hostnaam niet-rootgebruiker:
% - Standaard hostnaam rootgebruiker:
#
KornShell
De KornShell, bestandsnaam ksh, werd begin jaren 80 ontwikkeld door David Korn bij Bell Labs. KornShell bevat veel functies van de C shell en is een superset van, en dus achterwaarts compatibel met, de Bourne shell.
De KornShell draait sneller dan de C-shell. Hij kan Bourne-shellscripts uitvoeren en biedt C-achtige arrays, functies en hulpmiddelen voor tekenreeksmanipulatie. Daarnaast heeft hij ingebouwde rekenkunde.
KornShell-prompts zijn onder andere:
- Volledig pad van het commando:
/bin/ksh - Standaard voor niet-rootgebruiker: $
- Standaard voor rootgebruiker: #
GNU Bourne-Again shell
De GNU Bourne-Again, of Bash, shell is een open-source alternatief voor de Bourne shell. Hij werd ontworpen door Brian Fox voor het GNU-project en verscheen in 1989. Hij is niet alleen volledig compatibel met de Bourne shell, maar neemt ook veel van de beste functies over van KornShells en C-shells. De GNU Bourne-Again shell heeft automatisch toegewezen pijltjestoetsen voor bewerken en het terughalen van commando’s.
GNU Bourne-Again-prompts zijn onder andere:
- Volledig pad van het commando:
/bin/bash - Standaardprompt niet-rootgebruiker:
bash-x.xx$ - Standaard voor rootgebruiker:
bash-x.xx#
Wat shellscripten doet
Deze vergelijking is wat simpel, maar zie shellscripts als automatische aanvulling voor programmeurs. In plaats van commando’s één voor één te typen, gebruikt shell reeksen commando’s in één script dat gebruikers kunnen starten met een eenvoudige bestandsnaam in de command-line. Shellscripts voeren programma’s uit, voeren tekstomslag uit en manipuleren bestanden.
Shellscripten kan allerlei taken uitvoeren, waaronder monitoring zoals schijfgebruik, back-ups maken, commandotools creëren, bestanden manipuleren, programma’s draaien, programma’s aan elkaar koppelen, batches afronden, enzovoort.
Belangrijkste alternatieven voor shell
In IBM’s VM-besturingssysteem heten ze EXEC; in DOS staan shellscripts bekend als batchbestanden. Dat zijn nog steeds shellscripts. Andere scripttalen, zoals Javascript, Python, Perl en TCL, zijn ook scripttalen. Niet verrassend heeft iedere IT-professional zo zijn favorieten, en zo meteen komen we op de voor- en nadelen van shells.
Waarom is Shell zo populair?
Shell komt op bijna elk OS voor omdat het efficiënt is en makkelijk te updaten. Het houdt je computersysteem in de gaten en voert routinematige back-ups uit zonder dat jij eraan hoeft te denken.
Je hoeft niet van syntax te wisselen, want de syntaxis en commando’s van shell zijn identiek aan wat je in de command-line invoert. Bovendien schrijf je shellscripts snel en eenvoudig: ze starten snel op en zijn makkelijk te debuggen.
Wat zijn de nadelen van shellscripts?
Shellscripts kunnen foutgevoelig zijn en lastig te diagnosticeren wanneer er problemen optreden. Shells zijn niet ontworpen voor complexe of grote taken en ze voeren traag uit. Daarnaast bieden shells weinig datastructuur en kunnen er syntax- of ontwerpfouten zijn.
Wanneer is Shell ontstaan?
De eerste shellscript werd begin jaren 60 gemaakt door MIT-medewerker Louis Pouzin. Zijn eerste command-line was RUNCOM, waarmee computerwetenschappers werden bevrijd van repetitieve taken zoals compileren, bijwerken, hernoemen en verplaatsen.
Hoewel Pouzin geen expert was in programmeertalen, of misschien juist daarom, geloofde hij dat command-lines op zichzelf een taal konden zijn.
Halverwege de jaren 60 werkte Pouzin samen met de Britse wetenschapper Christopher Strachey. Strachey ontwierp een macro-generator die als basis diende voor Pouzins commandotaal, die draaide op wat toen het ultramoderne Multics-besturingssysteem was.
Hoe Shell aan zijn naam komt
Pouzin noemde zijn nieuwe taal “shell” omdat het de buitenste laag van besturingssystemen is.
Shell-functies
Shells zijn populair onder programmeurs omdat ze beknopt zijn. Dat betekent niet dat ze simpel zijn. Shells bieden verschillende functies, waaronder:
Achtergrondverwerking
Een van de grootste voordelen van shellscripts is dat ze op de achtergrond kunnen draaien. Afhankelijk van het commando kunnen shells op de voorgrond of achtergrond draaien. Voorgrondprocessen zijn zichtbaar op het scherm en kunnen alleen sequentieel draaien.
Achtergrondprocessen verschijnen niet op het scherm en kunnen niet-sequentieel draaien. Om een shellscript op de achtergrond uit te voeren, hoef je alleen een ampersand (&) aan het einde van het script toe te voegen.
Wildcard-vervanging
Wildcard-vervanging laat systemen meer dan één commando tegelijk verwerken of stukjes tekst uit bestanden vinden. Zo vertelt * het systeem dat elke tekenreeks mag matchen, zelfs lege. ? matcht één teken, [example] matcht elk teken (“example” is slechts een voorbeeld) en [1-9] (nog een voorbeeld) instrueert de shell om tekens binnen het bereik te matchen.
Commando-aliases
Shell-aliases zijn snelkoppelingen voor commando’s. Sommige aliases zijn één woord, andere één letter. Om de lijst met aliases te zien, hoef je alleen ·alias in te voeren.
Commandogeschiedenis
Shells besparen op vele manieren tijd en moeite, maar een bijzonder handige functie is de commandogeschiedenis. In plaats van commando’s opnieuw te typen, toont het commando history alle commando’s die tijdens die sessie zijn gebruikt.
Bestandsnaamvervanging
Bestandsnaamvervanging staat ook bekend als “globbing”. Wanneer een woord tekens bevat zoals ?, * of [, of begint met ~, ziet de shell het woord als een patroon en vervangt het door een alfabetische lijst met bestandsnamen die op het patroon passen.
Input/output-omleiding
Input/output- (i/o) omleiding laat je de standaardinvoer (stdin) en standaarduitvoer (stdout) omwisselen en koppelen aan het beeldscherm, het toetsenbord of een bestand.
Piping
Shell piping is een andere vorm van omleiding die de uitvoer van een commando/proces/programma naar een ander commando/proces/programma stuurt. Hierdoor kunnen de commando’s/processen/programma’s gelijktijdig werken en kan data continu worden doorgegeven zonder via het beeldscherm of tijdelijke tekstbestanden te gaan.
Shell-variabelevervanging
Wanneer de shell een expressie met speciale tekens tegenkomt, vertaalt hij de code naar iets dat voor gebruikers herkenbaarder is. Dat proces heet variabelevervanging, of kortweg variabelen.
Variabelen worden ook gebruikt door meer ervaren programmeurs. Als een programmeur bijvoorbeeld de daadwerkelijke waarden vóór uitvoering niet kent, kan hij de variabele als placeholder gebruiken totdat de code klaar is voor uitvoering.
Hoe shells verschillen
Er zijn grofweg twee soorten shells, “shell” (sh) en “bash”. Beide draaien binnen het Unix-besturingssysteem. Shell is een generieke naam voor scripten in om het even welke shell. Zoals de naam aangeeft, is bash (Bourne Again Shell) een verbeterde en uitgebreide shell.
Bash gebruikt upgrades voor meer functionaliteit, ondersteunt job control, is makkelijker te gebruiken dan sh en ondersteunt commandogeschiedenis. Sh ondersteunt geen commandogeschiedenis; de scripts werken in elke shell en zijn daardoor draaglijker.
Hoe Shell zich door de jaren heen heeft ontwikkeld
Door de jaren heen zijn shells geëvolueerd en tegelijk grotendeels hetzelfde gebleven. De Bourne shell was een grote stap vooruit ten opzichte van de oorspronkelijke Thompson shell, maar veel van de oorspronkelijke functies zijn gebleven. Natuurlijk zijn computers en onze verwachtingen wel veranderd.
Er zijn potentieel evenveel shells als gebruikers; maar in de kern zijn er twee typen shells – command-lines of Bourne. Al het andere is een dialect in plaats van een andere taal.
Unix-shells
Unix-shells zijn de originele en ze zijn nog steeds springlevend. Unix-shells werken op Unix en Unix-verwante besturingssystemen, zoals Macs.
command-lines
command-lines (csh) zijn de meest voorkomende Unix-shells. command-lines blinken uit in interactief werk, waaronder aliases, cdpath, job control, path hashing, directorystacks, enzovoort. Ze bieden ook bewerkings- en geschiedenisfuncties.
Tenex command-line
De Tenex command-line (tcsh) werd ontwikkeld door Ken Greer van Caregia Melo University. Tenex werd gezien als een verbetering ten opzichte van de oorspronkelijke command-line-versie. In tegenstelling tot de oorspronkelijke C biedt Tenex bewerken en aanvullen op de command-line, naast andere functies. In 1981 fuseerde tsch met csh.
Korn-shells
Korn-shells (ksh) zijn een andere Unix-shell, maar dan een soort compromis tussen C- en Bourne-shells, met achterwaartse compatibiliteit met de laatste. De Korn shell werd begin jaren 80 ontwikkeld door David Korn bij Bell Labs.
Bourne again shells
De Bourne Again shell (Bash) is een open-source Unix-shell die eind jaren 90 werd geschreven door Brian Fox voor het GNU-project als upgrade van de Bourne shell.
Exotische shells
Hoewel ze allemaal zijn gebouwd op C- of Bourne-shells, hebben programmeurs honderden, zo niet duizenden verschillende dialecten ontworpen. Sommige zijn nuttig, andere vooral leuk.
Wie gebruikt Shell?
Bijna iedereen die een computer gebruikt profiteert van shell, maar het is vooral nuttig voor systeembeheerders, DevOps’ers, programmeurs en data scientists. Shells worden gebruikt om taken en applicaties te automatiseren, pakketten te installeren, data te back-uppen of te herstellen en natuurlijk om te programmeren.
Shell-voorbeelden
Shells zijn zo eenvoudig of complex als de gebruiker wil. Een eenvoudige bash-groet luidt bijvoorbeeld: echo “hello $USER”, terwijl complexe shellscripts bijna grenzeloos zijn. Hier zijn enkele basisvoorbeelden:
Maak een bestand in bash met een geschikte editor. Hier gebruiken we de vi-editor.
$ vi example.shDruk op de toets 'i' om de code te beginnen invoeren:
#!/bin/bash
valid=true
count=1
while [ $valid ]
do
echo $count
if [ $count -eq 10 ];
then
break
fi
((count++))
done
Voer uit met
bash example.sh $vi example2.sh#!/bin/bash
echo "Enter first number"
read x
echo "Enter second number"
read y
((sum=x+y))
echo "The result of addition = $sum"
bash example2.shCarrières met Shell
Denk bij shellscripten eerder aan een handig hulpmiddel in de gereedschapskist van een data scientist dan aan een carrièrepad. Dataprofessionals van allerlei pluimage moeten meerdere talen kennen (of zouden dat moeten), en shellscripts helpen hen die talen efficiënter te gebruiken.
Toch zijn er bedrijven met functies die specifiek shellscripten vereisen. Het gemiddelde salaris ligt rond $78.000. Dat gezegd, shellscripts vormen een opstap naar rollen als systeembeheerder, die zes cijfers kunnen opleveren.
Conclusie
Shell is als een draad die door elke programmeertaal loopt. Complexe commando’s worden teruggebracht tot beknopte en intuïtieve snelkoppelingen. Begrip van shell is een belangrijke vaardigheid voor elke data scientist of computer engineer. Leer meer over shell in DataCamp’s Introduction to Shell-cursus.
Shell FAQ's
Wat is de kernel?
De kernel is het meest essentiële onderdeel van het besturingssysteem. De kernel is verantwoordelijk voor het toekennen van geheugen en tijd aan de programma’s van de computer, en beheert de communicatie en bestandsopslag als reactie op systeemaanroepen.
Wat is de shell?
De shell is de interface tussen de kernel en de gebruiker.
Wat zijn de voordelen van shell?
We weten al dat shell efficiënt is en veel van de saaie taken van een gebruiker overneemt; maar daarnaast laten shells gebruikers scripts aanpassen aan hun eigen behoeften.
Wat zijn de nadelen van shell?
Een enkele fout kan zeer kostbaar zijn en lastig te achterhalen. Bovendien zijn shells niet erg draaglijk tussen verschillende besturingssystemen.
Wat is het verschil tussen Unix en Linux?
Linux is een Unix-kloon die is ontwikkeld door Linus Torvalds. Linux is niet op zichzelf een besturingssysteem; het is een kernel. Unix bevat echter de kernel, de shell en de programma’s.
Welke shells worden vaak gebruikt op Linux- en Unix-systemen?
Bash, of de Bourne Again shell, is de meest gebruikte shell, maar zowel Linux als Unix ondersteunen ook command-lines, KornShells en TCSH.
Wat is shellsyntaxis?
In de natuurlijke taal verwijst syntaxis naar hoe woorden en zinnen zijn gerangschikt. Shellsyntaxis is vergelijkbaar; het verwijst naar de volgorde van bewerkingen.
Wat is een interpreter?
Een interpreter vertaalt afzonderlijke instructies naar machinetaal.
Wat is een compiler?
Een compiler vertaalt programma’s op hoog niveau naar meer complexe machinetaal.
Hoe voer je een shellbestand uit?
Stel rechten in met: chmod+x script-name-here.sh
Voer het vervolgens uit met: ./script-name-here.sh of sh script-name-here.sh.
