Відповіді:
Bash ( bash
) - одна з багатьох доступних (але найбільш часто використовуваних) оболонок Unix. Bash означає " B ourne A посилення SH ell" і є заміною / удосконаленням оригінальної оболонки Bourne ( sh
).
Сценарії оболонок - це сценарії в будь-якій оболонці, тоді як Bash - це спеціально для Bash. На практиці, однак, "скрипт оболонки" та "скрипт bash" часто використовуються взаємозамінно, якщо тільки оболонка, про яку йдеться, не є Bash.
EDIT: Насправді оболонка сценарію за замовчуванням в Ubuntu - тире, тоді як інтерактивна оболонка за замовчуванням (що ви отримаєте, якщо ви підтягнете термінал) - 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
. Розвиток Фокса та інших людей Bash
було важливою частиною проекту GNU. Дивіться цю чудову дискусію історії Bash
для отримання додаткової інформації.
Важливо зауважити, що обидва sh
і Bash
, як використовується в Ubuntu та інших дистрибутивах, POSIX
сумісні, що означає, що вони підписані на ряд стандартів про те, як виконуються команди в Shell. Це робиться для того, щоб результати сценаріїв, використовуваних в ОС, можна було надійно прогнозувати, і що поведінка оболонки може зберігатися в межах цих 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
, деякі з найважливіших ресурсів - вікі Грега , хакери Баша та недавня книга Стіва Паркера про сценарії Shell, яка зосереджується в основному на Bash
і опублікована O'Reilly. Гарне вступ також проводиться в Посібнику для початківців Баша .
Є кілька оболонок , доступних для 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 рядків) vs "man bash" (5459 рядків) виявляє, що bash - це велика сукупність традиційного "sh".
Детальніше читайте тут:
Скрипт оболонки визначатиметься як орієнтований на портативність сценарій, який може управляти системною оболонкою ОС, сумісних з POSIX. Синтаксис буде ідентичним або подібним із синтаксисом мови сценаріїв оболонок, визначеним стандартом POSIX. Це стандарт для більшості сумісних ОС POSIX, таких як Linux / Unix / * BSD тощо. POSIX є найпоширенішим підґрунтям для сумісності в операційних системах.
Різні ОС із вищезазначеного реалізують різні оболонки для неінтерактивного використання (тобто для виконання системних сценаріїв або сценаріїв, що використовують #! /bin/sh
shebang), які, крім реалізації команд та синтаксису POSIX, мають власні розширення або, можливо, можуть бути позбавлені деяких менш корисних функцій з міркувань продуктивності, але обробка POSIX дозволяє забезпечити дуже високий рівень переносимості сценаріїв, розроблених для різних сумісних з POSIX сумісних даних.
Більшість згаданих ОС мають окрему інтерактивну оболонку, яка зазвичай є повнофункціональним башем . 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
виконуваний оболонку тире . Це робить тире системної оболонки, яка, за оцінками, в 4 рази швидша і на розмір ~ 1/10, ніж більш функціональна баш. джерело: 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 сумісним: