Оболочка Bourne ( sh
) — это интерпретатор командной строки для компьютерных операционных систем .
Оболочка Bourne была оболочкой по умолчанию для Unix версии 7 . Unix-подобные системы продолжают иметь /bin/sh
оболочку Bourne, символическую или жесткую ссылку на совместимую оболочку, даже если большинство пользователей используют другие оболочки.
Разработанный Стивеном Борном в Bell Labs , он стал заменой оболочке Thompson , исполняемый файл которой имел то же имя — sh
. Он был выпущен в 1979 году в виде версии 7 для Unix, распространяемой среди колледжей и университетов. Хотя он используется в качестве интерактивного интерпретатора команд, он также задумывался как язык сценариев и содержит большинство функций, которые обычно используются для создания структурированных программ.
Он приобрел популярность после публикации книги Брайана Кернигана и Роба Пайка « Среда программирования Unix» — первой коммерчески изданной книги, в которой оболочка представлена как язык программирования в учебной форме.
Работа над оболочкой Bourne первоначально началась в 1976 году. [1] Впервые она появилась в версии 7 Unix , [2] оболочке Bourne предшествовала оболочка Mashey .
Некоторыми из основных целей оболочки были: [3]
Особенности оболочки UNIX Bourne версии 7 включают в себя:
`command`
.<<
для встраивания блока входного текста в скрипт.for ~ do ~ done
циклы, в частности использование для $*
перебора аргументов, а также for ~ in ~ do ~ done
циклы для перебора списков.case ~ in ~ esac
механизм выбора, в первую очередь предназначенный для помощи в анализе аргументов .sh
обеспечена поддержка переменных среды с использованием параметров ключевых слов и экспортируемых переменных.Оболочка Bourne также была первой, в которой использовалось соглашение об использовании файлового дескриптора 2>
для сообщений об ошибках , что обеспечивало гораздо больший программный контроль во время написания сценариев, сохраняя сообщения об ошибках отдельно от данных.
На стиль программирования Стивена Борна повлиял его опыт работы с компилятором ALGOL 68C [2] , над которым он работал в Кембриджском университете . В дополнение к стилю, в котором была написана программа, Борн повторно использовал части ALGOL 68 и предложения « (используя вместо ) в обычном синтаксисе оболочки Unix Bourne. Более того, хотя оболочка v7 написана на C — Борн воспользовался некоторыми макросами [4] , чтобы придать исходному коду C разновидность ALGOL 68. Эти макросы (вместе с командой Finger , распространяемой в Unix версии 4.2BSD ) вдохновили на проведение Международного конкурса запутанного кода C (IOCCC) .if ~ then ~ elif ~ then ~ else ~ fi
case ~ in ~ esac
for/while ~ do ~ od
done
od
С годами оболочка Bourne была усовершенствована в AT&T. Таким образом, различные варианты называются как соответствующие версии Unix AT&T, с которыми они были выпущены (некоторыми важными вариантами являются Version7, System III, SVR2, SVR3, SVR4). Поскольку версия оболочки никогда не проверялась, единственным способом ее идентификации было тестирование ее функций. [6]
Особенности версий оболочки Bourne с 1979 года включают: [7]
test
команда – оболочка System III (1981 г.)continue
с аргументом - оболочка System III (1981)cat <<-EOF
для документов с отступом – оболочка System III (1981 г.)return
встроенное — оболочка SVR2 (1984 г.)unset
, echo
, type
– оболочка СВР2 (1984 г.)$@
" - снаряд СВР3 (1986 г.)getopts
— оболочка СВР3 (1986 г.)Duplex Multi-Environment Real-Time ( DMERT ) — это гибридная операционная система с разделением времени и режимом реального времени, разработанная в 1970-х годах в лаборатории Bell Labs Indian Hill в Нейпервилле, штат Иллинойс, с использованием моментального снимка Bourne Shell 1978 года «ВЕРСИЯ sys137 ДАТА 1978 г., 12 октября 1978 г.». 22:39:57». [ нужна цитация ] Оболочка DMERT работает на компьютерах 3B21D, которые до сих пор используются в телекоммуникационной отрасли. [ нужна цитата ]
Оболочка Korn (ksh), написанная Дэвидом Корном на основе исходного кода Bourne Shell [8] , была промежуточным путём между оболочкой Bourne и оболочкой C. Его синтаксис в основном был заимствован из оболочки Bourne, а функции управления заданиями напоминали функции оболочки C. Функциональность оригинальной оболочки Korn Shell (известной как ksh88 с года ее появления) была использована в качестве основы для стандарта оболочки POSIX . Более новая версия, ksh93, имеет открытый исходный код с 2000 года и используется в некоторых дистрибутивах Linux . Клон ksh88, известный как pdksh , является оболочкой по умолчанию в OpenBSD.
Schily-Tools Йорга Шиллинга включает в себя три производных от Bourne Shell. [9]
Билл Джой , автор оболочки C , раскритиковал оболочку Bourne как недружественную для интерактивного использования, [10] задачу, в которой сам Стивен Борн признал превосходство оболочки C. Борн, однако, заявил, что его оболочка превосходит возможности написания сценариев и доступна в любой системе Unix, [11] а Том Кристиансен также раскритиковал оболочку C как непригодную для написания сценариев и программирования. [12]
Из-за проблем с авторскими правами, связанных с оболочкой Bourne Shell, поскольку она использовалась в исторических выпусках CSRG BSD, Кеннет Альмквист разработал клон Bourne Shell, известный некоторым как оболочка Almquist и доступный по лицензии BSD , который используется сегодня в некоторых BSD. потомков и в ситуациях с нехваткой памяти. Оболочка Almquist была перенесена на Linux, а порт переименован в оболочку Debian Almquist , или тире. Эта оболочка обеспечивает более быстрое выполнение стандартных sh
(и POSIX-стандартных sh
в современных потомках) сценариев с меньшим объемом памяти , чем ее аналог Bash. Его использование имеет тенденцию выявлять башизмы — предположения, ориентированные на bash, сделанные в сценариях, предназначенных для работы на sh.
Оболочка Bourne когда-то была стандартной для всех фирменных систем Unix , хотя исторически в системах на базе BSD было много сценариев, написанных на csh . В основе синтаксиса POSIX sh
сценарии оболочки Bourne обычно можно запускать с помощью Bash или Dash в Linux или других Unix-подобных системах.
Вместо того, чтобы изобретать новый скриптовый язык, мы создал систему ввода форм, изменив оболочку Bourne, добавив при необходимости встроенные команды.