Shell van besturingssysteem
Een shell is een computerprogramma waarmee een gebruiker commando's kan geven aan zijn computer. Het is 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.
De shell is een stuk software dat invoer van de gebruiker verwerkt en uitvoer terug geeft. Al deze communicatie tussen de gebruiker en de shell gebeurt via de terminalemulator. In Windows is er geen scheiding tussen de terminalemulator en de shell. Onder de meeste Microsoft Windowsversies 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 die COMMAND.COM heet. Onder UNIX is die scheiding er wel. Bekende shells onder UNIX zijn sh, csh, ksh en bash.
Inhoud |
[bewerk] Activiteiten
Om te begrijpen wat een shell precies doet volgt hieronder een beschrijving van wat de Bash-shell ongeveer doet wanneer deze wordt opgestart:
- Zoek in de algemene systeemconfiguratiedirectory (/etc) 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 PATH en terminalinstellingen voor gebruikers.)
- Zoek in de 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 omgevingsvariabelen 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 thuisdirectory 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 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)).
[bewerk] Shellscripts
Shellscripts zijn niets meer dan achter elkaar uitgevoerde commando's. In Microsoft Windows worden deze shellscripts dan ook 'batchbestanden' 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 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.
[bewerk] Diverse shells
[bewerk] Bourne-shell (sh)
De Bourne-shell of sh 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
[bewerk] C-shell (csh)
De C-shell (csh) 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.
[bewerk] Korn-shell (ksh)
De Korn-shell (ksh) 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.
[bewerk] Bourne Again-shell (bash)
De Bourne Again-shell (bash) is ontwikkeld in het GNU-project en combineerde de functionaliteit van de Bourne-shell, C-shell en de Korn-shell.
[bewerk] 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.
[bewerk] Aanverwante onderwerpen
[bewerk] Externe links
Categorieën: Linux | Unix | Windows