Сколько лет ash linux

Обновлено: 02.07.2024

Версия 1.11. Последнее обновление: 2008–1227. Выпуск

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

Из своего опыта пользователя UNIX/Linux, системного администратора и инструктора я знаю, что люди могут годами ежедневно взаимодействовать со своими системами, не имея ни малейшего представления об автоматизации задач. Поэтому они часто думают, что UNIX неудобна для пользователя, и, что еще хуже, у них создается впечатление, что она медленная и старомодная. Это еще одна проблема, которую можно решить с помощью этого руководства.

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

Предпосылки/не в этом курсе:

Вы должны быть опытным пользователем UNIX или Linux, знакомым с основными командами, справочными страницами и документацией

Возможность использовать текстовый редактор

Понимать процессы загрузки и завершения работы системы, инициализацию и сценарии инициализации

Создание пользователей и групп, установка паролей

Разрешения, специальные режимы

Понимание правил именования устройств, разбиения на разделы, монтирования/размонтирования файловых систем

Добавление/удаление программного обеспечения в вашей системе

Рис. 1. Обложка руководства по Bash для начинающих

Это руководство было переведено:

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

Спасибо всем друзьям, которые помогли (или пытались), и моему мужу; Ваши ободряющие слова сделали эту работу возможной. Спасибо всем, кто прислал отчеты об ошибках, примеры и замечания, среди многих других:

Ханс Бол, одна из поклонниц

Майк Сим, комментарии о стиле

Дэн Рихтер, примеры массивов

Гергу Фергюсону за идеи по поводу названия

Мендель Лео Купер, освободите место

Фрэнк Ван, за его подробные замечания обо всех моих ошибках ;-)

Особая благодарность Табате Маршалл, которая вызвалась провести полный обзор и проверить орфографию и грамматику. Мы отличная команда: она работает, когда я сплю. И наоборот ;-)

Отсутствует информация, отсутствующие ссылки, отсутствующие символы, примечания? Отправить по адресу

Подкаст Command Line Heroes на этой неделе посвящен наиболее широко используемому и де-факто стандартному языку сценариев, его ранним источникам вдохновения как части Free Software Foundation и его автору.

Послушайте героев командной строки Подкаст

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

И как же это произошло? На этой неделе в подкасте Command Line Heroes мы подробно рассмотрим этот вопрос, задав тем самым людям, которые написали код.

Все началось с Unix

Как и все, что связано с программированием, мы должны вернуться к Unix. Немного истории оболочки: в 1971 году Кен Томпсон выпустил первую оболочку Unix — оболочку Томпсона. Но существовали серьезные ограничения на количество сценариев, которые могли выполнять пользователи. А это означало серьезные ограничения для автоматизации и, следовательно, для всей области ИТ-операций.

В этом фантастическом исследовании описываются проблемы первых попыток написания сценариев (жирным шрифтом выделены команды):

Подобно своему предшественнику в Multics, эта оболочка (/bin/sh) представляла собой независимую пользовательскую программу, которая выполнялась вне ядра. Такие концепции, как подстановка (сопоставление с шаблоном для раскрытия параметров, таких как *.txt), были реализованы в отдельной утилите под названием glob, как и команда if для оценки условных выражений. Это разделение сделало оболочку небольшой, менее 900 строк исходного кода C.

Оболочка представила компактный синтаксис для перенаправления ( и >>) и конвейера (| или ^), который сохранился в современных оболочках. Вы также можете найти поддержку для вызова последовательных команд (с помощью ;) и асинхронных команд (с помощью &).

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

По мере расширения доступа к терминалам рос и интерес к автоматизации.

Bourne Shell — шаг вперед

Через шесть лет после выпуска Thompson, в 1977 году, Стивен Борн выпустил оболочку Bourne, предназначенную для устранения ограничений сценариев оболочки Thompson. (Чет Рэми, главный специалист по поддержке языка Bash с 1990 года, обсуждает его в этом выпуске Command-Line Heroes). Это была естественная эволюция технологий, появившихся в Bell Labs как часть системы Unix.

Что Борн намеревался сделать по-другому? Исследователь М. Джонс хорошо описывает это:

Оболочка Bourne преследовала две основные цели: служить интерпретатором команд для интерактивного выполнения команд для операционной системы и для сценариев (написание многократно используемых сценариев, которые можно было вызывать через оболочку). Помимо замены оболочки Томпсона, оболочка Борна предлагала несколько преимуществ по сравнению со своими предшественниками. Борн ввел потоки управления, циклы и переменные в скрипты, предоставив более функциональный язык для взаимодействия с операционной системой (как интерактивно, так и неинтерактивно). Оболочка также позволяла использовать сценарии оболочки в качестве фильтров, обеспечивая встроенную поддержку обработки сигналов, но не позволяла определять функции. Наконец, он включает в себя ряд функций, которые мы используем сегодня, в том числе подстановку команд (с использованием обратных кавычек) и документы HERE для встраивания сохраненных строковых литералов в сценарий.

Борн в предыдущем интервью описал это так:

Первоначальная оболочка на самом деле не была языком; это была запись — способ выполнения линейной последовательности команд из файла, единственным примитивом потока управления была GOTO метка. Эти ограничения оригинальной оболочки, написанные Кеном Томпсоном, были значительными. Например, вы не могли легко использовать командный сценарий в качестве фильтра, потому что сам командный файл был стандартным вводом. А в фильтре стандартный ввод — это то, что вы наследуете от родительского процесса, а не от командного файла.

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

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

Переосмысление оболочки Борна как свободного ПО

До этого доминирующими оболочками было проприетарное программное обеспечение, которое принадлежало и использовалось Bell Labs. Если вам повезет, ваш университет может иметь доступ к оболочке Unix. Но этот ограниченный доступ был далек от того мира, к которому стремился Фонд свободного программного обеспечения (FSF).

Ричард Столлман и группа разработчиков-единомышленников писали все функции Unix по лицензии, которая находится в свободном доступе по лицензии GNU. Одному из этих разработчиков было поручено сделать оболочку. Этим разработчиком был Брайан Фокс. И то, как он говорит о своей задаче, меня совершенно завораживает. Как он говорит в подкасте:

Причина, по которой это было так сложно, заключалась в том, что нам нужно было точно имитировать все функции оболочки Bourne, и в то же время иметь возможность расширять ее, чтобы сделать ее более удобным инструментом для использования людьми.< /p>

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

Оболочка, Bourne-Again

Приятно слышать, что Борн не чувствует себя ущемленным игрой слов. Борн рассказывает историю о том, как кто-то подошел к нему и подарил футболку Bash на конференции. Этим человеком был Брайан Фокс.

Оболочка Выпущен Создатель
Thompson Shell 1971 Кен Томпсон
Борн Шелл 1977 Стивен Борн
Bourne-Again Shell 1989 Брайан Фокс

Со временем популярность Bash возросла. Другие инженеры начали использовать его и вносить улучшения в его конструкцию. Действительно, годы спустя Фокс будет настаивать на том, что научиться отказываться от контроля над Bash было одной из самых важных вещей, которые он сделал в своей жизни.Когда Unix уступил место Linux и движению за программное обеспечение с открытым исходным кодом, Bash стал ключевой силой сценариев в мире открытого исходного кода. Великие проекты, кажется, вырастают за рамки видения одного человека.

Что мы можем узнать из оболочек?

Оболочка — это технология, настолько неотъемлемая часть повседневного использования ноутбука, что легко забыть о том, что она потребовала изобретения. В истории перехода от Thompson к Bourne и Bash есть несколько знакомых выводов:

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

Command Line Heroes охватила языки программирования на протяжении всего 3-го сезона и приближается к финалу. Обязательно подпишитесь, чтобы узнать все, что вы хотите знать о происхождении языков программирования, и я хотел бы услышать ваши истории о оболочках в комментариях ниже.

 Слушайте подкаст «Герои командной строки» width=

Инфраструктура — это код: история COBOL и Go

COBOL остается доминирующим языком мейнфреймов. Чему Go может научиться из своей истории, чтобы доминировать в облаке?

 Слушайте подкаст «Герои командной строки» width=

От BASIC до Ruby: жизненные уроки первых языков программирования на героях командной строки

Узнайте больше о том, почему BASIC является любимым первым языком и как следующее поколение будет учиться программировать.

Послушайте подкаст о героях из командной строки

Perl вымирает?

Command Line Heroes рассказывает о стремительном взлете Perl, его падении из поля зрения и о том, что будет дальше в жизненном цикле языка программирования.

