Любая современная операционная система UNIX/Linux поставляется с установленными по умолчанию оболочками sh и Bash. Хотя оба они очень похожи по своей природе, один предлагает больше, чем другой.
В этой статье подробно рассматриваются различия и сходства между оболочками sh и Bash.
В Linux оболочка — это специальная программа для интерпретации команд. Он интерпретирует командный язык и сообщает системе выполнять описанные задачи. Он не является частью ядра, но может выполнять такие задачи, как запуск программ и создание файлов.
Функциональность оболочки лучше понять на примере. Откройте терминал в вашей системе и выполните следующую команду:
Здесь мы отметили следующее:
Оболочки также могут поставляться со своими языками. Сценарии Bash, например, эффективны в автоматизации очень сложных задач и достижении чудес.
Для платформы Linux доступно множество оболочек. Очевидно, что наиболее популярной является оболочка Bash. Вот несколько альтернативных оболочек, на которые стоит обратить внимание:
Оболочка Bourne является оболочкой по умолчанию для версии 7 UNIX. Первоначально разработанный Стивеном Борном в Bell Labs, он был заменой оболочки Томпсона. Оболочка Bourne начала свой путь в 1979 году. Узнайте больше об истории оболочки Bourne в Википедии.
Даже по сей день оболочка Bourne доступна почти во всех системах Linux. Расположение бинарника следующее:
$ which sh
UNIX-подобные системы по-прежнему имеют оболочку Bourne в /usr/bin/sh. Это может быть не оболочка Bourne, а символическая/жесткая ссылка на более совместимую оболочку. Вы можете проверить это, выполнив следующую команду:
$ file -h /bin/sh
Оболочка sh также является названием командного языка программирования. Этот язык описывается стандартом POSIX, которому должны следовать все UNIX и UNIX-подобные системы. Оболочка Bourne, которую мы обсуждали до сих пор, является одной из реализаций sh.
Теперь мы подошли к современной оболочке, которую мы все знаем и любим — оболочке Bash, также известной как «Bourne Again Shell». Название представляет собой игру слов, указывающую на то, что оно заменяет оболочку Bourne.
Разработанный Брайаном Фоксом для проекта GNU, Bash является одновременно оболочкой UNIX и командным языком. Впервые он был выпущен в 1989 году. С тех пор он является оболочкой входа по умолчанию для большинства дистрибутивов Linux. Узнайте больше об истории оболочки Bash в Википедии.
Bash является надмножеством sh, что означает, что он включает в себя функции sh и некоторые другие. Как язык, большинство команд делают то же самое, что и sh. Однако Bash не является POSIX-совместимой оболочкой, а скорее является диалектом языка оболочки POSIX. Bash предназначен для реализации части оболочки и инструментов IEEE POSIX спецификации IEEE POSIX (стандарт IEEE 1003.1).
Проверьте расположение бинарного файла оболочки Bash:
$ which bash
Учитывая исторический контекст, у sh и Bash больше общего, чем различий, поскольку один является лучшей реализацией другого. Несмотря на это, вот некоторые заметные различия в функциях, которые следует знать.
В большинстве современных систем Bash является оболочкой по умолчанию.
Проверьте бинарное расположение обеих оболочек:
$ which sh $ which bash
По сравнению с sh, Bash предлагает гораздо большую гибкость и синтаксис, похожий на современный язык программирования. Вот некоторые дополнительные функции, которые Bash предлагает по сравнению с sh :
По умолчанию Bash не совместим с POSIX, тогда как sh. Однако мы можем запустить Bash в режиме, совместимом с POSIX, с помощью следующей команды:
$ bash --posix
Если вы пишете сценарий Bash, но вам нужен стандарт POSIX, используйте следующий код в начале:
#!/bin/bash set -o posix
Здесь команда set указывает Bash включить режим POSIX.
Bash предлагает более современный язык командной строки по сравнению с sh. В связи с этим вам будет удобнее использовать Bash.
По сравнению с Bash, sh обеспечивает лучшую переносимость.
Поскольку sh совместим с POSIX, любая оболочка, поддерживающая POSIX, сможет запускать сценарии sh. Например, Bash может запускать сценарии sh в режиме POSIX.
Когда вы пишете скрипт на Bash, код гарантированно совместим только с Bash.
С другой стороны, при написании сценариев в sh код можно запускать в любой оболочке. Это потому, что sh определяет исходный язык сценариев оболочки.
В этой статье мы рассмотрели историю, сходства и различия между sh и Bash. Sh является предшественником Bash. Оба они доступны во всех современных системах UNIX/Linux. В то время как Bash предлагает более удобный и простой в использовании опыт, sh предлагает совместимость, переносимость и стандартизированный синтаксис/поведение.
Вы новичок в написании сценариев Bash? Эта статья по написанию сценариев Bash для начинающих охватывает все необходимое для написания сценариев Bash. Мы надеемся, что вы нашли эту статью полезной.