Bash
Bash — это командная оболочка для UNIX-подобных операционных систем (UNIX, GNU/Linux, MacOS). Она дает пользователю систему команд для работы с файлами и папками, поиском, настройкой окружения и позволяет управлять ОС прямо из командной строки.


«IT-специалист с нуля» наш лучший курс для старта в IT
Слово bash читается как «баш» и расшифровывается как Bourne-Again Shell. Стивен Борн — это имя и фамилия создателя оболочки, а sh (расшифровывается как «шелл») — ее предыдущая версия. Она использовалась в старых версиях операционных систем UNIX. На shell основаны практически все современные системы команд для работы с ОС.
Что делает bash
Оболочка принимает команды, которые пользователь ввел в командную строку, и интерпретирует их, то есть переводит в машинный код. Операционная система получает код в качестве инструкций и выполняет их.
Есть и другой способ использования: создание bash- или shell-скриптов, которые сохранены в файле. При каждом запуске файла будет выполняться набор указанных в нем команд.
Зачем использовать bash
Те же самые действия с файлами, папками и поиском можно выполнить с помощью графического интерфейса ОС. Но это дольше, неудобнее и сложнее. Программисты пользуются bash или shell, чтобы упростить и ускорить работу с системой.
Например, чтобы скопировать файл с помощью графического интерфейса, нужно открыть папку, где он расположен, кликнуть на файл правой кнопкой мыши, вызвать контекстное меню и выбрать «Скопировать». А если использовать командную строку и bash — потребуется ввести одну команду.
Команда cp означает «скопировать». — это путь к исходному файлу, например /home/file.txt. Это значит, что file.txt лежит в папке /home.
— путь к копии файла, которая создастся при выполнении команды. Например, /home/usr/file2.txt, где file2.txt — название копии. Она будет находиться в папке /usr внутри директории /home.
В некоторых системах графический интерфейс практически не используется. Все действия нужно выполнять с помощью командной строки. Здесь bash/shell незаменим.
Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

Как запустить bash
Оболочка-интерпретатор встроена в операционную систему и включается автоматически. Достаточно открыть окно терминала и начать вводить команды.

Чтобы запустить bash-скрипт, записанный в файл, нужно выдать права на его исполнение
Структура команды
Синтаксис команды выглядит так:
Флаги — это короткие входные параметры после команды, которые обычно выглядят как дефис и буква. Например, в записи ls -l -l — это флаг. Это нужно, чтобы команда выполнялась определенным образом, например по-особому выводила результат. Для большинства команд существуют десятки флагов.
Аргументы — это данные, которые передаются команде. Например, чтобы создать файл, нужно указать его имя — оно будет аргументом.
Флаги и аргументы нужны не всегда и не для всех команд.
Как устроена навигация в bash
Организация файлов и папок в Linux не такая, как в Windows. Путь к файлу отсчитывается не от названия диска, а от так называемого корневого каталога. Говоря языком «для начинающих», это начальная точка: считается, что все файлы и папки в системе расположены внутри «корня». Внутри этих папок могут лежать свои подкаталоги и файлы, но их расположение тоже отсчитывается относительно корневого каталога. Корневой каталог обозначается прямым слэшем /.
Чтобы указать на файл, лежащий в корневом каталоге, нужно написать /. Полный путь к любому файлу можно прописать так: ///…//.
Указывать весь путь необязательно. Можно прописать расположение файлов и папок относительно того места, где вы находитесь.
В системах Windows для указания пути используются обратные слэши \. В Linux это всегда прямые слэши /.

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить
Команды для навигации по системе
Постоянно прописывать путь целиком сложно и долго. Поэтому в bash есть система обозначений специально для навигации:
- . — текущая папка;
- .. — папка на уровень выше текущей;
- ~ — домашний каталог. Его адрес по умолчанию зависит от дистрибутива операционной системы. Например, в Ubuntu это /home/;
- — — предыдущий каталог.
Эти обозначения разрешается использовать вместо части пути или пути полностью. Например, можно написать ~/myfiles или ../docs/work.
Перемещаться по системе и ориентироваться в местоположении помогают команды:
- pwd — показать полный путь к папке, где сейчас находится пользователь;
- сd — перейти в другой каталог.
Команды для просмотра информации
В ходе работы бывает нужно просмотреть файл или мануал, проверить содержимое каталога. У bash для этого множество возможностей, но мы пока рассмотрим основные:

- man — открыть мануал, руководство пользователя по какой-либо команде. Этот справочник очень полезен на начальных этапах изучения оболочки. Там приведены подробные описания команд, но на русский язык руководство не переведено;
- cat — показать содержимое файла прямо в терминале. Можно передать команде несколько файлов, тогда она выведет содержимое каждого;
- ls — отобразить содержимое каталога. Если не передать этой команде путь, она покажет, что находится в текущей папке.
Less. Команда less открывает переданный файл для чтения в специальном интерфейсе. Она хорошо подходит для просмотра длинных файлов, потому что внутри интерфейса less можно ориентироваться по содержимому:
- нажатие g переводит пользователя в начало файла;
- нажатие G переносит в конец;
- / открывает поиск по содержимому;
- q выходит из less.
Язык bash зависит от раскладки: если ввести g, когда включен русский язык, команда не сработает.
Nano. Так называется текстовый редактор, которым можно пользоваться из консоли. Он очень простой: это аналог Notepad, который открывается прямо внутри командной строки. Чтобы открыть в нем файл, нужно ввести команду nano . Внутри программы можно читать, редактировать, сохранять содержимое. Основные команды редактора указаны внутри его интерфейса.

Для перехода в nano без открытия файла команду можно запустить без аргументов
Команды для поиска
Пользователю может понадобиться найти какой-нибудь файл или определенную информацию внутри него. Для этого используются две программы:
- find -name «имя файла в кавычках» ищет файл с нужным именем в указанной папке;
- grep «любой текст в кавычках» ищет указанную строку в файле. Подходит для поиска определенного содержимого, например строчек в скриптах. Если запустить grep с аргументом -r и указать имя папки, то он будет искать нужную строку во всех файлах папки.
Работа с файлами
Со всем, что есть в системе, можно работать. Для этого bash предоставляет огромное множество команд. Вот некоторые из них:
- mkdir — создает в текущем каталоге новую папку. Если папку нужно создать в другом месте, понадобится команда mkdir -p ;
- touch — создает файл. Можно прописать к нему путь, а можно создать его в текущем каталоге. Тогда потребуется указать только имя файла;
- cp — копирует файл из пути1 в путь2;
- mv — перемещает файл из пути1 в путь2;
- rm — удаляет файл, rm -r — удаляет каталог;
- wget — скачивает файл с сайта по ссылке и размещает в текущем каталоге;
- echo — выводит аргумент в консоль.
Ввод и вывод
- — ввод аргументов из файла;
- >— вывод результата в файл;
- >>— вывод результата в файл с дозаписью. Если в документе уже было содержимое, оно не перезапишется — новые данные добавятся в конец.
Можно запускать сразу несколько команд, чтобы они передавали друг другу данные, — это называется конвейером. В таком случае команды перечисляются через |.
Работа с git
Популярные дистрибутивы Linux (Ubuntu, Debian и прочие) поддерживают систему контроля версий git. Узнать о ней больше можно в этой статье. С системой можно работать из командной строки.
Скрипты на bash
Если пользователю нужно выполнить много шаблонных действий по очереди и этот алгоритм будет использоваться не один раз, можно создать скрипты. Команды записываются в файл и выполняются каждый раз, когда он исполняется. С помощью скриптов можно автоматизировать работу с системой и упростить процессы.
Чтобы запустить скрипт из консоли, нужно ввести команду bash или sh .
Начало скрипта. Чтобы система поняла, что файл — скрипт, его первая строка должна быть такой:
После ! пишется путь к интерпретатору bash, который по умолчанию выглядит так, как указано в коде. Если в системе другой путь, соответственно меняется и запись в начале скрипта. Узнать этот путь можно с помощью команды в терминале:
Расширение для файла скрипта традиционно указывается как .sh. На самом деле система сможет выполнить файл и с другим расширением и даже без него. В первую очередь .sh указывается для удобства пользователя, чтобы ему было легче понять, что файл — bash-скрипт.
Переменные. Скриптовый язык поддерживает переменные. У них нет типа, а объявляются они так:
Значение может быть числовым, текстовым или другим. Можно получить его извне с помощью специальных обозначений:
- $0 — передает имя скрипта;
- $1, $2 и так далее — аргументы, которые пользователь может передать в скрипт, когда открывает его.
Обратиться к созданной переменной внутри скрипта можно так: $. Она используется для вычислений, ввода-вывода и других действий.
Условия и циклы. Скрипт может выполнять действия, если соблюдается какое-либо условие. Для этого используется конструкция:
Циклы позволяют выполнять команды заданное количество раз или пока некоторое условие верно. Таким образом можно управлять родительскими и дочерними процессами, контролировать версии или работать с сервером.
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

Статьи по теме:
Анализируем требования к опыту, образованию, возрасту и навыкам
Где искать модели для машинного обучения, готовиться к собеседованиям и осваивать новые технологии на практике
Основные сведения о shell-скриптах в Терминале на Mac

Вместо ввода команд и ожидания ответа Вы можете составить shell-скрипт, который будет выполняться без Вашего непосредственного участия.
Shell-скрипт — это текстовый файл, который содержит одну или несколько команд UNIX. Вместо того чтобы вручную поочередно вводить команды в командной строке, Вы запускаете shell-скрипт, который выполняет все эти команды.
Плюс в том, что в одном shell-скрипте можно объединить большое количество стандартных задач. Это обеспечивает экономию Вашего времени и сокращает количество возможных ошибок при многократном выполнении однотипных задач. Кроме того, shell-скрипты можно автоматизировать с помощью таких инструментов, как launchd или Apple Remote Desktop.
Shell-скрипт начинается с комбинации символов, которая сообщает, что это shell-скрипт. Это символы # и ! (вместе называемые shebang), после которых указывается оболочка shell, в которой должен быть выполнен скрипт. Например, вот первая строка shell-скрипта, который будет запущен в sh :
Рекомендуется снабжать shell-скрипты комментариями. Чтобы добавить комментарий, начните строку со знака номера (#). Каждая строка комментария должна начинаться со знака номера:
#This program returns the #contents of my Home folder
Чтобы визуально отделить различные части shell-скрипта, в него можно добавлять пустые строки.
С помощью инструмента chmod можно указать, что файл является исполняемым (то есть, его содержимое может быть запущено как приложение). См. раздел Преобразование файлов в исполняемые в Терминале.
Инструкции по написанию shell-скриптов см. в статье Основные сведения о shell-скриптах на веб‑сайте Apple для разработчиков.
Shell-скриптинг
Shell-скриптинг — написание сценариев командного интерпретатора пользователя (sh, bash, csh).
Действия, которые пользователь выполняется в оболочке, можно записать в файл, а потом выполнять их как единое целое. Такой файл называется сценарием или скриптом командного интепретатора (shell script). В самом простейшем случае скрипты создаются для того, чтобы сохранить некоторую повторяющуюся последовательность действий и в будущем вызывать её одной командой. Это простейшая, но далеко не единственная область применения скриптов. Вообще, скрипт — главный инструмент для автоматизации управления операционной системой.
Многие вещи можно сделать средствами самого интерпретатора, но, как правило, работа выполняется с помощью программ операционной системы, которые используются и как управляющие механизмы (например, для работы с файлами), и как расширители возможностей интерпретатора, например, такие как sed и awk, которые помогают манипулировать текстовыми потоками.
[править] Стиль
Стилистические и синтактические правила, которых рекомендуется придерживаться, при написании shell-скриптов (Bourne shell и bash):
- https://google.github.io/styleguide/shell.xml
- http://www.inquisitor.ru/doc/coding-style-shell.html
- http://www.cyberciti.biz/faq/bash-shell-script-function-examples/
[править] Вопросы и ответы
[править] Как сделать завершение скрипта при возникновении ошибки
По умолчанию скрипт не прерывается в случае возникновения ошибки при выполнении его команд.
Обрабатывать каждую ошибку вручную можно так:
команда || exit $?
Это не очень удобно, потому что команд, завершившихся с ошибкой, может быть очень много.
Можно сделать, что он будет завершаться, как только код выполнения командной строки [1] будет отличен от нуля.
%$ set -e
Теперь, например, при выполнении команды false скрипт будет завершаться. С другой стороны,
false || true
не приведёт к завершению, а
false ; true
Использование режима set -e обычно сопровождается назначением обработчика ошибки с помощью trap ERR. Обработчик вызывается перед тем как завершить интерпретатор при возникновении ошибки по set -e. Например, нам нужно удалить временные файлы перед завершением (условная функция cleanup_temp):
%$ trap cleanup_tmp ERR
Подробнее об этих и других способах обработки ошибок:
- Error handling in BASH (англ.)
[править] Как в скрипте (bash) обратиться к последнему аргументу?
Если же эта конструкция не поддерживается, тогда нужно уже извращаться с eval, перебирать аргументы с помощью shift, одним словом, мудрить. Примеры вариантов решения: [1].
[править] Как узнать в каком каталоге находится текущий исполняемый скрипт?
DIR="$( cd "$( dirname "$" )" && pwd )"
Источник: [2]
[править] Как сделать чтобы команда убивалась по таймауту?
Можно поставить программу timeout, которая это делает.
$ apt-get install timeout $ timeout 10 sleep 20
Если программы ставить не хочется, то можно использовать такой трюк:
( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec ping www.goooooogle.com )
[править] Если bash/другой шелл такой классный и мощный, так может всё на нём писать? Чего в нём не хватает?
[править] Дополнительная информация
- Advanced Bash-Scripting Guide (англ.)
- Advanced Bash-Scripting Guide перевод (частичный)
- Shell Script Mistakes (англ.) несколько частов встречающихся стилистических ошибок при написании шелл-скриптов
[править] Примечания
- ↑ Здесь под командной строкой понимаются синтаксические конструкции, разделённые (;) или переводом строки
| Интерфейс командной строки | |
|---|---|
| Основы | Потоки ввода/вывода • Командная строка |
| Пользовательское окружение | Оболочка интерпретатора • Приглашение командного интерпретатора • bash_completion • shopt |
| Скриптинг | Скриптинг • Интерпретатор • Shebang • Shell-скриптинг • shell-framework • expect • awk • sed |
Shell script
Командная оболочка UNIX (англ. Unix shell , часто просто «шелл» или «sh») — командный интерпретатор, используемый в операционных системах семейства POSIX-совместимые оболочки, восходящие к Bourne shell, появившемуся в Unix Version 7.
Разновидности
- sh — оригинальный Bourne shell.
- BSD, имеет Си-образный синтаксис и не является
- ksh — клон Bourne shell, разработанный Дэвидом Корном из AT&T Labs (отсюда и её название — KornShell).
- pdksh — открытая (почти целиком является общественным достоянием, отсюда и буквы «pd» — от английского «public domain»)[1] реализация ksh.
- zsh — другие современные клоны Bourne shell.
- busybox — современные микро-версии, предназначенные для встраиваемых систем, а также используемые в мини-дистрибутивах.
Программирование
sh является удобным и часто используемым интерпретируемым языком программирования. Он содержит стандартные конструкции для циклов, ветвления, объявления функций и т. п. Данный язык часто используется в скриптов) работы, в частности, сценариев автоматического конфигурирования исходных кодов программ перед их компиляцией. Отличительная особенность языка sh — многие операции, которые в традиционных языках программирования являются встроенными, выполняются с помощью вызова внешних программ.
См. также
Ссылки
- KornShell (англ.) . Проверено 31 октября 2008.
- Zsh (англ.) . Проверено 31 октября 2008.
ash • sh • csh • dash • es shell • fish • ksh • psh • rsh • Scsh • Sash • rc • Thompson shell • zsh • busybox • прочие…
Wikimedia Foundation . 2010 .
- Sharp Corporation
- Shepherdia argentea
Полезное
Смотреть что такое «Shell script» в других словарях:
- Shell Script — Shell Script, unter Unix eine Datei, die Befehlsaufrufe für die Unix Shell enthält … Universal-Lexikon
- Shell script — This article is about scripting in UNIX like systems. For batch programming in DOS, OS/2 and Windows, see Batch file. For batch programming in Windows PowerShell shell, see Windows PowerShell#Scripting. A shell script is a script written for the… … Wikipedia
- shell script — apvalkalo scenarijus statusas T sritis informatika apibrėžtis ↑Tekstinės sąsajos apvalkalo komandų rinkinys (failas). DOS operacinėje sistemoje vadinamas ↑komandų failu. atitikmenys: angl. shell script ryšiai: dar žiūrėk – komandų failas dar… … Enciklopedinis kompiuterijos žodynas
- shell script — noun A prewritten list of commands, and perhaps other control information, to be executed (interpreted) by a shell or other command interpreter. Syn: batch file … Wiktionary
- Shell (computing) — A shell is a piece of software that provides an interface for users of an operating system which provides access to the services of a kernel. However, the term is also applied very loosely to applications and may include any software that is… … Wikipedia
- Shell de UNIX — Este artículo trata sobre el intérprete típico de Unix. Para otros usos de este término, véase terminal (informática) . Pantalla durante una sesión muestra Bash, tomada en Gentoo Linux. Una Shell de Unix o también shell, es el término usado en… … Wikipedia Español
- script — 1. noun /skrɪpt/ a) Written characters; style of writing. b) Type made in imitation of handwriting. Syn: manuscript, handwriting, cursive … Wiktionary
- Script (Unix) — script ist ein Kommandozeilenprogramm unter Unix, das alle Ein und Ausgaben eines Terminals in eine Datei aufzeichnet. Benutzung Das Programm wird in der Unix Shell wie folgt benutzt: $ script [file] Weitere Optionen sind möglich. Je nach… … Deutsch Wikipedia
- Shell sort — is a sorting algorithm that is a generalization of insertion sort, with two observations: *insertion sort is efficient if the input is almost sorted , and *insertion sort is typically inefficient because it moves values just one position at a… … Wikipedia
- Shell-Skript — Skriptsprachen (häufig auch Scriptsprachen) sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind. Sie verzichten oft auf bestimmte Sprachelemente, deren Nutzen erst bei der Bearbeitung größerer… … Deutsch Wikipedia
- Обратная связь: Техподдержка, Реклама на сайте
- Путешествия
Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.
- Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
- Искать во всех словарях
- Искать в переводах
- Искать в ИнтернетеИскать в этой же категории