Полный цикл в digital

Скрипты в Linux

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

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

Простейший пример скрипта для командной оболочки Bash:

#!/bin/bash 
echo "Hello world"

Утилита echo выводит строку, переданную ей в параметре на экран. Первая строка особая, она задает программу которая будет выполнять команды. Мы можем создать скрипт на любом другом языке программирования и указать нужный интерпретатор, например на python:

#!/usr/bin/env python
print("Hello world")

Или на PHP:

#!/usr/bin/env php
echo "Hello world";

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

Флаг ничего не меняет в самом файле, только говорит системе что это не просто текстовый файл, а программа и ее нужно выполнять:

  1. Открыть файл
  2. Узнать интерпретатор
  3. Выполнить

Сначала давайте создадим файл сценария bash в редакторе nano:

nano test.sh

Затем напишем текст и сохранили файл, как показано ниже:

#!/bin/bash
echo "Тест пройден"

Сделаем файл исполняемым:

chmod ugo+x test.sh

Проверим является ли файл исполняемым или нет:

ls -l test.sh

Выполним файл:

./test.sh

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

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

Написание скриптов на Bash редко обходится без сохранения временных данных, а значит создания переменных. Без переменных не обходится ни один язык программирования и наш примитивный язык командной оболочки тоже.

Например, объявим переменную string:

string="Hello world"

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

Чтобы вывести значение переменной используется символ $:

echo $string

Модифицируем наш скрипт:

#!/bin/bash
string1="hello "
string2=world
string=$string1$string2
echo $string

И проверяем:

./test.sh

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

#!/bin/bash
string1="hello "
string2=world
string=$string1$string2\ and\ me
string3=$string1$string2" and me"
echo $string3

Проверяем:

./test.sh

Переменные

В переменные можно записать данные и результат выполнения утилит. Для этого используется такой синтаксис:

$(команда)

С помощью этой конструкции вывод команды будет перенаправлен прямо туда, откуда она была вызвана а не на экран. Утилита date возвращает текущую дату, эти команды эквивалентны:

date
echo $(date)

Напишем скрипт, где будет выводиться hello world и дата:

#!/bin/bash
string1="hello world "
string2=$(date)
string=$string1$string2
echo $string

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

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

Переменная с именем 1 содержит значение первого параметра, переменная с именем 2 содержит значение второго и так далее. Этот bash скрипт выведет значение первого параметра:

#!/bin/bash
echo $1

Конструкции if else

Создание bash скрипта было бы не настолько полезным без возможности анализировать определенные факторы и выполнять в ответ на них нужные действия.

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

if команда_условие then команда else команда fi

Команда проверяет код завершения команды условия, если 0 (успех) выполняет команду или несколько команд после слова then, если код завершения 1 выполняется блок else, параметр fi означает завершение блока команд.

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

[[ параметр1 оператор параметр2 ]]

Для сравнения используются уже привычные нам операторы. Если выражение верно, команда вернет 0, если нет 1.

#!/bin/bash
if [[ $1 > 2 ]]
then
echo $1" больше 2"
else
echo $1" меньше 2 или 2"
fi

Циклы

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

Первым рассмотрим цикл for:

for переменная in список do команда done

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

Переберем пять цифр:

#!/bin/bash
for index in 1 2 3 4 5
do
echo $index
done

Вторым рассмотрим цикл while, он выполняется пока команда условия возвращает код 0 (успех):

while команда условие do команда done
#!/bin/bash
index=1
while [[ $index < 5 ]]
do
echo $index
let "index=index+1"
done

Команда let просто выполняет указанную математическую операцию, в нашем случае увеличивает значение переменной на единицу.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг