Shell (informatica): verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
k Wijzigingen door 213.155.190.135 (Overleg) hersteld tot de laatste versie door ArthurBot
Label: Misbruikfilter: Leeghalen
Regel 1:
Een '''shell''' is een interactief [[computerprogramma]] waarmee een gebruiker met een [[Command Line Interface]] opdrachten kan geven aan het [[besturingssysteem]] van een [[computer]].
 
Van oudsher wordt hierbij gebruikgemaakt van een [[Computerterminal|terminal]] die de invoer van de gebruiker aan het besturingssysteem doorgeeft en de uitvoer dan weer aan de gebruiker doorgeeft. Op grafische desktopsystemen is doorgaans een terminalemulator aanwezig en het is dan van belang om hierbij onderscheid te maken tussen de [[terminalemulator]] en de shell zelf. Het doorgeven van de invoer en uitvoer van de grafische interface naar de shell gebeurt door middel van de terminalemulator. Bekende terminalemulators zijn [[XTerm]] en ATerm.
 
In Windows is er geen scheiding tussen de terminalemulator en de shell. Onder de meeste [[Microsoft Windows]]versies kunnen zowel de terminalemulator als de bijbehorende shell worden benaderd door het programma ''cmd'' of ''command'' te starten. Deze shell is ongeveer gelijk aan de shell in [[DOS (besturingssysteem)|DOS]] die COMMAND.COM heet. Onder [[Unix]] (en daarmee [[Linux]]) is die scheiding er wel en kunnen verschillende shells worden gebruikt op dezelfde terminal(emulator). Bekende shells onder UNIX zijn [[sh]], [[csh]], [[ksh]] en [[bash]].
 
== Activiteiten ==
Om te begrijpen wat een shell precies doet, volgt hieronder een beschrijving van wat de [[Bash|Bash-shell]] ongeveer doet wanneer deze wordt opgestart:
 
# Zoek in de algemene systeemconfiguratiedirectory (<tt>/etc</tt>) naar het bestand ''profile'' en voer dit uit. (In het bestand ''profile'' zijn configuratie-instellingen te vinden die voor iedereen gelden. Voorbeelden hiervan zijn het instellen van het <tt>PATH</tt> en terminalinstellingen voor gebruikers.)
# Zoek in de [[homedirectory|thuisdirectory]] van de gebruiker naar het bestand ''.profile'' en voer de opdrachten hierin uit. (Gebruikers kunnen in dit bestand hun persoonlijke instellingen opslaan. Zo kunnen ze hun eigen commando's als aliassen opnemen of bepaalde [[omgevingsvariabele]]n instellen.)
# Laat de gebruiker een [[prompt]] zien waarin hij commando's uit kan voeren. Afhankelijk van de instellingen kunnen ook de volgende zaken worden geregeld:
#*Sla de uitgevoerde commando's op in de homedirectory van de gebruiker in het bestand ''.history''
#*Controleer of het door de gebruiker ingetikte commando door de shell (zie [[shell builtin]]) of door een extern [[computerprogramma|programma]] moet worden uitgevoerd
#*Laat de uitvoer van het ingevoerde commando zien aan de gebruiker
 
Het laten zien van de prompt (en de subactiviteiten die hieronder vallen) wordt continu herhaald totdat de gebruiker de shell afsluit (vaak met het commando 'exit' of door het tikken van een 'end-of-file'-karakter (meestal control-D)).
 
== Shellscripts ==
Shellscripts zijn niets meer dan achter elkaar uitgevoerde commando's. In Microsoft Windows worden deze shellscripts dan ook '[[batch]]bestanden' genoemd. Een shellscript wordt regel voor regel uitgevoerd door de [[interpreter]] (in dit geval de shell). Een voorbeeld van een shellscript is de volgende alias:
 
alias worldwritable='for i in *; do echo "Checking ./$i" >&2 && find $i -perm -2 -type p -ls 2>/dev/null; done'
 
Met dit shellscript kan gezocht worden naar bestanden die beschrijfbaar zijn voor iedereen. Dit wordt in een grafisch aantrekkelijke interface gegoten. Dit shellscript kan eenvoudiger gelezen worden indien er wat newlines zouden zijn toegevoegd. Dan wordt ook duidelijk dat deze regel slechts een opeenvolging van commando's is:
 
----
 
for i in *
do
echo "Checking ./$i" >&2
find $i -perm -2 -type p -ls 2>[[/dev/null]]
done
 
Bovenstaande is een stuk duidelijker te lezen en onthult dat dit shellscript slechts een aantal commando's achter elkaar uitvoert:
 
----
 
