Bourne shell

programovací jazyk From Wikipedia, the free encyclopedia

Bourne shell
Remove ads

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.

Stručná fakta Vývojář, První vydání ...
Remove ads

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.

Remove ads

Historie

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

Původ

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

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

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)
Remove ads

Varianty

DMERT shell

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

Thumb
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

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

Remove ads

Vztah k jiným shellům

C-shell

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

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

  • 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í

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

Loading content...
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads