Bourne shell

programovací jazyk

Bourne shell je interpret příkazů (shell) pro operační systémy vycházející ze systému Unix. Byl implicitním shellem ve Version 7 Unix a ve většině unixových systémů je /bin/sh stále Bourne shell nebo symbolický či pevný odkaz na kompatibilní shell, i když mnoho uživatelů používá jiné shelly.

Bourne shell
Použití Bourne shellu na Version 7 Unix
Použití Bourne shellu na Version 7 Unix
VývojářBellovy laboratoře
První vydání1979; před 16798 dny
Operační systémUnix
Typ softwaruUnixový shell
Některá data mohou pocházet z datové položky.

Bourne shell vyvinul Stephen Bourne v Bellových laboratořích jako náhradu za Thompson shell, který byl v systému přítomen jako program se stejným jménem sh. Bourne shell byl vydán v roce 1979 v Unixu verze 7 distribuované na vysoké školy a univerzity. I když se používá jako interaktivní interpret příkazů, byl také zamýšlen jako skriptovací jazyk a obsahuje většinu funkcí, které jsou obvykle považovány za základ pro tvorbu strukturovaných programů.

K oblibě Bourne shellu příspěla kniha The Unix Programming Environment Briana Kernighana a Roba Pikea, která byla první komerčně vydanou knihou, která výukovou formou představila shell jako programovací jazyk.

Historie

editovat
 
Version 7 Unix: původní manuálová stránka Bourne shellu. Simulace PDP-11 na SIMH.

Práce na Bourne shellu začaly v roce 1976.[1] Poprvé se objevil ve Version 7 Unix,[2] předchůdcem Bourne shellu byl Mashey shell.

Mezi hlavní cíle shellu patřilo:[3]

Vlastnosti původní verze

editovat

K vlastnostem UNIX Bourne shellu verze 7 patří:

  • skripty lze spouštět zadáním jména souboru, v němž je skript uložen, jako příkazu
  • může být používán interaktivně nebo neinteraktivně
  • umožňuje synchronní i asynchronní provádění příkazů
  • podporuje přesměrování vstupu a výstupu a řetězení příkazů pomocí rour
  • poskytuje sadu vestavěných příkazů
  • poskytuje řídicí konstrukce a nástroje pro escapování řetězců.
  • beztypové proměnné
  • proměnné s lokální a globální oblastí platnosti
  • skripty není nutné před provedením kompilovat
  • nemá příkaz goto
  • pomocí obráceného apostrofu lze provádět vkládání výstupu příkazů do příkazového řádku: tar cvf archiv.tar `ls *.txt | grep -v '.-old'`.
  • možnost předložení víceřádkového textu jako standardního vstupu příkazu pomocí << – tzv. here dokumenty
  • smyčka for ~ do ~ done s použitím výrazu $* jako seznamu argumentů, a smyčka for ~ in ~ do ~ done pro iterování přes seznam
  • konstrukce case ~ in ~ esac pro vícecestné větvení, primárně určená pro analýzu parametrů předávaných skriptům
  • předávání pojmenovaných parametrů spouštěným příkazům pomocí mechanismu proměnných prostředí
  • silné nástroje pro kontrolu vstupu a výstupu, včetně regulárních výrazů

Bourne shell také jako první zavedl možnost použití deskriptoru souboru 2> pro zpřístupnění standardního chybového výstupu, umožňující mnohem větší kontrolu nad zpracováním výstupu díky oddělení chybových hlášení od výstupních dat.

Řídicí konstrukce Bourne shellu byly silně ovlivněny zkušenostmi Stephena Bourneho s jazykem ALGOL 68C,[2] jehož překladač vyvíjel na Universitě v Cambridgi. Kromě stylu, jakým byl program napsán, Bourne použil konstrukce z jazyka ALGOL 68: if ~ then ~ elif ~ then ~ else ~ fi, case ~ in ~ esac a for/while ~ do ~ done“ (s použitím done místo od). Navíc – přestože v7 shell byl napsán v jazyce C – Bourne využil některá makra,[4] aby zdrojový kód připomínal ALGOL 68. Tato makra (spolu s příkazem finger distribuovaným s Unixem verze 4.2BSD) inspirovaly International Obfuscated C Code Contest (IOCCC).[5]

Vlastnosti doplněné po roce 1979

editovat

Bourne shell byl v AT&T postupně zdokonalován. Jeho různé varianty jsou proto nazývány podle verze AT&T Unixu, se kterou byl dodáván (k významným verzím patří Version7, System III, SVR2, SVR3, SVR4). Protože shell nikdy neměl číslování verzí, jediný způsob, jak identifikovat jeho verzi, je testování jeho vlastností.[6]

Od roku 1979 má Bourne shell následující vlastnosti:[7]

  • vestavěný příkaz test – System III shell (1981)
  • komentáře uvozené znakem # – System III shell (1981)
  • dvojtečka v substituci parametru „${parametr:=slovo}“ – System III shell (1981)
  • argument příkazu continue – System III shell (1981)
  • cat <<-EOF pro odsazené here dokumenty – System III shell (1981)
  • definice funkcí a vestavěný příkaz return – SVR2 shell (1984)
  • vestavěné příkazy unset, echo, typ práce – SVR2 shell (1984)
  • odstranění makeri, díky kterým se zdrojový kód podobá jazyku ALGOL68 – SVR2 shell (1984)
  • moderní „$@“ – SVR3 shell (1986)
  • vestavěný příkaz getopts – SVR3 shell (1986)
  • revidované zpracovávání parametrů umožňuje rekurzivní volání funkcí – SVR3 shell (1986)
  • transparentní zpracování 8bitových znaků – SVR3 shell (1986)
  • řízení úloh – SVR4 shell (1989)
  • podpora vícebytových znaků – SVR4 shell (1989)

Varianty

editovat

DMERT shell

editovat

Duplex Multi-Environment Real-Time (DMERT), hybridní operační systém se sdílením času a pro práci v reálném čase vyvinutý v 70. letech 20. století v oddělení Indian Hill Bellových Laboratoří umístěném v Naperville ve státě Illinois, používá verzi „VERSION sys137 DATE 1978 Oct 12 22:39:57“ Bourne Shellu z roku 1978.[zdroj?] DMERT shell běží na počítačích 3B21D, které se stále používají v telekomunikacích.[zdroj?]

Korn shell

editovat
 
Práce s implicitním shellem pdksh v OpenBSD

Korn shell (ksh) napsal David Korn vychází z původního zdrojového kódu Bourne Shellu,[8] byl střední cestou mezi Bourne shellem a C shellem. Jeho syntax vycházela z Bourne shellu, ale řízení úloh připomínalo C-shell. Funkčnost původního Korn Shell (známého jako ksh88 podle rok svého zveřejnění) byla vzata jako základ pro definici shellu v normě POSIX. Jeho novější verze, ksh93, má od roku 2000 otevřený zdrojový text a používá se na některých Linuxových distribucích. Klon ksh88 známý jako pdksh je implicitním shellem v OpenBSD.

Schily Bourne Shell

editovat

Schily-Tools Jörga Schillinga obsahují tři shelly odvozené z Bourne Shellu.[9]

Vztah k jiným shellům

editovat

C-shell

editovat

Bill Joy, autor C shellu, kritizoval Bourne shell jako nepřívětivý pro interaktivní použití,[10] což je úkol, v němž sám Stephen Bourne uznal převahu C-shellu. Bourne však prohlásil, že jeho shell je vhodnější pro skriptování a je dostupný na každém Unixovém systému.[11] Ve známém článku „Csh Programming Considered Harmful“ kritizoval C-shell také Tom Christiansen jako nástroj nevhodný pro skriptování a programování.[12]

Almquistovy shelly

editovat

Kvůli problémům s autorskými právy Bourne Shellu používaného v historických verzích CSRG BSD vyvinul Kenneth Almquist klon Bourne Shellu známý jako Almquist shell. Almquist shell je dostupný pod licencí BSD, a dodnes se používá v některých systémech odvozených z BSD a v systémech s malou pamětí. Almquistův shell byl pod názvem Debian Almquist shell neboli dash přenesen na Linux. Tento shell poskytuje rychlejší spouštění standardních shellových skriptů (a v moderních verzích skriptů pro shell podle standardu POSIX) a při běhu zabírá méně paměti než bash. Při jeho použití často dochází k odhalování konstrukcí, které podporuje pouze bash, tzv. bashismy.

Jiné shelly

editovat

Použití

editovat

Bourne shell býval kdysi standardem na všech značkových unixových systémech, i když v minulosti obsahovaly systémy založené na BSD mnoho skriptů napsaných v csh. Na Linuxu nebo jiných unixových systémech lze skripty pro Bourne shell obvykle provádět bashem nebo dashem, jejichž příkazy mají syntaxi vycházející ze shellu definovaného normou POSIX.

Reference

editovat

V tomto článku byl použit překlad textu z článku Bourne shell na anglické Wikipedii.

  1. https://www.bsdcan.org/2015/schedule/events/612.en.html Stephen Bourne Keynote for BSDCan 2015
  2. a b MCILROY, M. D. A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986. [s.l.]: Bell Labs, 1987. (CSTR). Dostupné v archivu pořízeném z originálu dne 2014-05-04. 
  3. The A-Z of Programming Languages: Bourne shell, or sh [online]. computerworld.com.au [cit. 2009-03-06]. Dostupné v archivu pořízeném dne 2010-01-11. 
  4. Bourne, Steve. mac.h – Macros used by Bourne to structure C like Algol68C [online]. AT&T Corporation, 1979-01-12 [cit. 2006-09-09]. Dostupné online. 
  5. Landon Curt Noll; Simon Cooper; Peter Seebach; Leonid A. Broukhis, 2004. The IOCCC FAQ – Q/A: How did the IOCCC get started? [online]. ioccc.org, 2004 [cit. 2006-09-09]. Dostupné online. 
  6. what shell is this [online]. www.in-ulm.de. Dostupné online. 
  7. traditional Bourne shell family / history and development [online]. www.in-ulm.de. Dostupné online. 
  8. KORN, David G. ksh - An Extensible High Level Language. Proceedings of the USENIX 1994 Very High Level Languages Symposium. USENIX Association, 1994-10-26. Místo čímž vynalezl nový skript jazyk, we vestavěný forma položka systém by modifikování Bourne shell, sečtení vestavěný příkazy jako nezbytný.. Dostupné online [cit. 2015-02-05]. 
  9. Schily Bourne Shell - A modern enhanced and POSIX compliant Bourne Shell source maintained by Jörg Schilling. [online]. Schily-Tools [cit. 2024-05-01]. Dostupné v archivu pořízeném dne 2019-09-27. 
  10. An Introduction to the C shell Archivováno 13. 3. 2022 na Wayback Machine. by Bill Joy.Šablona:Page needed
  11. Bourne, Stephen R. The Unix Shell. archive.org. October 1983, s. 187. Dostupné online [cit. 2015-01-30]. 
  12. Tom Christiansen. Csh Programming Considered Harmful [online]. 1995-09-28 [cit. 2014-02-17]. Dostupné online. 

Související články

editovat

Externí odkazy

editovat