for i in *
do
('for' is een zogenaamde [[builtin]]; een commando dat niet door een extern programma, maar door de shell zelf wordt uitgevoerd. Dit bevordert de snelheid van de uitvoering.) Voer het volgende stuk code uit voor ieder bestand in de huidige directory (en sla voor iedere [[iteratie]] de bestandsnaam op in de [[variabele (informatica)|variabele]] genaamd 'i').
 
----
 
echo "Checking ./$i" >&2
Vertel de gebruiker wat we momenteel doen (de inhoud van de variabele genaamd '$i').
 
----
 
find $i -perm -2 -type p -ls 2>/dev/null
Roep het eigenlijke programma 'find' aan met als argument het huidige bestand '$i' en nog wat [[parameters]].
 
----
 
done
Beëindig de 'for'-loop.
 
== Diverse shells ==
=== Bourne-shell ([[sh]]) ===
 
De Bourne-shell of <tt>sh</tt> werd ingevoerd in 1977 op UNIX versie 7. Het is ontwikkeld door Stephen Bourne die bij AT&T Bell Laboratories werkte. Deze shell heeft veel invloed gehad op alle shells die na die tijd zijn ontstaan inclusief de shell in DOS en Windows.
 
De belangrijkste verbeteringen ten opzichte van voorgaande shells waren:
* meer en langere parameters mogelijk
* omgevingsvariabelen
* redirectie van foutmeldingen mogelijk
* meer mogelijkheden voor scripting
* ALGOL-achtige controlestructuren zoals
** if ~ then ~ else ~ fi
** case ~ in ~ esac
** while ~ do ~ done
 
=== C-shell ([[csh]]) ===
 
De C-shell (<tt>csh</tt>) werd ingevoerd met 4.1BSD. Het grootste voordeel van deze shell is dat het voorzieningen had voor jobcontrole. Zo was het mogelijk om een proces dat op de achtergrond loopt naar voren te halen zodat het bijvoorbeeld onderbroken of gepauzeerd kon worden. Een groot verschil met de Bourne-shell is dat de C-shell een syntaxis gebruikt die lijkt op de [[programmeertaal C]].
 
=== Korn-shell ([[ksh]]) ===
 
De Korn-shell (<tt>ksh</tt>) is in 1983 geschreven door David Korn. Deze shell was een mix van de Bourne-shell en de C-shell. Hij was compatibel met de syntaxis van de Bourne-shell en had de jobcontrolefunctionaliteit van de C-shell. Verder had deze shell een eenvoudige commandoregeleditor.
 
=== Bourne Again-shell ([[bash]]) ===
 
De Bourne Again-shell (<tt>bash</tt>) is ontwikkeld in het GNU-project en combineerde de functionaliteit van de Bourne-shell, C-shell en de Korn-shell.
 
=== DOS-shell (COMMAND.COM) en Windows-shell (CMD.EXE) ===
 
De DOS-shell is een zeer versimpelde uitvoering van de Bourne-shell. Hij is geschikt voor het opstarten van commando's en het maken van eenvoudige scripts. De DOS-shell (in combinatie met de standaardcommando's in DOS) mist vele eigenschappen waardoor hij niet gebruikt kan worden voor iets ingewikkelder scripts. Zo mist hij bijvoorbeeld vele commando's en controlestructuren. De Windows-shell is in grote lijnen niet anders dan de DOS-shell.
 
== Aanverwante onderwerpen ==
* [[Besturingssysteem]]
* [[Scripttaal]]
 
== Externe links ==
* [http://www.gnu.org/software/bash/bash.html GNU Bash homepage]
 
[[Categorie:Unix]]
[[Categorie:Windows]]
 
[[ar:قشرة (حوسبة)]]
[[bg:Команден интерпретатор]]
[[ca:Shell (informàtica)]]
[[cs:Shell (programování)]]
[[de:Betriebssystem-Shell]]
[[el:Κέλυφος (υπολογιστές)]]
[[en:Shell (computing)]]
[[eo:Ŝelo (komputiko)]]
[[es:Shell (informática)]]
[[fr:Shell (informatique)]]
[[he:מעטפת (מחשבים)]]
[[hr:Ljuska (računarstvo)]]
[[id:Shell (komputer)]]
[[it:Shell (informatica)]]
[[ko:셸]]
[[ms:Cangkerang (pengkomputeran)]]
[[pl:Powłoka systemowa]]
[[pt:Shell (informática)]]
[[ru:Оболочка операционной системы]]
[[sl:Lupina (računalništvo)]]
[[sr:Љуска (рачунарство)]]
[[sv:Skalprogram]]
[[ta:முனையம்]]
[[th:เชลล์]]
[[tr:Kabuk programlama]]