Если вы используете bash для сценариев, вам, несомненно, придется часто использовать условия, например, для конструкции if… then или цикла while. Синтаксис этих условий может показаться немного сложным для изучения и использования. Этот учебник призван помочь читателю понять условия в bash и предоставляет исчерпывающий список возможностей. Предполагается небольшое количество общих знаний оболочки.


Ускорьте свою карьеру в облаке

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

Сложность: Базовая – Средняя

Оглавление

Что такое сценарии Bash?

Прежде чем мы начнем, давайте удостоверимся, что мы все на одной странице. Что такое сценарии Bash? Простой способ думать о сценариях Bash — думать о них как о сценариях фильмов. Они говорят актерам, что говорить в какое время, верно? Ну, сценарии Bash говорят Bash, что делать в какое время.

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

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

Распространенные специальные символы, используемые в Bash

Введение в программирование Bash

Условие в этом примере по сути является командой. Это может показаться странным, но заключение сравнения в квадратные скобки — это то же самое, что и использование встроенной тестовой команды, например:

Если $foo больше чем или равно 3, будет выполнен блок после ‘then’. Если вы всегда задавались вопросом, почему bash имеет тенденцию использовать -ge или -eq вместо >= или ==, это потому, что этот тип условия исходит из команды, где -ge и -eq являются параметрами.

По сути, это то, что if делает, проверяя статус выхода команды. Я объясню это более подробно далее в руководстве. Существуют также встроенные проверки, более специфичные для оболочек. А этот?

Вышеприведенное условие выполняется, если файл «regularfile» существует иявляется обычным файлом. Обычный файл означает, что это не блочное или символьное устройство или каталог. Таким образом, вы можете убедиться, что полезный файл существует, прежде чем что-то с ним делать. Вы даже можете проверить, доступен ли файл для чтения!

Приведенное выше условие выполняется, если файл readablefile существует и доступен для чтения. Легко, не так ли?

Синтаксис оператора bash if

Основной синтаксис оператора if … then выглядит следующим образом:

Условие, в зависимости от его типа, заключено в определенные квадратные скобки, например. [ ]. Вы можете прочитать о различных типах далее в учебнике. Вы можете добавить команды, которые будут выполняться, когда условие ложно, используя ключевое слово else, и использовать ключевое слово elif (elseif) для выполнения команд при другом условии, если основное условие ложно. ложный. Ключевое слово else всегда идет последним. Пример:

Краткое объяснение примера: сначала мы проверяем, читается ли файл somefile («if [ -r somefile ]»). Если это так, мы читаем его в переменную. Если нет, то проверяем, существует ли он на самом деле («elif [ -f somefile ]»). Если это так, мы сообщаем, что он существует, но не читается (если бы это было так, мы бы прочитали содержимое). Если файл не существует, мы также сообщаем об этом. Условие в elif выполняется, только если условие в if было ложным. Команды, принадлежащие else, выполняются только в том случае, если оба условия неверны.

Полное руководство по облаку и словарю

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

Основные правила условий bash

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

    Всегда оставляйте пробелы между скобками и фактической проверкой/сравнением. Следующее не будет работать:

Bash будет жаловаться на «отсутствующий символ `]».

Есть несколько случаев, когда не следует цитировать, но они редки. Вы увидите один из них далее в руководстве.

Также полезно знать две вещи:

    Вы можете инвертировать условие, поставив "!" перед ним. Пример:

Обязательно поставьте «!» внутри скобок!

Приведенное выше условие вернет значение true, если $foo содержит целое число больше или равное 3 и меньше 10. Подробнее об этих комбинированных выражениях можно прочитать в синтаксисе соответствующих условий.

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

В любом случае, пока я показывал вам условия только между одинарными скобками. Однако есть и другие варианты синтаксиса, как вы прочтете в следующем разделе.

Различные синтаксисы условий

В Bash используется другой синтаксис для условий. Я перечислю три из них:

1. Синтаксис с одной скобкой

Это синтаксис условия, который вы уже видели в предыдущих абзацах; это самый старый поддерживаемый синтаксис. Он поддерживает три типа условий:

    Файловые условия
      Разрешает различные виды проверок файла. Пример:

    Вышеприведенное условие верно, если файл «symboliclink» существует и является символической ссылкой. Дополнительные условия для файлов см. в таблице ниже.

    Приведенное выше условие выполняется, если $emptystring является пустой строкой или неинициализированной переменной. Пример второй:

    Приведенное выше условие выполняется, если $stringvar1 содержит только строку «сыр». Дополнительные строковые условия см. в таблице ниже.

    Приведенное выше условие возвращает значение true, если $num меньше 1. Дополнительные арифметические условия см. в таблице ниже.

    2. Синтаксис двойной скобки

    Возможно, вы уже сталкивались с условиями, заключенными в двойные квадратные скобки, которые выглядят следующим образом:

      Первое отличие можно увидеть в приведенном выше примере; при сравнении строк синтаксис с двойными скобками включает подстановку оболочки. Это означает, что звездочка («*») заменяется буквально чем угодно, как вы, вероятно, знаете из обычного использования командной строки. Следовательно, если $stringvar где-либо содержит словосочетание «строка», условие возвращает значение «истина». Разрешены и другие формы подстановки оболочки. Если вы хотите сопоставить как «String», так и «string», вы можете использовать следующий синтаксис:

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

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

    Приведенное выше условие возвращает значение true, если в рабочем каталоге есть один-единственный файл с расширением .sh. Если их нет, он вернет false. Если файлов .sh несколько, bash выдаст ошибку и прекратит выполнение скрипта. Это связано с тем, что *.sh расширяется до файлов в рабочем каталоге. Использование двойных скобок предотвращает это:

    Приведенное выше условие возвращает значение true, только если в рабочем каталоге есть файл с именем «*.sh», независимо от того, какие другие файлы .sh существуют. Звездочка воспринимается буквально, потому что синтаксис с двойными скобками не расширяет имена файлов.

    Приведенное выше условие возвращает значение true, если $num равно 3, а $stringvar равно «foo». Также поддерживаются -a и -o, известные из синтаксиса с одной скобкой. Обратите внимание, что оператор и имеет приоритет над оператором или, что означает, что «&&» или «-a» будет оцениваться перед «||» или «-о».

    3. Синтаксис двойной скобки

    Существует также другой синтаксис для арифметических (числовых) условий, скорее всего, заимствованный из оболочки Korn:

    Приведенное выше условие выполняется, если $num меньше или равно 5. Этот синтаксис может показаться более знакомым программистам. В нем представлены все «обычные» операторы, такие как «==», «=». Он поддерживает «&&» и «||» объединение выражений (но не -a и -o!). Это эквивалентно встроенной команде let.

    Таблица условий

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

    1. Условия на основе файлов:

    2. Строковые условия:

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

    5. Условия синтаксиса с двойными скобками:

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

    Немного глубже

    Я сказал, что расскажу подробнее о том, что if по существу проверяет статус выхода команд. Так и сделаю.

    Основное правило bash, когда речь заходит об условиях: 0 равно true, >0 равно false.

    Это во многом противоположно многим языкам программирования, где 0 равно false, а 1 (или больше) равно true. Причина этого в том, что оболочки, такие как bash, много работают с программами. По соглашению UNIX программы используют статус выхода, чтобы указать, прошло ли выполнение нормально или произошла ошибка. Так как успешное выполнение не требует никаких объяснений, ему нужен только один статус выхода. Однако, если возникла проблема, полезно знать, что пошло не так. Таким образом, 0 используется для успешного выполнения, а 1-255 указывает, какая ошибка произошла.

    Значение чисел от 1 до 255 различается в зависимости от программы, возвращающей их.

    В любом случае, if выполняет блок после тогда, когда команда возвращает 0. Да, условия — это команды. Фраза [ $foo -ge 3 ] возвращает статус выхода, как и два других синтаксиса! Поэтому есть изящный трюк, который можно использовать для быстрой проверки условия:

    В этом примере «echo true» выполняется, только если «[ $foo -ge 3 ]» возвращает 0 (true). Почему так, спросите вы. Это потому, что bash оценивает условие только тогда, когда это необходимо. При использовании выражения объединения и оба условия должны быть истинными, чтобы выражение объединения возвращало значение true. Если первое условие возвращает false, не имеет значения, что возвращает второе; результат будет ложным.

    Поэтому bash не оценивает второе условие, и именно по этой причине в примере не выполняется «echo true». То же самое и с оператором или ("||"), где второе условие не оценивается, если первое условие истинно. Ну, вот и все.

    Если вы хотите узнать больше, я хотел бы указать вам на Advanced Bash-Scripting Guide и, возможно, на Bash Reference Manual. Вы также можете ознакомиться с нашим курсом «Руководство системного администратора по написанию сценариев Bash».

    Заключение

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

    Надеюсь, вам понравилось чтение так же, как мне понравилось писать. Вы всегда можете вернуться сюда, чтобы просмотреть условия в таблице (сохраните эту ссылку в закладках, чтобы просмотреть таблицу напрямую) или освежить свои знания. Спасибо за чтение и приятного сценария!

    Хотите повысить уровень своей технической игры? Подпишитесь на A Cloud Guru на YouTube, нажмите «Нравится» на Facebook, следите за нами в Twitter или присоединяйтесь к обсуждению в Discord!

    Ракушки

    Возможно, вы слышали выражение "когда у вас есть только молоток, все проблемы выглядят как гвозди". Это не относится к чудесному миру оболочек POSIX. Для непосвященных один светящийся черный экран с зеленым текстом ничем не отличается от любого другого светящегося черного экрана с зеленым текстом, но многие системные администраторы знают, что выбранная вами оболочка может изменить каждый аспект вашего взаимодействия с компьютером.

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

    Вот некоторые из самых популярных оболочек и то, что в них нравится пользователям.

    Эш и Дэш

    Дополнительные ресурсы по Linux

    Оболочка Almquist была разработана как клон известной оболочки Bourne (не путать с оболочкой Bourne Again Shell, также известной как Bash). Он был намеренно упрощен, вероятно, по той же причине, по которой изначально были исключены редактирование строк и история: Кеннет Алмквист считал, что дополнительные функции UX принадлежат вне оболочки. Спустя десятилетия раковина по-прежнему остается любимой маленькой и базовой раковиной. Она поставлялась с первыми выпусками Android и на протяжении многих лет была стандартной оболочкой для минимальной загрузочной среды дистрибутивов Linux.

    Как и во многих оболочках POSIX, использование Ash номинально знакомо всем, кто привык к консоли. Вы вводите команды; вы получаете вывод. Некоторые из дополнительных функций есть, а другие отсутствуют. Например, если вы привыкли использовать сочетания клавиш в стиле Emacs или Vim, вы обнаружите, что они заметно отсутствуют в Ash. Однако вы можете включить их (если они были включены во время компиляции) с параметром -E (для Emacs) или -V (для Vim). История (фактически встроенная команда fc в Ash) также не является заданной, в зависимости от того, как был скомпилирован Ash. Здесь нет массивов, а встроенная команда trap не принимает никаких параметров.

    Dash — это оболочка Almquist, фактически являющаяся портом Ash из NetBSD в Debian Linux и расшифровывается как Debian Almquist Shell.

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

    Оболочка Bourne-Again (Bash) была создана проектом GNU для замены проприетарной оболочки Bourne (которая сама была создана для замены оболочки Кена Томпсона). Сегодня Bash — это больше, чем просто оболочка: это законный язык программирования, один из основных инструментов находчивого системного администратора и почти культурная икона для непрограммистов, нуждающихся в быстрой и грязной автоматизации. Если вы можете провести день в оболочке Linux, то вы можете разработать сценарий Bash, чтобы заменить себя. Это простое, прямое и удивительно мощное средство с такими функциями, как массивы, стек каталогов, ловушки, синтаксический анализ подстрок, сочетания клавиш Emacs или Vim и многое другое.

    Одним из распространенных аргументов против Bash является его размер, который в моей системе составляет около 1 МБ по сравнению с 200 КБ для Ash. Другое дело его сложность. Bash настолько многофункционален, что, хотя сценарий, написанный на чистом POSIX, будет работать в Bash, то же самое не всегда верно для сценария Bash, пытающегося запуститься в чистом POSIX-оболочке. Хотя у Bash есть режим POSIX, его дополнительные «башизмы» обычно слишком привлекательны, чтобы их игнорировать. Хорошей новостью является то, что Bash имеет открытый исходный код, поэтому его можно легко установить для запуска скрипта, полного башизмов, но тем не менее некоторые пользователи принципиально возражают.

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

    Бизибокс

    BusyBox — это двоичный файл с несколькими вызовами, который объединяет множество распространенных утилит POSIX в один исполняемый файл. Другими словами, это основной пользовательский интерфейс POSIX в бинарном виде «все в одном». При установке из исходного кода он помещает исполняемый файл busybox в системную библиотеку, и ожидается, что вы будете ссылаться на него при создании отдельных команд для себя и своих пользователей. Например:

    Меньше 1 МБ вы получаете около 400 команд, включая ls, cd, cp, mv, grep, ps, passwd, poweroff, printf, sed, утилиты сжатия, управление процессами и многое другое. Большинство этих команд минимальны по сравнению с их эквивалентами GNU, но в зависимости от вашего варианта использования их, вероятно, будет достаточно.Точно так же интерактивной оболочкой Busybox является Ash, поэтому она соответствует спецификациям POSIX и мало что дает.

    Csh или Tcsh

    Оболочка C ( csh ) и ее более поздняя версия, tcsh , используют синтаксис, подобный C (или C++ или Java, если вы лучше знакомы с ними). Например, вот цикл if в Bash:

    А вот то же самое в Csh:

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

    Хотя csh несколько страдает из-за своего возраста, tcsh является хорошим обновлением и имеет почти те же возможности, что и Bash, хотя время от времени с некоторым другим синтаксисом.

    Оболочка Fish с гордостью называет себя "современной оболочкой 90-х". Он обладает всеми преимуществами надежных оболочек, таких как Bash и Zsh, но с дополнительными функциями, такими как подсветка синтаксиса, команда fish_config и многое другое. Его цель — предоставить пользователю дополнительный контекст и лучшую систему управления конфигурацией, чем просто один .bashrc .

    Здесь есть небольшие различия в синтаксисе. Например, это определение функции для Bash:

    Однако то же самое и с Fish:

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

    Оболочка Korn ( ksh ) была разработана Дэвидом Корном и выпущена в 1983 году. Хотя и Bash, и tcsh поставлялись в качестве оболочек по умолчанию для популярных систем POSIX, оболочка Korn в основном оставалась «альтернативной» оболочкой. Но из альтернативных оболочек ksh хорошо зарекомендовал себя, и когда Microsoft представила Powershell на технических конференциях, они назвали оболочку Korn главным источником вдохновения.

    Существует несколько разных версий оболочки Korn (mksh, ksh93, ksh93u+, ksh2020 и другие), но официальные ветки поддерживаются на Github AT&T.

    Пользователям Bash ksh может показаться довольно знакомым. Чтение учебника по написанию сценариев Korn почти такое же, как чтение по сценариям Bash. Вы можете определять свои собственные функции, создавать псевдонимы, записывать циклы и даже запрограммировать параметры завершения с вкладками. Сочетания клавиш Emacs включены по умолчанию, но вы можете переключиться на сочетания клавиш vi с помощью параметра -o vi при запуске или вставив set -o vi в файл конфигурации ~/.environ.ksh.

    То, чего не хватает в Kornshell, вы, вероятно, не сразу заметите. Например, вы не можете включить или отключить встроенные команды, и есть встроенная команда, вызываемая из которой выполняет ту же работу, что и исполняемый файл. Команды typeset нет, но в Kornshell есть массивы с наиболее важными доступными функциями поиска. Другими словами, несмотря на небольшие различия, ksh прост в использовании для всех, кто привык к Bash, Fish или Zsh.

    Оболочка Z ( zsh ) – это интерактивная оболочка POSIX, похожая на Bourne, известная множеством инновационных функций. Пользователи Z Shell часто ссылаются на его многочисленные удобства и отмечают его повышенную эффективность и широкие возможности настройки. При первом запуске Zsh предлагает несколько параметров конфигурации, таких как размер истории, сочетания клавиш (Emacs или Vim) и количество дополнительных функций, которые вам нужны. Например, вы можете сделать команду cd неявной, разрешив Zsh инициировать изменение каталога, когда вы указываете неисполняемый путь без команды. Есть несколько дополнительных функций, и вы можете установить или отключить их, отредактировав файл конфигурации .zshrc.

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

    В Zsh эта команда немного более интуитивно понятна:

    Чтобы перестроить кешированные пути команд в Bash, вы должны очистить существующий, но в Zsh для этого есть опция:

    Есть небольшие преимущества и для тех, кто переходит с других оболочек. Например, вы можете использовать команду where в Z Shell, которая знакома пользователям оболочки Korn.

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

    Выберите оболочки

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

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

    Читайте также: