Bash linux что это

Содержание

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

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

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

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

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

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

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

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

Команды в bash

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Редактор nano

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

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

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

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

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

$ touch ravesli.sh
diego@debian:

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

$ chmod +x ravesli.sh
diego@debian:

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

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

Источник

Основы BASH. Часть 1

Введение

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

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

Что необходимо знать с самого начала

1. Любой bash-скрипт должен начинаться со строки:

#!/bin/bash
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.
2. Коментарии начинаются с символа # (кроме первой строки).
3. В bash переменные не имеют типа(о них речь пойдет ниже)

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

Результат выполнения скрипта:

После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:

Условия

Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):
#!/bin/bash
source=$1 #в переменную source засовываем первый параметр скрипта
dest=$2 #в переменную dest засовываем второй параметр скрипта

Условия. Множественный выбор

esac #окончание оператора case.

Результат работы:
ite@ite-desktop:

UPD: Исправил некоторые ошибки
UPD: Обновил часть про условия if-then-else

Источник

Bash (Русский)

Bash (Bourne-again Shell) — командная оболочка/язык программирования проекта GNU. Название представляет собой отсылку к предшественнику, существовавшей некогда командной оболочке Борна (Bourne shell). Bash работает в большинстве UNIX-подобных операционных систем, в том числе и в GNU/Linux.

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

Contents

Запуск

Поведение Bash зависит от способа, каким он был запущен.

Файлы настроек

В зависимости от способа запуска Bash считывает и исполняет определённый набор файлов. Подробнее см. раздел Bash Startup Files справочного руководства GNU Bash.

/.profile (в указанном порядке). Файл-образец /etc/skel/.bash_profile содержит также указание на исполнение файла

Оболочка и переменные окружения

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

Для создания переменной окружения необходимо экспортировать переменную оболочки:

Переменные окружения принято перечислять в файлах

Командная строка

Командная строка Bash работает под управлением библиотеки Readline. Readline позволяет использовать комбинации клавиш в стиле emacs и vi для взаимодействия с командной строкой, например, для перемещения назад и вперёд целыми словами, удаления слов и т.д. Кроме того, Readline отвечает за хранение истории выполненных команд, а также позволяет создавать макросы.

Автодополнение

Автодополнение (tab completion) — завершение вводимых команд по нажатию клавиши Tab (работает по умолчанию).

Одиночное нажатие

Вывести список возможных завершений для частично введённой команды можно несколькими повторными нажатиями клавиши Tab — иногда двумя или тремя. В статье Readline#Быстрое завершение описано, как уменьшить количество нажатий до одного.

Дополнительные программы и опции

Настройки для команд

Другие опции автодополнения можно найти в руководстве Bash.

История команд

Автодополнение истории

Клавиши стрелок «вверх» и «вниз» можно назначить для поиска команд в истории (см. Readline#История команд и Синтаксис init-файлов Readline):

Или же, чтобы это работало во всех программах Readline:

Сокращение истории

Переменная HISTCONTROL позволяет предотвратить логирование некоторых команд. Например, чтобы одинаковые команды не попадали в историю, присвойте переменной следующее значение:

Отключение истории

Чтобы временно отключить историю, выполните:

Включить историю обратно можно командой

Чтобы отключить всю историю Bash:

После необходимо удалить старый файл истории (имейте в виду — команды ниже удалят его безвозвратно):

run-help из Zsh

Предполагается, что вы используете (стандартный) режим редактирования Emacs.

Псевдонимы

alias (англ. псевдоним) — команда для замены одной строки на другую. Часто используется для сокращения системных команд до аббревиатур или для добавления стандартных аргументов к часто используемым командам.

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

Функции Bash подробно описаны в Bash/Функции.

Советы и рекомендации

Настройка приглашения

Подстветка синтаксиса и подсказки

blesh-git AUR — редактор командной строки, который написан на чистом Bash и предназначен заменить Readline. Предлагает множество дополнительных возможностей вроде подстветки синтаксиса, подсказок, завершения команд с выпадающим меню, аббревиатур, режима редактирования Vim, хук-функций и т.д.

После установки необходимо считать и выполнить его в интерактивном сеансе. Настройки подробно объясняются в файле

Command not found

В pkgfile есть хук «command not found», который при вводе неизвестной команды автоматически ищет подходящий исполняемый файл в пакетах в официальных репозиториях.

Чтобы хук заработал, его необходимо считать и исполнить:

После этого при попытке запустить недоступную команду будет выведена следующая информация:

Отключение комбинации Ctrl+z

Нажатие Ctrl+z в терминале ставит приложение на паузу или закрывает его. Отключить эту комбинацию клавиш можно следующим образом:

Очистка экрана после выхода

Очистка экрана виртуального терминала после выхода:

Смена каталога при вводе пути

то произойдёт следующее:

Autojump

Запрет на перезапись файлов

Отключение перезаписи файлов с помощью перенаправления вывода на время текущего сеанса:

Сделать изменения постоянными:

Принудительно перезаписать файл при установленном noclobber :

Решение проблем

Перенос строк при изменении размера окна

Оболочка завершается даже с опцией ignoreeof

После задания опции ignoreeof вы можете обнаружить, что многократное нажатие Ctrl-d всё равно приводит к завершению процесса оболочки. Дело в том, что по умолчанию эта опция позволяет игнорировать только 10 нажатий данной комбинации клавиш (если быть точным — 10 ситуаций EOF) перед выходом из оболочки.

Задать большее значение можно переменной IGNOREEOF. Например:

Анализ сценария и поиск ошибок

Программа shellcheck проверяет сценарии Bash (и других командных оболочек) на предмет ошибок и предлагает возможные улучшения кода.

Источник

Как работает bash: разбираемся в деталях

Перевели статью, которая поможет лучше понять, как работает bash, а значит, сэкономить время и уменьшить количество ошибок. Далее текст от лица автора.

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

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

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

Язык программирования, на котором писала ваша бабушка

Bash создан Брайаном Фоксом (легендарный и недооцененный парень) и выпущен в 1989 году как open source замена для Bourne Shell, вышедшей в 1976 году. Его название является аббревиатурой от Bourne Again SHell.

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

Написание скриптов командной оболочки — это очень весело, если вы овладеете основами! Ничто не заставит вас почувствовать себя более опытным хакером, чем написание дикого однострочника, который запускается с первой попытки.

Кстати, поскольку эта статья относится к миру Linux и операционных систем, у меня есть примечание для тех, кто занимается этими вопросами дольше меня: нормально (даже рекомендуется!) исправлять меня, если я ошибаюсь, просто будьте вежливы.

Версии

Язык сценариев оболочки, c которым большинство из нас работает в настоящее время, — это версия bash для Mac и Linux, используемая для эмуляции терминала в /bin/bash.

Debian (и, соответственно, Ubuntu и Linux Mint) теперь использует другой, но в основном совместимый язык сценариев оболочки (dash) для системных задач. Прим. переводчика: так утверждает автор статьи, но я везде вижу использование bash.

Вы также можете установить zsh в качестве основной оболочки, который в целом похож на bash, но имеет и отличия.

Из-за всех этих небольших вариаций хорошей идеей будет поместить #!/bin/bash (или какой-либо другой язык сценариев оболочки, который вы хотите использовать) вверху файлов, чтобы указать, что сценарий оболочки должен использовать конкретно этот язык, а не какой-либо еще из установленных на сервере.

Указание языка оболочки в заголовке файла сделает его поведение более предсказуемым. Например, ответы на Stack Overflow обычно предполагают, что вы используете именно bash.

Основы

Давайте сначала рассмотрим несколько фундаментальных вещей.

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

Синтаксис

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

Например, можно получить ошибку “[grep isn’t a valid command”, если забыть поставить пробел внутри квадратных скобок [] или “Unexpected end of file”, когда вы забыли точку с запятой после <>.

При определении переменной пробел между переменной и знаком = и между знаком = и значением приводит к разным результатам. Существует важное различие между одинарными кавычками и двойными.

Синтаксические ошибки всегда выглядят как логические ошибки, что затрудняет выявление опечаток.

Структура

Сценарии оболочки понимают операторы управления выполнением: операторы if, циклы while, циклы for, операторы case и так далее.

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

Вот пример однострочника, который использует управление выполнением без каких-либо операторов if:

Примечание: \ обозначают перенос строки, tac похож на cat, но выводит файл в обратном порядке.

Это выглядит уродливо, но эффективно, и иллюстрирует сильные и слабые стороны сценариев оболочки.

Сценарий bash может быть очень кратким и трудным для чтения. Вы можете многое сделать в несколько строк, но когда что-то сломается, может быть трудно понять, почему. Это благословение и проклятие. С большой силой появляется огромный потенциал, чтобы все испортить.

Что такое поток? Что такое команда?

Каждая команда — это программа, которая делает одну вещь. Grep, например, ищет вещи и возвращает строки. Запросы и файлы подаются на вход, найденные строки идут с выхода.

Вы можете подумать: «Да ладно, именно так работает все программирование», но в данном случае все немного сложнее, и это особенно важно понять.

Входы и выходы передаются от команды к команде в виде текстовых потоков. Есть три места, куда эти потоки идут и откуда берутся:

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

Вы отправляете текст на стандартный вывод с помощью таких команд, как printf и echo. Неопытный программист может думать, что это просто команды для вывода сообщений отладки, как в Python или JavaScript. Это не так.

Потоки позволяют объединять команды и функции. Хороший способ проиллюстрировать это — объяснить, как работают функции.

Источник

Работа с Bash

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

Что такое Bash?

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

Команды Bash

Возвращаясь к встроенным командам, можно привести пример, вы не найдете в файловой системе команду cd. Ее нет, она встроена.

Обычные же команды находятся в файловой системе. Они могут находиться в одной из папок, указанных в переменной PATH. Для выполнения встроенной или внешней команды достаточно набрать ее имя, интерпретатор отлично справляется с поиском команд по папкам, указанным в PATH. Например:

Но если команда находится в одной из сторонних папок, то необходимо ввести ее полный адрес:

Иначе оболочка не сможет найти исполняемый файл команды.

Объединение команд

Кроме того, Bash позволяет объединять команды по времени выполнения. Существуют такие операторы для объединения команд:

Например, сначала выполняем загрузку файла, а затем открываем его в плеере, если загрузка прошла успешно:

wget https://archive.org/download/testmp3testfile/mpthreetest.mp3 && mplayer mpthreetest.mp3

Чтобы продолжить этот пример, мы можем удалить загруженный файл, если произошла ошибка:

wget https://archive.org/download/testmp3testfile/mpthreetest.mp3 || rm mpthreetest.mp3

Чтобы выполнить обновление системы, а затем завершить работу выполните:

И наконец, вы можете запустить какой-либо сервис или приложение, например, браузер в фоне и свободно продолжить работу в терминале:

Управляющие символы Bash

Чтобы выполнить не последнюю команду, а скажем, предпоследнюю или выполненную еще раньше, то после восклицательного знака нужно указать ее номер:

Если вы укажите один восклицательный знак и несколько символов, то выполнится последняя команда, которая начиналась на эти символы:

Также может понадобиться искать команду не по первому символу, а по вхождению в нее определенного набора символов. Тогда можно использовать такую конструкцию. Ищем последнюю команду, в которой встречалось tmp:

Если перед командой написать пробел, то она не сохранится в истории:

Символ $? позволяет вывести код завершения последней команды:

Символ звездочки возвращает массивом содержимое текущей папки:

С помощью символа ^ можно заменить несколько букв из предыдущей команды. Работает это вот так:

В результате файл будет удален.

Горячие клавиши Bash

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

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

Выводы

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

На завершение видео по теме от Акцент профи:

Источник

Операционные системы и программное обеспечение
Файл Описание Оболочки входа (см. примечание) Интерактивные оболочки (не входа)
/etc/profile Системный, считывает и исполняет файлы /etc/profile.d/*.sh и /etc/bash.bashrc с настройками приложений. Да Нет