news
Serverspace в «Рейтинге провайдеров IaaS Enterprise 2023» от Market.CNews
KA
8 августа 2023
Обновлено 8 августа 2023

Основы Linux Bash. Руководство по написанию скриптов

Linux Сети

Введение

Bash является ценной утилитой, оболочкой и интерпретатором для решения современных и комплексных задач: ОС администрирования, как Linux и macOS. Его понятный синтаксис, тесная интеграция с операционной системой и эффективность работы с функциями, специфичными для оболочки, обеспечивают явные преимущества для конкретных случаев использования.

Преимущества Bash скриптинга

  • Оптимизированная автоматизация: скрипты Bash — это легкий и интуитивно понятный подход к автоматизации повторяющихся задач и выполнению обязанностей системного администратора. Скрипт выполняется достаточно быстро, оптимизируя такие задачи, как резервное копирование, ведение журналов и настройка пользователей;
  • Бесшовная интеграция с системой: являясь оболочкой по умолчанию в большинстве Unix-подобных систем, Bash легко интегрируется с базовой ОС. Такая тесная интеграция обеспечивает легкий доступ к системным утилитам, переменным окружения и системной информации, упрощая выполнение операций, связанных с системой;
  • Эффективность работы с командной строкой: bash представляет оболочку командной строки, что позволяет ему выполнять такие задачи, как работа с текстом, обработка файлов и навигация по каталогам. Поддержка пайпов, перенаправлений и других специфических для оболочки функций;
  • Быстрое создание прототипов и тестирование: благодаря простому синтаксису, при выполнении командной строки Bash позволяет быстро создавать прототипы и тестировать идеи и решения. Такая гибкость оказывается полезной для быстрых исправлений и временных скриптов;
  • Доступность для системных администраторов: скрипты Bash доступны системным администраторам, даже не обладающим обширными знаниями в области программирования. Такая доступность позволяет системным администраторам с легкостью создавать собственные решения и автоматизировать задачи;
  • Оптимальные встроенные команды оболочки: bash предоставляет встроенные, оптимизированные команды, что делает его эффективным для выполнения небольших и повторяющихся задач;
  • Переносимость на платформы: Хотя Bash в основном используется на Unix-подобных системах, он доступен на различных платформах, включая Linux, macOS и Windows (через Cygwin или Windows Subsystem for Linux). Такая переносимость позволяет использовать сценарии Bash в различных средах.

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

Требования к работе

  • Root-права;
  • Debian 11 или более поздняя версия;
  • Начальные знания о работе ОС;
  • Подключение к Интернету.

Включим машину

Мы будем работать на VPS сервере нашего провайдера Serverspace. На ней будет использоваться операционная система Debian 11 с оболочкой bash. Прежде всего, зайдите в панель управления Serverspace и выберите нужную платформу для работы:

Панель управления
Скриншот №1 — Панель управления

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

Цены
Скриншот №2 — Цены

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

ssh root@162.64.253.1
Вход
Скриншот №3 — Вход

Напоминание! Необходимо заменить IP-адрес и ввести пароль от учетной записи.

Создаем первый скрипт

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

apt install nano

Вы также можете использовать более простые и сложные текстовые редакторы, такие как: gedit, vim, Emacs и др. Выбирайте, что вам удобнее. Давайте создадим наш первый скрипт. Для этого необходимо найти путь к bash в вашей системе, по умолчанию это /bin/bash, но можно найти его и по команде:

cd / && which bash

Следующим шагом будет создание файла скрипта командой, приведенной ниже:

nano /etc/script.sh

Введите эти строки:

#!/bin/bash

echo "My first script in bash!"

Первый скрипт
Скриншот №4 — Первый скрипт

В первой строке мы указываем интерпретатор для скрипта, прописываем свой путь, как мы описали выше, но в 99% случаев путь будет по умолчанию. Строкой ниже мы видим команду echo, которая выводит на экран наш текст. Изменим права на исполняемый файл:

cd etc && chmod +x script.sh

Теперь вы можете запустить свой скрипт, указав путь к файлу или используя команду, приведенную ниже:

sh script.sh
Запуск скрипта
Скриншот №5 — Запуск скрипта

Отлично! Мы впервые написали скрипт, но посмотрим на более сложные и полезные детали процесса написания скриптов.

Аргументы

Существуют входные данные, которые необходимо обработать скрипту, обычно, вводимые пользователем или передаваемые другой утилитой, сервисом или скриптом. Для этого в языке программирования существует определение — аргументы или данные, необходимые для обработки алгоритмом. Рассмотрим это на примере:

Для этого необходимо создать новый файл и открыть его одной командой:

nano /etc/price.sh && chmod +x /etc/price.sh

Запишите скрипт ниже:

#!/bin/bash
echo "My suggested price is $1"

Пояснение: В этом скрипте мы используем аргумент и обозначаем его знаком $K, где K — это номер вводимого аргумента. При этом $0 всегда является именем выполняемого скрипта, $1, $2 и т.д. Это просто список вводимых данных. Давайте запустим его!

sh /etc/price.sh 4333$
Результат скрипта аргументов
Скриншот №6 — Результат скрипта аргументов

Вы можете заметить пустую часть, это произошло из-за того, что мы не предусмотрели ошибку и в скрипте баг! Давайте сделаем механизм проверки:

nano /etc/price.sh

И введите этот код:

#!/bin/bash

if  [ "$1" -z]; then
echo "You entering data don't accordance rule!"
exit 1
fi
echo "My suggested price is $1"

Пояснение: мы добавляем функцию проверки вводимых данных конструкцией if-then-else. Синтаксис if означает команду запуска условия, которую мы пишем и указываем фильтр для переменной. В данном случае мы используем опцию -z, которая означает, что поле пустое. Далее мы написали команду then, которая указывает на действие, если утверждение выше было истинным. В нашем случае мы выводим сообщение об ошибке и используем команду exit 1 — команду завершения программы с указанием ошибки. Запускаем и проверяем:

sh /etc/price.sh 44$ && sh /etc/price.sh
Система проверки
Скриншот №7 — Система проверки

Хорошо! Но если нам нужно использовать подготовленные данные в скрипте? Для этого у нас есть переменная!

Переменные

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

name="John" age=30

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

echo "Hello, $name!"

Значение переменной может быть переназначено, изменено в любой момент выполнения сценария:

count=5
echo "Current value of count: $count"
count=10
echo "New value of count: $count"

Чтение значения от пользователя: С помощью команды read можно прочитать значение от пользователя и присвоить его переменной:

read -p "Enter your price: " price

echo "Awwww, $price?"

Удаление переменной: Для удаления переменной используйте команду unset:

unset name

Экспорт переменной: Если необходимо сделать переменную доступной для подпроцессов, можно воспользоваться командой export:

export MY_VARIABLE="price"

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

Управляющие конструкции

В любом скрипте есть логический путь, по которому проходит информация, фильтруется, изменяет значение и выдает результат. Все это возможно благодаря управляющим конструкциям, добавляющим ветвления и возможность выбора. Существуют циклы, условные конструкции и т.д. Простой пример, который мы приводили выше, конструкция if-then-else. Она обычно используется для одного, двух или трех ветвлений и имеет структуру:

if [ condition ]; then
statement-1
elif [ condition-2 ]; then
statement-2
fi

В этом примере мы видим 3 ветви, но что делать, если у нас есть список условий и один параметр? Для этого можно использовать конструкцию switch-case. Все значения, входящие в наш параметр, сравниваются с другими в списке, поэтому выполняется действие в соответствии с ответом. Например:

read -p "What is machine you search for? " car
case "$car" in
"Volkswagen" )
price="3000$"
;;
"BMW" )
price="4000$"
;;
*)
price="we don't know"
esac
echo "You requesting cost of car: $price"

Введите это в файл, как мы делали ранее! И запустите его:

./etc/price.sh
Пример switch case
Скриншот №8 — Пример switch case

После запуска проведем проверку:

Проверка switch case
Скриншот №9 — Проверка switch case

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

Циклы

Мы можем использовать цикл for, который позволяет, например, последовательно итерировать определенную команду для каждого объекта:

cars=("Toyota" "Honda" "Ford" "BMW" "Tesla")
for ((i=0; i<${#cars[@]}; i++))
do
echo "Car $((i+1)): ${cars[i]}"
done

Этот код позволяет нам итерировать указанное значение определенное количество раз. Синтаксис i=0 указывает начальное значение, i<${#cars[@]} – условие, i++ – команда, если условие соответствует логическому значению true. Затем do — это команда, которую нужно выполнить после завершения условия, в нашем примере это echo, а done означает завершение цикла. Проведем тестирование:

Цикл for
Скриншот №10 — Цикл for

Цикл while в этом примере:

cars=("Toyota" "Honda" "Ford" "BMW" "Tesla")
count=1
while [ $count -le ${#cars[@]} ]
do
echo "Car $count: ${cars[$((count-1))]}"
((count++))
done

Вывод

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

Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
191028 Санкт-Петербург Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
700 300
ООО «ИТГЛОБАЛКОМ ЛАБС»
700 300

Вам также может быть интересно...