Bourne shell
Použití Bourne shellu na Version 7 Unix | |
Vývojář | Bellovy laboratoře |
---|---|
První vydání | 1979 |
Operační systém | Unix |
Typ softwaru | Unixový shell |
Některá data mohou pocházet z datové položky. |
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 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 | editovat zdroj]Původ
[editovat | editovat zdroj]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]
- umožnit použití shellových skriptů jako filtrů
- umožnit jeho použití jako programovacího jazyka včetně řídicích struktur a proměnných
- kontrola nad všemi vstupními a výstupními popisovači souborů
- kontrola nad zpracováváním signálů v rámci skriptů
- žádná omezení na délky řetězců při interpretaci shellových skriptů
- racionalizovat a zobecnit mechanismus escapování řetězců
- mechanismus proměnných prostředí, který umožní poskytovat běhový kontext ze shellu spouštěným procesům a shellovým skriptům bez nutnosti použití explicitních parametrů příkazu
Vlastnosti původní verze
[editovat | editovat zdroj]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čkafor ~ 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 | editovat zdroj]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 | editovat zdroj]DMERT shell
[editovat | editovat zdroj]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 | editovat zdroj]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 | editovat zdroj]Schily-Tools Jörga Schillinga obsahují tři shelly odvozené z Bourne Shellu.[9]
Vztah k jiným shellům
[editovat | editovat zdroj]C-shell
[editovat | editovat zdroj]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 | editovat zdroj]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 | editovat zdroj]- Bash ( Bourne-Again shell) vyvinutý v roce 1989 pro projekt GNU zahrnuje vlastnosti z Bourne shellu, csh, a ksh. Je navržen, aby byl kompatibilní s normou POSIX.
- Shell rc vytvořil v Bellových laboratořích Tom Duff jako náhradu za sh pro Unix Verze 10. Je implicitním shellem pro Plan 9 from Bell Labs. Byl portován na UNIX jako část Plan 9 from User Space.
- Z shell vytvořil Paul Falstad v roce 1990; jde o rozšíření Bourne shellu s velkým počtem vylepšení, včetně některých vlastností z bashe, ksh a tcsh.
Použití
[editovat | editovat zdroj]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.
Odkazy
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku Bourne shell na anglické Wikipedii.
- ↑ https://www.bsdcan.org/2015/schedule/events/612.en.html Stephen Bourne Keynote for BSDCan 2015
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ what shell is this [online]. www.in-ulm.de. Dostupné online.
- ↑ traditional Bourne shell family / history and development [online]. www.in-ulm.de. Dostupné online.
- ↑ 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].
- ↑ 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.
- ↑ An Introduction to the C shell Archivováno 13. 3. 2022 na Wayback Machine. by Bill Joy.Šablona:Page needed
- ↑ Bourne, Stephen R. The Unix Shell. archive.org. October 1983, s. 187. Dostupné online [cit. 2015-01-30].
- ↑ Tom Christiansen. Csh Programming Considered Harmful [online]. 1995-09-28 [cit. 2014-02-17]. Dostupné online.
Související články
[editovat | editovat zdroj]Externí odkazy
[editovat | editovat zdroj]- Kniha Skriptování v Bournově shellu ve Wikiknihách
- The individual members of "The Traditional Bourne Shell Family"
- "Characteristical common properties of the traditional Bourne shells"
- Historical C source code for the Bourne shell using mac.h macros from 1979
- Original Bourne Shell documentation from 1978
- A port of the "heirloom" SVR4 Bourne shell from OpenSolaris to some other Unix-like systems
- Migrating from the System V (SVR4) Shell to the POSIX Shell
- Bourne Shell Tutorial (syntax)
- Faqs shell differences
- Howard Dahdah, The A–Z of Programming Languages: Bourne shell, or sh – An in-depth interview with Steve Bourne, creator of the Bourne shell, or sh, Computerworld, 5 Březen 2009.