Что значит bin bash

Что такое bash в Linux? Гайд по созданию bash-скриптов

Обновл. 29 Июл 2021 |

bash (сокр. от «Bourne-Again shell») — это командная оболочка (или «интерпретатор командной строки»), используемая по умолчанию в операционных системах на базе Unix и Linux, созданная в 1989 году Брайаном Фоксом с целью усовершенствования командной оболочки sh.

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

Что такое терминал?

Терминал — это программа, которая используется для взаимодействия с шеллом. Это просто интерфейс к нему и другим программам командной строки, которые работают внутри нее. Вот как выглядит типичный терминал (Konsole) в Debian 11 (окружение рабочего стола — KDE Plasma):

Типичный терминал в Linux

Всякий раз, когда мы открываем окно терминала, мы видим приглашение шелла — имя_пользователя@имя_машины:

$ . Символ $ означает, что мы работаем под учетной записью обычного пользователя, а символ

(тильда) означает, что в данный момент мы находимся в домашнем каталоге /home/ .

Команды в bash

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

Команда echo — возвращает всё, что вы вводите в командной строке:

Пример использования команды echo

Команда date — отображает текущее время и дату:

Пример использования команды date

Команда pwd (сокр. от «print working directory») — указывает на текущий рабочий каталог, в котором команды шелла будут искать файлы.

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

Пример использования команды pwd

Команда ls (сокр. от «lis) — отображает содержимое каталога. Обычно, команда ls начинает с просмотра нашего домашнего каталога. Это означает, что если мы просто напечатаем ls , то данная команда выведет содержимое текущего каталога, которым в нашем примере является домашний каталог /home/diego:

Пример использования команды ls

Команда cd (сокр. от «change directory») — изменяет текущую директорию на заданную пользователем. Рассмотрим некоторые примеры использования данной команды:

cd — меняет текущую директорию на заданную. Давайте попробуем с помощью команды ls перейти к корневому каталогу / и ознакомимся с его содержимым. Обратите внимание, что мы также можем использовать точку с запятой ; для записи двух команд в одной строке.

Пример объединения двух команд в одной строке

cd .. — вернуться в родительский каталог.

cd — вернуться в домашний каталог.

Команда mkdir (сокр. от «make directory») создает новый каталог.

Команда mv (сокр. от «mov) — перемещает один или несколько файлов/каталогов из одного места в другое (заданное пользователем). Для этого нужно указать, что мы хотим переместить (т.е. источник), и куда мы хотим переместить (т.е. пункт назначения).

В качестве примера я создам новый каталог Ravesli в своей домашней директории и перемещу в него все .txt-файлы (ну как «все», у меня там только один файл — Адреса.txt) из /home/diego/Документы/ с помощью двух вышеприведенных команд:

Перемещение файлов с помощью команды mv

Команда touch — создает новые пустые файлы (а также изменяет временные метки в существующих файлах и каталогах). Вот как мы можем создать пустой файл под названием foo.txt в папке Ravesli из домашнего каталога:

Создание файла с помощью команды touch

Команда rm (сокр. от «remove») — удаляет файлы/каталоги. По умолчанию, команда rm НЕ удаляет каталоги, но если используется как rm -r * внутри заданного каталога, то каждый подкаталог и файл внутри заданного каталога — удаляются.

Давайте удалим ранее созданный файл foo.txt:

Удаление файла с помощью команды rm

Команда rmdir (сокр. от «remove directory») — удаляет каталоги.

Давайте удалим созданный ранее каталог /home/diego/Ravesli:

Удаление каталогов с помощью команды rmdir

Команда cat (сокр. от «concatenate») — считывает файл и выводит его содержимое. Она может работать с несколькими файлами, объединяя их вывод в единый поток (отсюда и происходит её название). У меня в домашнем каталоге есть папка untitled с файлами С++/Qt-проекта, и ниже я использую команду cat для просмотра содержимого файла main.cpp из untitled:

Пример использования команды cat

Чтобы просмотреть несколько файлов, укажите друг за другом (через пробел) имена требуемых файлов после команды cat , например:

Просмотр нескольких файлов с помощью команды cat

