Основы Bash в Linux - командная оболочка и работа с ней — пишем первый скрипт

Сегодня мы отправляемся в увлекательное путешествие по вселенной Bash – невидимому, но мощному инструменту, который скрывается за твоим компьютером с Linux.
Забудь о мышах и кнопках; наш компас – текстовая консоль,
С помощью которой мы превратимся в могущественных магов,
Покоряющих цифровые вершины и подчиняющих невидимые силы.
Мы с тобой разберем азбуку команд, узнаем тайны переменных и потоков,
Научимся управлять файлами и процессами,
И все это мы сделаем не выходя из таинственного царства командной строки.
Терминал и командная строка
В общем и целом, терминал - это эмулятор, который отображает интерфейс командной строки, благодаря которому пользователь получает прямое управление операционной системой через текстовые команды.
Командная строка - это текстовый интерфейс, который позволяет пользователю вводить команды для управления операционной системой. Такой интерфейс может быть недоступным в графических средах, и для доступа к нему в этом случае и используется терминал.
Терминал также может работать в режиме полного экрана или в виде отдельного окна, что зависит от конкретного эмулятора и настроек системы.
Навигация по файловой системе
Начать можно с команды pwd, которая показывает текущий путь.
Для перехода в нужный каталог используйте команду cd.
Если вы не знаете пути, воспользуйтесь командой find.
Для копирования файлов используйте команду cp, а для создания символических ссылок – ln.
Чтобы сэкономить время, используйте автодополнение имен файлов с помощью клавиши Tab.
Помните, что в файловой системе Linux различаются права доступа к файлам и каталогам, поэтому при выполнении некоторых операций может потребоваться введение пароля суперпользователя.
Работа с файлами и папками
В Linux-системах управление файлами и папками осуществляется через командную строку. Это может показаться сложным, но на самом деле, простые команды позволяют выполнять все необходимые операции.
Команда `ls` отображает список файлов в текущем каталоге. Чтобы перейти в другой каталог, используйте команду `cd`, за которой следует путь к каталогу.
Для создания нового каталога используется команда `mkdir`, а для удаления каталога - `rmdir`. Копирование файлов можно выполнить с помощью команды `cp`, а перемещение - с помощью команды `mv`.
Для удаления файлов используется команда `rm`. Будьте осторожны при использовании этой команды, так как удаленные файлы нельзя будет восстановить.
Указание нового пути ввода
Использование конвейера
Конвейер соединяет команды, позволяя выход одной команды стать вводом для другой. Например, "grep -l "Bash" man bash | wc -l" возвращает количество страниц руководства Bash, содержащих "Bash".
Таблица перенаправления
| Символ | Направление | Описание |
| --- | --- | --- |
| < | Ввод | Получение данных из файла |
| >> | Дозапись | Добавление данных в конец файла |
Обработка текста и конвейеры в Linux
В Bash есть мощные инструменты для трансформации и манипуляции текстовыми данными.
Пайпы позволяют объединять команды в конвейер.
Это похоже на конвейерную ленту на заводе, где каждая команда выполняет свою часть задачи.
Таким образом можно выполнять сложные операции над текстовыми данными, не прибегая к созданию промежуточных файлов.
Команда | Назначение |
---|---|
cat | |
cut | Извлечение части строки |
grep | Поиск строк, соответствующих шаблону |
tr | Преобразование символов |
awk | Обработка полей в текстовом файле |
last | cut -d' ' -f1 | grep -v 'reboot' | uniq -c | sort -nr
Условные конструкции и циклы
Рассчитывать результат выполнения команд в зависимости от результата работы предыдущих команд или наличия файлов в системе можно с помощью условных конструкций - if, elif и else. С их помощью можно построить программу, которая при различных исходных условиях будет вести себя по-разному.
Циклическая обработка данных необходима в программах, где нужно неоднократно выполнить одни и те же действия - например, для обработки большого списка файлов.
В Bash есть несколько типов циклов: for и while. Первый позволяет обрабатывать элементы массива или диапазона, а второй - выполнять действия, пока не выполнится определенное условие.
С помощью условных конструкций и циклов можно написать любой сценарий Bash и автоматизировать рутинные задачи в терминале.
Условные конструкции
Условная конструкция if позволяет проверить, выполняется ли определенное условие. Если оно выполняется, выполняются команды в блоке if. Если нет - выполняются команды в блоке else (если он есть). Условие может быть любым выражением, возвращающим код завершения 0 (истина) или 1 (ложь).
Сравнение выполняется операторами == (равно), != (не равно), -gt (больше), -lt (меньше), -ge (больше или равно), -le (меньше или равно) и другими.
Циклы
Цикл for выполняет итерации по списку элементов. Элементы списка можно задать в явном виде или с помощью генератора диапазона.
Цикл while выполняет итерации до тех пор, пока условие возвращает код завершения 0 (истина).
Логика в терминале
В мире Linux есть своя логика. Здесь все операторы работают по строгим правилам, логические в том числе. В этом руководстве мы разберем азы логических и арифметических операций в терминале.
Арифметические операций
Операции производятся над числами и результатом будут числа. Самые простые - это сумма, вычитание, умножение и деление. Например:
$ echo $((3+4))
7
$ echo $((4-3))
1
$ echo $((5*3))
15
$ echo $((5/3))
1
Сравнения
Логические операторы сравнивают значения и результат - истина или ложь. Для проверки на равенство используем символ "=", а для проверки на неравенство - "!=".
$ echo $((3==3))
1
$ echo $((4!=4))
0
Операторы "и" и "или"
Оператор "и" (&&) вернет истину только если оба операнда - истина. Оператор "или" (||) вернет истину, если хотя бы один операнд истинный.
$ echo $((3 == 3 && 5 == 5))
1
$ echo $((3 == 3 || 5 != 5))
1
$ echo $((3 != 3 || 5 != 5))
0
## Конфигурирование командного пространства
Настройка внешнего вида и поведения терминала – это мощный инструмент, позволяющий сделать работу с командами приятнее и эффективнее. С помощью простых манипуляций вы сможете персонализировать среду под свои потребности.
Размер окна, шрифт, цвета и сочетания клавиш – вот лишь малая часть параметров, поддающихся настройке. Замените стандартные настройки на те, что подходят именно вам, и почувствуйте, как с комфортом растёт продуктивность.
И не забывайте про специализированные программы, такие как tmux, screen и byobu; они позволяют ещё больше гибкости в настройках и управлении терминалами.
В первую очередь, определитесь с внешним видом. Разрешение экрана, размер шрифта и цветовая схема – то, с чего стоит начать. Каждому элементу терминала (подсказки, заголовку и т.д.) присвойте свой цвет.
Затем, настройте сочетания клавиш. Часто используемые команды назначьте на удобные вам сочетания, чтобы ускорить работу. Это не только сэкономит время, но и добавит вашему процессу элегантности.
Расширенные функции:
Овладев базовыми принципами, пришло время заглянуть глубже в функционал оболочки. Расширенные фичи расширяют возможности по управлению файлами, автоматизации задач и использованию более сложных команд.
Например, алиасы - это сокращения, которые заменяют длинные команды, а функции - предварительно определенные блоки кода, упрощающие обработку данных.
А если возникла необходимость в более продвинутой логике, условные операторы и циклы позволяют контролировать выполнение команд в зависимости от заданных условий.
Вопрос-ответ:
Что такое Bash и для чего он используется?
Bash - это командный интерпретатор или оболочка, которая позволяет взаимодействовать с операционной системой Linux. Он предоставляет текстовый интерфейс для ввода команд, отображает результаты и обрабатывает ввод пользователя.
Как открыть терминал Bash в Linux?
Для открытия терминала Bash в большинстве дистрибутивов Linux можно использовать комбинацию клавиш Ctrl+Alt+T. Также можно открыть текстовый редактор (например, GNOME Terminal) и ввести команду "bash".
Как перенаправить вывод команды в файл или считать ввод из файла?
Для перенаправления вывода в файл используется символ ">" (например, "ls > список.txt"). Для чтения ввода из файла используется символ "<" (например, "wc < файл.txt").