Ответы:
Bash ( bash
) - одна из многих доступных (но наиболее часто используемых) оболочек Unix. Bash расшифровывается как « B ourne A gain SH ell» и является заменой / улучшением оригинальной оболочки Bourne ( sh
).
Сценарии оболочки - это сценарии в любой оболочке, тогда как сценарии Bash - сценарии специально для Bash. Однако на практике «сценарий оболочки» и «сценарий bash» часто используются взаимозаменяемо, если речь не идет о Bash.
РЕДАКТИРОВАТЬ: На самом деле, оболочка сценариев по умолчанию в Ubuntu - это dash, а интерактивная оболочка по умолчанию (что вы получаете, если вы открываете терминал) - Bash. Тем не менее, эти два термина по-прежнему в основном взаимозаменяемы.
/bin/sh
символическая ссылка /bin/dash
делает системную оболочку по умолчанию , но не является оболочкой сценариев по умолчанию , т. е. нет письменного правила, которое вам абсолютно необходимо использовать /bin/sh
. Когда вы используете /bin/sh
его, это в основном из соображений переносимости, когда вы ожидаете, что ваш скрипт будет использоваться на нескольких Unix-подобных платформах ОС, большинство из которых имеют /bin/sh
POSIX-совместимую оболочку семейства Bourne.
Введение
Сценарии оболочки и Bash
сценарии - это не одно и то же, поскольку существуют другие оболочки, sh
которые можно использовать для выполнения сценария; сценарий, предназначенный для выполнения, Bash
должен быть помечен как Bash
сценарий. Эти термины часто используются взаимозаменяемо, поскольку Bash
их расширенные функциональные возможности по сравнению с sh
наиболее часто используются для выполнения пользовательских сценариев во многих дистрибутивах. Тем не менее, существуют и другие оболочки , такие как Korn (ksh)
, C shell (csh)
и Z shell (zsh)
, но мы не будем вдаваться в них здесь , как обсуждение sh
и bash
имеет самое непосредственное отношение к Ubuntu. Большая статья IBM здесь идет более подробно об эволюции оболочек в Linux и хорошо описывает архитектуру оболочки и как снаряды отличаются.
Сценарии оболочки
Sh
была оригинальная оболочка Unix, разработанная Стивеном Борном; однако системы на основе Debian и Ubuntu считают dash
их sh
оболочкой ( sh
на самом деле это символическая ссылка dash
). В Debian и Ubuntu из-за скорости sh
он чаще используется для критических системных процедур и для выполнения ключевых сценариев при запуске; для более подробной информации смотрите вики Ubuntu . Bash
расшифровывается как Bourne Again SHell и был разработан позже Брайаном Фоксом и значительно расширил оригинал sh
. Разработка Fox и других Bash
была важной частью проекта GNU. Смотрите это великое обсуждение истории Bash
для получения дополнительной информации.
Важно отметить, что оба sh
и Bash
, как используется в Ubuntu и других дистрибутивах, являются POSIX
совместимыми, что означает, что они подписаны на ряд стандартов о том, как команды выполняются в командной консоли. Это делается для того, чтобы результаты сценариев, используемых в ОС, можно было надежно прогнозировать и чтобы поведение оболочки можно было поддерживать в этих POSIX
параметрах, что особенно важно для разработчиков. Для получения дополнительной информации о стандартах см. Официальную документацию .
Часто сценарии оболочки имеют суффикс .sh
, даже если они предназначены для выполнения в виде bash
сценариев и располагаются #!/bin/bash
в верхней части сценария. На самом деле не имеет значения, называется ли скрипт script.sh или my.script , имеет значение, является ли вызов интерпретатором /bin/sh
или /bin/bash
. Сценарии командной оболочки также могут быть вызваны из командной строки либо с sh
или bash
.
Однако важно отметить, что результаты могут отличаться в зависимости от того, какой интерпретатор вызывается, поскольку не все bash
команды будут работать sh
, тогда как большинство sh
команд будут работать в bash
. В целом, большинство пользователей захотят использовать /bin/bash
для своих сценариев, чтобы они могли воспользоваться расширенным набором функций; системные скрипты могут быть выполнены с помощью, /bin/sh
если это требуется.
Ресурсы для сценариев Bash Shell
Иногда трудно найти полезные ресурсы в Интернете, которые следуют хорошей практике и дают советы, которые позволят вам создавать полезные сценарии. После man bash
, некоторые из наиболее важных ресурсов - это вики Грега , хакеры Bash и недавняя книга Стива Паркера о скриптах в Shell, которая в основном посвящена Bash
и опубликована О'Рейли. Хорошее введение также предпринято Руководством новичка Bash .
Есть несколько оболочек , доступных для Ubuntu, как bash
, zsh
, ksh
, tcsh
и csh
.
Поэтому, когда кто-то говорит « Шелл» , он говорит об одном из них. Однако эти снаряды немного отличаются друг от друга. Таким образом, когда кто-то говорит о bash
сценариях, он использует оболочку, но когда кто-то говорит о сценариях оболочки, он сам по себе не использует bash
. Но, как bash
это обычно используется в сценариях для Ubuntu, он обычно так и есть. Более того, разные оболочки одинаковы во многих аспектах, поэтому обычно это не имеет значения.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash*
Это показывает, что 'sh' является символической ссылкой на 'dash', и что / bin / bash, которая является интерактивной оболочкой по умолчанию в Ubuntu, является исполняемым файлом, который почти в 9 раз больше, чем / bin / sh.
Действительно, «man sh» (1590 строк) против «man bash» (5459 строк) показывает, что bash является большой надмножеством традиционного «sh».
Узнайте больше здесь:
Сценарий оболочки будет определен как ориентированный на переносимость сценарий, который может запускаться системной оболочкой POSIX-совместимых ОС. Синтаксис будет идентичным или похожим на синтаксис языка сценариев оболочки, определенный стандартом POSIX. Это стандарт для большинства POSIX-совместимых ОС, таких как Linux / Unix / * BSD и т. Д. POSIX является наиболее распространенной основой для совместимости между операционными системами.
Различные ОС из вышеупомянутого реализуют различные оболочки для неинтерактивного использования (то есть для выполнения системных сценариев или сценариев, использующих #! /bin/sh
shebang), которые помимо реализации команд и синтаксиса POSIX имеют свои собственные расширения или могут быть исключены из некоторых менее полезных функций по соображениям производительности, но основа POSIX обеспечивает очень высокий уровень переносимости сценариев, разработанных для различных POSIX-совместимых Oss.
Большинство вышеупомянутых ОС имеют отдельную интерактивную оболочку, которая обычно представляет собой полнофункциональную bash . Bash в значительной степени совместим с POSIX, но также имеет большой пул дополнительных команд и поддерживает другой синтаксис. Запуск Bash с параметром командной строки --posix или выполнение set -o posix во время работы Bash приведут к тому, что Bash будет более точно соответствовать стандарту POSIX, изменив поведение, чтобы оно соответствовало заданному POSIX в тех областях, где Bash используется по умолчанию. отличается, см .: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html.
Благодаря единым правилам размещения исполняемых файлов для оболочек (они обычно находятся в каталоге / bin /), мы можем иметь единые правила для создания сценариев оболочки, более конкретно, нам ясно, какой путь поместить в выражение shebang, чтобы указать на правильный исполняемый файл оболочки для запуска скрипта. Файловые системы Unix / Linux / * BSD по своей природе не поддерживают расширения, поэтому расширения файлов служат только в качестве дополнительной подсказки или для целей индексации.
В частности, в Debian / Ubuntu bin/sh
- это символическая ссылка, указывающая на bin/dash
исполняемый файл оболочки dash . Это делает dash системной оболочкой, которая, по оценкам, в 4 раза быстрее и имеет размер ~ 1/10, чем более функциональная bash. источник: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
Debian / Ubuntu интерактивный терминал по умолчанию, как и во многих других Unix-подобных операционных систем, Баш, для которых путь также равномерная: /bin/bash
.
Стандарт POSIX.1-2017: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
Если команда или параметр не определены в POSIX, не ставьте их в
#! /bin/sh
сценарий.
Для преобразования вашего скрипта из bash в форму POSIX вы можете автоматически проверить наличие ошибок в вашем скрипте оболочки или посмотреть, какие изменения в вашем скрипте bash вы должны сделать, чтобы сделать его POSIX-совместимым: