Bourne shell
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.
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 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
editovatPůvod
editovatPrá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
editovatK 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
editovatBourne 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
editovatDMERT shell
editovatDuplex 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
editovatKorn 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
editovatSchily-Tools Jörga Schillinga obsahují tři shelly odvozené z Bourne Shellu.[9]
Vztah k jiným shellům
editovatC-shell
editovatBill 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
editovatKvů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- 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í
editovatBourne 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
editovatReference
editovatV 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
editovatExterní odkazy
editovat- 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.