Команда man (сокр. от «manual») — отображает справочные страницы, которые являются руководством пользователя, встроенным по умолчанию во многие дистрибутивы Linux и большинство систем Unix. Например, команда man bash отобразит руководство пользователя, а команда man ls отобразит справку по команде ls .

Отображение справочной информации с помощью команды man

Редактор nano

nano — это маленький, простой, консольный текстовый редактор *nix-подобных операционных систем, впервые увидевший свет в далеком 1999 году. Для запуска редактора достаточно ввести в терминале всего одну команду — nano . Если же нужно отредактировать какой-то конкретный файл, то применяется команда nanо / . Отличительной чертой данного редактора является то, что он управляется сочетаниями клавиш. Например, для сохранения текущего документа применяется сочетание Ctrl+O, для вызова меню поиска — Ctrl+W, для выхода из редактора — Ctrl+X, а для получения всего списка доступных сочетаний клавиш — Ctrl+G.

Гайд по созданию bash-скриптов

Наш шелл, это не только промежуточное звено между пользователем и системой, но еще и мощный язык программирования. Программы, написанные на языке шелла, называются shell-скриптами (или shell-сценариями) и имеют соответствующее расширение файлов — .sh. Сам язык содержит полный набор утилит и команд, доступных в *nix-системах, а также циклы, условные операторы, объявление переменных и пр. Такие скрипты будут очень полезными там, где не требуется использование полноценных языков программирования, например, в задачах администрирования операционной системы.

Создание bash-скрипта

Чтобы создать новый файл bash-скрипта, откройте в любом редакторе текстовый файл и сохраните его с расширением .sh. Все дальнейшие эксперименты я будут проводить в Debian Linux, с применением текстового редактора nano.

Давайте создадим новый файл ravesli.sh:

$ touch ravesli.sh
diego@debian:

$ ls -l
-rw-r—r— 1 diego diego 0 мар 9 14:59 ravesli.sh
diego@debian:

Чтобы выполнить файл bash-скрипта, нужно изменить права доступа к файлу и сделать его исполняемым. Разрешение, как вы наверняка помните из предыдущих уроков, изменяется командой chmod +x :

$ chmod +x ravesli.sh
diego@debian:

$ ls -l
итого 40
drwxr-xr-x 2 diego diego 4096 фев 27 00:23 build-untitled-Desktop-Debug
-rw x r- x r- x 1 diego diego 0 мар 9 14:59 ravesli.sh

Выполнение bash-скрипта

Файл bash-скрипта может быть запущен двумя способами:

Способ №1: bash . Чтобы выполнить скрипт, просто напишите в терминале команду bash , а затем (через пробел) имя файла и нажмите Enter.

Способ №2: ./ . Чтобы выполнить скрипт введите команду ./ и нажмите Enter.

Источник

Зачем нужно ставить #! / Bin / bash в начале файла сценария?

Раньше я создавал скрипты Bash, и все они отлично работали без #!/bin/bash в начале.

Какой смысл вставлять? Было бы все иначе?

Кроме того, как вы произносите # ? Я знаю, что ! произносится как «бах».

10 ответов

Это соглашение, поэтому оболочка * nix знает, какой интерпретатор запускать.

Например, в старых версиях ATT по умолчанию использовалась sh (оболочка Bourne), а в более старых версиях BSD по умолчанию использовалась csh (оболочка C).

Даже сегодня (где в большинстве систем используется bash, «Bourne Again Shell» ) скрипты могут быть на bash, python, perl, ruby, PHP и т. Д. И т. Д. Например, вы можете увидеть #!/bin/perl или #!/bin/perl5 .

PS: Восклицательный знак ( ! ) ласково называют «бах» . Символ комментария оболочки ( # ) иногда называют «хешем» .

PPS: Помните: в * nix связывание суффикса с типом файла является просто соглашением , а не «правилом» . Исполняемый файл может быть двоичной программой, любым из миллиона типов скриптов и другими вещами. Следовательно, потребность в #!/bin/bash .

Это называется shebang. На языке unix # называется резким (как в музыке) или хешем (как хэштеги в твиттере), и! называется челка. (На самом деле вы можете ссылаться на свою предыдущую команду оболочки с помощью . которая называется bang-bang). Так что, если сложить вместе, получится haSH-BANG, или shebang.

Часть после #! сообщает Unix, какую программу использовать для его запуска. Если он не указан, он попытается использовать bash (или sh, или zsh, или любую другую переменную $ SHELL), но если она есть, она будет использовать эту программу. Кроме того, # является комментарием на большинстве языков, поэтому строка игнорируется при последующем выполнении.

Точнее, shebang #! , когда он первый два байта исполняемого файла ( x режим ) интерпретируется системным вызовом execve (2) (который выполняет программы ). Но в спецификации POSIX для execve не упоминается shebang .

За ним должен следовать путь к файлу исполняемого файла интерпретатора (который, кстати, может быть даже относительным, но чаще всего абсолютным).

Хороший трюк (или, возможно, не очень хороший), чтобы найти интерпретатор (например, python ) в пользователь $PATH должен использовать программу env (всегда на /usr/bin/env во всех Linux), например,

Любой исполняемый файл ELF может быть интерпретатором. Вы даже можете использовать #!/bin/cat или #!/bin/true , если хотите! (но это часто было бы бесполезно)

Это может быть полезно для тех, кто использует другую систему, в которой эта библиотека недоступна. Если это не объявлено, и в вашем скрипте есть некоторые функции, которые не поддерживаются этой системой, вам следует объявить # / bin / bash. Я сталкивался с этой проблемой раньше на работе, и теперь я просто включаю ее в качестве практики.

Также вы увидите некоторые другие параметры после #! / Bin / bash, например
#!/bin/bash -v -x
прочтите это, чтобы получить больше информации.
https://unix.stackexchange.com/ questions / 124272 / what-do-the-arguments-v-and-x-mean-to-bash.

Стандарты Bash для «оболочки Bourne-Again» — это лишь один из многих типов оболочек, доступных в Linux.

Оболочка — это интерпретатор командной строки, который принимает и запускает команды.

Bash часто является оболочкой по умолчанию в большинстве дистрибутивов Linux. Вот почему bash является синонимом оболочки.

Сценарии оболочки часто имеют почти одинаковый синтаксис, но иногда они различаются. Например, индекс массива начинается с 1 в Zsh вместо 0 в bash. Сценарий, написанный для оболочки Zsh, не будет работать так же в bash, если в нем есть массивы.

Чтобы избежать неприятных сюрпризов, вы должны сообщить интерпретатору, что ваш сценарий оболочки написан для оболочки bash. Как ты это делаешь?

Просто начните свой сценарий bash в #! / bin / bash

Это называется шебанг . Он состоит из знака числа и восклицательного знака (#!), За которым следует полный путь к интерпретатору, например / bin / bash. Все сценарии в UNIX и Linux выполняются с использованием интерпретатора, указанного в первой строке.

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

Bash эволюционировал на протяжении многих лет, взяв код из ksh и sh .

Добавление #!/bin/bash в качестве первой строки вашего сценария указывает операционной системе вызвать указанный shell для выполнения команд, которые следуют в сценарии.

#! часто называют «хэш-бах», «ша-бах» или «ша-бах».

shebang — это указание загрузчику использовать программу, указанную после #! как интерпретатор для рассматриваемого файла, когда вы пытаетесь его выполнить. Итак, если вы попытаетесь запустить файл с именем foo.sh , который имеет #!/bin/bash вверху, фактическая выполняемая команда будет /bin/bash foo.sh . Это гибкий способ использования разных интерпретаторов для разных программ. Это что-то реализованное на системном уровне, а API уровня пользователя — это соглашение shebang.

Также стоит знать, что shebang — это магическое число — удобочитаемое число, которое идентифицирует файл как скрипт для данного интерпретатора.

Ваша точка зрения на то, что он «работает» даже без shebang, заключается только в том, что рассматриваемая программа является сценарием оболочки, написанным для той же оболочки, что и та, которую вы используете. Например, вы могли бы очень хорошо написать файл javascript, а затем поместить #! /usr/bin/js (или что-то подобное), чтобы получить «сценарий оболочки» javascript.

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

Источник

Читайте также:  Заказное письмо разряд судебное что это значит
Оцените статью