Перейти к содержимому

Shell и bash в чем разница

  • автор:

В чем разница между #!/bin/sh и #!/bin/bash?

Для большинства людей, использующих компьютеры, ввод команд в командную строку соответствующих операционных систем не является чем-то новым. Хотя современные компьютеры обычно взаимодействуют с использованием графического интерфейса пользователя, существует возможность использования исполняемых и типизируемых команд с их командными терминалами.

Это особенно актуально для пользователей Linux и его дистрибутивов. Использование командного терминала для выполнения обычных задач довольно распространено.

Программы, работающие за кулисами командного терминала, называются «оболочками». Оболочки определяются как программы, которые принимают команды, интерпретируют их, а затем предписывают компьютеру выполнить функцию, которую хочет выполнить пользователь. Таким образом, все, что вы кодируете, является частью оболочки.

В Linux пользователи используют язык программирования под названием «sh» для написания кода в оболочке. «Sh», также известный как «Bourne Shell», был разработан для использования с системами UNIX, определенными с использованием стандартов POSIX.

«Bash» также является языком программирования оболочки. Он также известен как «Bourne Again Shell». Сегодня Bash является языком программирования по умолчанию для оболочек в Linux. Bash обладает теми же возможностями, что и Shell, но со временем в нем появились другие функции и лучшие расширения.

Если вы пользователь Linux и хотите узнать разницу между Shell и Bash, вы попали в нужное место, так как мы будем углубляться и описывать различия между двумя языками программирования оболочки.

Бин/ш

До сих пор мы установили, что «sh» называется «Shell», и это язык программирования оболочки для систем на базе UNIX. Мы также сказали, что он соответствует стандартам POSIX. Стандарты POSIX были разработаны IEEE для обеспечения совместимости различных операционных систем. Таким образом, стандарты POSIX гарантируют, что все, что разработано с использованием оболочки, может быть использовано и в других операционных системах.

Оболочку лучше описать как спецификацию, а не как реализацию. Реализация может быть описана как полный язык программирования со своими отдельными компиляторами, такими как C и C++.

Shell не похож на традиционный язык программирования. Таким образом, это нельзя назвать реализацией. Оболочка подробно описывает синтаксис и семантику, используемые для программирования в оболочке Linux.

Для разных операционных систем оболочка может быть связана с разными реализациями. Например, Shell имеет реализацию «dash» в Linux, «Z shell» для Mac и «ash» для OpenWRT.

Бин/баш

Bash можно назвать реализацией Shell, разработанной для проекта GNU. Как упоминалось ранее, он включает в себя все функции оболочки, но имеет улучшенные расширения. Следовательно, его также можно назвать надмножеством оболочки, включая идеи, взятые из других оболочек, таких как оболочка C.

Bash можно использовать как для написания сценариев, так и для реализации. В режиме реализации bash принимает форму командного терминала современного Linux. Для Ubuntu оболочка сценариев — dash, а терминал по умолчанию — bash.

Поскольку это надмножество, все функции Bash не поддерживаются другими оболочками. Bash может выполнять большинство задач, выполняемых другими оболочками, но не наоборот. У других оболочек есть ограничения, и у них не так много функций, предоставляемых Bash.

Вот некоторые из функций, которые являются эксклюзивными для Bash.

  • Замена процесса
  • Переменные области видимости
  • Массивы
  • Bash поддерживает множество специальных переменных, таких как $RANDOM, $SECONDS и т. д.

Преимущества использования оболочки

Сценарии оболочки выполняются с использованием всех типов оболочек. Поскольку Bash является наиболее распространенным и наиболее используемым, есть очевидные преимущества bash по сравнению с оболочкой. Но при использовании Shell по сравнению с Bash есть большое преимущество, которое заключается в переносимости.

Поскольку оболочка соответствует стандартам POSIX, сценарий, написанный в оболочке, можно без проблем использовать в любой системе Linux. Чего нельзя сказать о Баше. По мере того, как в Bash добавлялись лучшие расширения и функции, он постепенно отходил от стандартов POSIX, что влияло на его переносимость.

Преимущества использования Bash

Как упоминалось ранее, Bash имеет более продвинутые функции, чем Shell. Наличие более продвинутых функций просто делает Bash более удобным и эффективным в работе. Вот почему Bash используется чаще, чем Shell.

Большим преимуществом Bash является то, что его можно легко отлаживать по сравнению с Shell. Поиск ошибок и исправление сценариев в Shell значительно сложнее, чем поиск ошибок в сценарии, написанном на Bash.

Мы упоминали, что Bash отклонился от стандартов POSIX. Но если пользователь хочет сделать Bash более поддерживающим POSIX, Bash предлагает функцию переключения POSIX. Его можно включить, введя следующую команду.

$ bash —posix

Заключение

В этой статье обсуждались, что такое оболочки и языки, которые пользователи могут использовать для написания сценариев оболочки. Двумя основными языками, которые появились, были Shell и Bash. Мы подробно описали их обоих, чтобы мы могли правильно объяснить различия. Bash — это более новая и улучшенная версия Shell, поэтому мы проголосовали за лучший язык оболочки. Предлагаемые функции и преимущества Bash над Shell очень велики. Таким образом, выбрать Bash вместо Shell для написания наших сценариев Shell очень просто.

Мы надеемся, что смогли ясно объяснить различия и что теперь вы знаете, с чем имеете дело при использовании Shell или Bash. Мы также надеемся, что выбор между Shell и Bash стал для вас проще.

Bash vs shell

Уважаемые знатоки объясните новичку, чем отличается bash от shell`a просто не могу понять в чем между ними разница.

P.S В гугле не нарыл.

orionit
11.10.15 16:49:19 MSK

Ныне /bin/sh это алиас на что-нибудь в системе, но изначально bash это расширение обычного sh. Если скрипт с башизмами — то использовать нужно /bin/bash, если POSIX-совместим — то /bin/sh.

Bfgeshka ★★★★★
( 11.10.15 16:55:56 MSK )

bash это bourne again shell.

Deleted
( 11.10.15 16:58:06 MSK )
Ответ на: комментарий от Bfgeshka 11.10.15 16:55:56 MSK

Спасибо за ответ все понятно, но не могли бы вы привести пример отличия bash от sh. p.s Крохотный пример.

orionit
( 11.10.15 17:00:07 MSK ) автор топика

чтобы понять разницу тебе надо понять что такое командный интерпретатор

reprimand ★★★★★
( 11.10.15 17:02:59 MSK )
Ответ на: комментарий от orionit 11.10.15 17:00:07 MSK

Bfgeshka ★★★★★
( 11.10.15 17:05:00 MSK )
Ответ на: комментарий от orionit 11.10.15 17:00:07 MSK

В bash есть автодополнение команд — первое, что в глаза бросаеться.

Deleted
( 11.10.15 17:05:51 MSK )

Ребята не стоит вскрывать эту тему. Вы молодые, шутливые, вам все легко. Это не то. Это не Чикатило и даже не архивы спецслужб. Сюда лучше не лезть. Серьезно, любой из вас будет жалеть. Лучше закройте тему и забудьте что тут писалось. Я вполне понимаю что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь пытливых — стоп. Остальные просто не найдут.

zolden ★★★★★
( 11.10.15 18:19:20 MSK )
Ответ на: комментарий от orionit 11.10.15 17:00:07 MSK

Спасибо за ответ все понятно, но не могли бы вы привести пример отличия bash от sh. p.s Крохотный пример.

Вот некоторые крохотные примеры (список не ичерпывающий): https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html . Это то, что bash по умолчанию НЕ делает, но делает, если включить решим повышенной совместимости с POSIX.

proud_anon ★★★★★
( 11.10.15 18:34:10 MSK )
Последнее исправление: proud_anon 11.10.15 18:35:50 MSK (всего исправлений: 1)

Ответ на: комментарий от zolden 11.10.15 18:19:20 MSK

а откуда пошла эта копипаста?

anonymous
( 11.10.15 18:40:23 MSK )
Ответ на: комментарий от zolden 11.10.15 18:19:20 MSK

Предприимчивые молодые люди, стоит интересоваться этой темой. Вы молодые, здоровые, умные. Это то что надо. Это яхты и виллы. Сюда нужно вливаться незамедлительно. Серьезно, любой из вас будет счастлив от такого. Это лучше чем сидеть на жопе и создавать треды про ЕОТ. Я вполне понимаю что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь — самое опасное в жизни — прожить ее, не заметив, как она прошла, будучи серой мышью. Остальные просто не будут такими умными чтобы сделать все чисто.

Kilte ★★★★★
( 11.10.15 18:43:42 MSK )
Ответ на: комментарий от Bfgeshka 11.10.15 17:05:00 MSK

супер классное оформление

Vlad-76 ★★★★
( 11.10.15 18:45:56 MSK )

В общем смысле shell — командная строка, либо доступ к командной строке ( «есть шел на сервере», «дать доступ к shell» )

bash — один из интерпретаторов командной строки. Приложение, которое запускается, когда пользователь получает доступ к shell

В узком смысле, sh ( bourne shell ) — один из первых интерпретаторов командной строки. Стандарт; реализации sh есть во всех unix без исключения ( поправьте меня ). Возможности bash шире, чем у sh ( больше команд, богаче синтаксис ). bash поддерживает все команды sh

router ★★★★★
( 11.10.15 18:48:04 MSK )
Ответ на: комментарий от anonymous 11.10.15 18:40:23 MSK

ИМХО, какая-то вариация обращения жирика к бушу. На лурке было

router ★★★★★
( 11.10.15 18:49:26 MSK )

Всем спасибо за ответы, понял в чем разница между bash и sh.

orionit
( 11.10.15 20:03:54 MSK ) автор топика
Ответ на: комментарий от Deleted 11.10.15 17:05:51 MSK

В bash есть автодополнение команд — первое, что в глаза бросаеться.

akk ★★★★★
( 11.10.15 20:53:12 MSK )
Последнее исправление: akk 11.10.15 20:53:59 MSK (всего исправлений: 1)

Оболочка и терминал: в чем разница?

Оболочка и терминал: в чем разница?

Всякий раз, когда мы даем компьютеру команды для выполнения определенной задачи с помощью текста, мы называем это использованием интерфейса командной строки. При использовании интерфейса командной строки мы используем текстовые команды, чтобы наши программы работали вместо графического пользовательского интерфейса. Использование командной строки — это другой способ взаимодействия с компьютером. В мире Linux, когда мы говорим об интерфейсе командной строки, мы имеем в виду оболочку и, в большинстве случаев, оболочку bash. Но часто мы используем программу для взаимодействия с оболочкой, называемую эмулятором терминала. Оболочка и терминал отличаются друг от друга, но часто используются взаимозаменяемо.

Понимание оболочки

В одной из наших предыдущих статей этой серии мы обсуждали, что такое операционная система и почему Операционные системы Linux называются дистрибутивами. Мы знаем, что ядро ​​является наиболее важным компонентом операционной системы. Ядро распознает все физическое оборудование на компьютере и позволяет каждому компоненту взаимодействовать друг с другом. В корне ядро ​​​​захватывает переданные ему инструкции и обрабатывает их аппаратным обеспечением.

Пользователь не взаимодействует с ядром напрямую. Между пользователем и ядром находится программа, называемая оболочкой, которая отвечает за получение входных данных от пользователя и передачу их ядру. Проще говоря, оболочка — это программа, которая берет команды с клавиатуры и передает их ядру для выполнения. Он действует как интерфейс между пользователем и ядром.

Оболочка Bash

Большинство дистрибутивов Linux поставляются с оболочкой, называемой оболочкой bash. Bash изначально был оболочкой GNU Project и был вдохновлен by и создан для имитации оригинальной программы оболочки Unix, «sh», написанной Стивом Борном. Поскольку он был сильно вдохновлен «sh», написанным Стивом Борном, ребята из проекта GNU решили назвать новую оболочку bash, что является аббревиатурой от Bourne Again Shell.

С ядром Linux можно использовать многие альтернативы оболочке bash, такие как ZSH (ZShell), Fish, KSH (Korn Shell) и т. д. Различные программы-оболочки предлагают разные функции, но основные команды и способы взаимодействия с ними оболочка остается прежней.

Терминал (Эмулятор)

Различные дистрибутивы Linux поставляются с установленной средой рабочего стола, например Ubuntu. Среда рабочего стола Ubuntu — это модифицированная версия GNOME, которая расшифровывается как GNU Network Object Model Environment. GNOME — это графический интерфейс пользователя (GUI) и набор настольных приложений для пользователей операционной системы Linux. При использовании графического пользовательского интерфейса (GUI), такого как GNOME, вам необходимо программное обеспечение, которое может взаимодействовать с оболочкой и передавать команды, которые может выполнять ядро. Эта программа называется эмулятором, потому что она эмулирует для вас среду оболочки в интерфейсе вашего рабочего стола.

Программное обеспечение терминала – прекрасный пример эмулятора. Терминал по умолчанию поставляется со средой рабочего стола Ubuntu и может использоваться для доступа к оболочке. Доступно множество эмуляторов, и терминал — лишь один из них. Важно понимать, что эмулятор — это не оболочка. Это всего лишь часть программного обеспечения, которое позволяет вам эмулировать и взаимодействовать с оболочкой в ​​среде вашего рабочего стола.

Что вы можете сделать дальше ����

Если вам понравилась статья, рассмотрите возможность подписки на Cloudaffle, мой канал на YouTube, где я продолжаю публиковать подробные руководства и все обучающие материалы для программного обеспечения. Разработчики. Вы также можете следить за мной на Hashnode; дескриптор моего профиля — @Cloudaffle. Ставьте лайк, если вам понравилась статья; это поддерживает мою мотивацию на высоком уровне ��.

PowerShell против Bash: в чем разница?

img

Windows и Linux являются очень производительными операционными системами, и у каждой из них есть множество плюсов и минусов, которые мы можем обсудить. Но как часто вы задумываетесь о потенциале сценариев и автоматизации двух операционных систем? Мы решили посмотреть, что можно делать с помощью скриптовых функций, поставляемых с Windows и Linux.

PowerShell vs Bash

Немного истории: PowerShell

PowerShell — это среда автоматизации и задач Microsoft, удобная для управления конфигурацией. PowerShell использует компоненты, называемые командлетами, которые встроены в PowerShell. Дополнительные функции доступны через модули. Они устанавливаются из галереи PowerShell непосредственно из командной строки.

PowerShell отличается от Bash, потому что он предназначен для взаимодействия со структурами .NET изначально в Windows. Это означает, что он может передавать объекты и данные между сценариями, приложениями и сеансами. Каждый объект имеет свой собственный набор свойств, что делает обработку данных в PowerShell еще более детальной. Данные могут быть указаны как числа (целые числа), слова (строки), логические (истина и ложь) и многие другие типы. Это означает, что вы можете по-настоящему определиться с тем, как ваши скрипты обрабатывают ввод и вывод данных.

Немного истории: Bash

Системы Linux и Unix всегда выигрывали от структурирования многопользовательской терминальной среды. Это означает, что вы можете запускать дополнительные сессии в той же системе и запускать сценарии и приложения, не влияя на основные сессии, в которые вошли другие пользователи. Это сильно отличалось от ранних систем Windows и DOS, которые были однопользовательскими средами с одной сессией, до появления Windows NT в середине 90-х годов.

Первоначальная оболочка, поставляемая с Unix, была известна как оболочка Bourne, названная в честь ее создателя Стивена Борна. Bash (Bourne again Shell) является преемником оболочки Bourne с открытым исходным кодом. Bash получил широкое распространение, когда Linux был создан в начале 90-х годов, поэтому он используется до сих пор.

Существует множество функций, которые делают Bash очень популярным, главными из которых являются стабильность системы и то, что это открытый исходный код. Из-за этого он встречается практически в каждом дистрибутиве Linux. Все эти факторы делают его одной из наиболее часто используемых сред сценариев для ИТ-специалистов.

Когда использовать PowerShell

Администрирование Windows стало намного проще с тех пор, как разработка PowerShell стала частью среды Microsoft. Вместо того, чтобы бороться с неудобными пакетными файлами и планировщиком Windows, системные администраторы получают доступ к новому набору инструментов с впечатляющими приложениями и функциями.

PowerShell может уточнять детали для создания эффективных скриптов, а также некоторых коммерчески доступных приложений. PowerShell может извлекать данные прямо из подсистемы WMI, предоставляя вам в режиме реального времени глубокую информацию обо всем, от идентификаторов процессов и счетчиков обработчиков.

PowerShell включен в платформу .NET, поэтому вы можете создавать великолепно выглядящие меню и формы winform. Вы можете использовать PowerShell, чтобы делать что угодно — от запросов к базам данных SQL до захвата ваших любимых RSS-каналов прямо в сеанс PowerShell для дальнейших манипуляций. Это настоящий швейцарский нож для системного администрирования в среде Windows.

Когда использовать Bash

Если вы используете системы Linux, значит, вы знаете о необходимости автоматизации задач. Ранние ленточные накопители использовались для резервного копирования с архивированием tar. Эти операции могут быть написаны в Bash, а затем запущены через расписание cron. Сегодня мы воспринимаем подобные вещи как должное, но многие задачи приходилось выполнять вручную до создания таких сред, как Bash. Все, что связано с манипуляциями с файлами, такими как архивирование, копирование, перемещение, переименование и удаление файлов, подходит Bash.

Также возможны более сложные манипуляции с файлами. Вы можете найти файлы, созданные в определенные даты, и для каких файлов были изменены права доступа CHMOD и владельца. Bash также отлично подходит для создания интерактивных меню для запуска скриптов и выполнения системных функций. Они выполняются в неграфической среде, но работают очень хорошо. Это отлично подходит для обмена вашими библиотеками скриптов с другими.

Отличия

PowerShell и Bash в чем-то похожи, но также очень разные. Вот четыре основных отличия.

PowerShell по-разному обрабатывает данные

PowerShell отличается от Bash способом обработки данных. PowerShell — это язык сценариев, но он может передавать данные в разных форматах таким образом, чтобы он выглядел как язык программирования. PowerShell также имеет дело с областями действия в своих скриптах.

Использование переменных с $session , $script и $cache дает вашим сценариям дополнительную гибкость, позволяя передавать переменные другим командам в том же сценарии или сеансе PowerShell.

Bash — это CLI

Bash — это CLI (Command Language Interpreter), что означает интерпретатор командного языка. Как и PowerShell, Bash может передавать данные между командами по каналам. Однако эти данные отправляются в виде строк. Это ограничивает некоторые вещи, которые вы можете делать с выводом ваших скриптов, например математические функции.

PowerShell — это и CLI, и язык

Интегрированная среда сценариев PowerShell по умолчанию (ISE — Integrated Scripting Environment), поставляемая с Windows, показывает, как можно быстро и легко создавать сценарии, не жертвуя прямым доступом к командной строке. По умолчанию верхний раздел позволяет набирать строки кода сценария и быстро его тестировать.

Окно ниже представляет собой командную строку PowerShell, которая дает вам быстрый доступ для выполнения отдельных команд. Это дает вам лучшее из обоих миров между языком сценариев и оболочкой командной строки. ISE — отличный инструмент для быстрого создания прототипов решений.

ISE

PowerShell и Bash — мощные инструменты

Среда, в которой вы работаете, определит, какой инструмент вы выберете. Системные администраторы Linux, пишущие сценарии в Bash, считают, что освоить сценарии PowerShell относительно легко. Навыки написания сценариев PowerShell также в определенной степени переносятся на сценарии Bash.

Основными различиями между этими двумя языками сценариев являются синтаксис и обработка данных. Если вы понимаете такие концепции, как переменные и функции, тогда изучение любого из этих языков становится проще.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *