• Как научиться делать скрипты. Пишем скрипты в Linux (обучение на примерах). Переходим к более серьезному

    В этой статье:

    • Размещение PHP на HTML-странице
    • Комментарии в скриптах
    • Отображение текста
    • Переменные и константы в PHP
    • Оператор присваивания
    • О типах данных

    Для написания кода на PHP подходит любой текстовый редактор (например Notepad++).

    Размещение PHP на HTML-странице

    Код скрипта PHP может размещаться непосредственно на HTML-странице. Чтобы узнать, как это делается, давайте рассмотрим следующий простой пример:

    Это обычный HTML-документ

    С первого взгляда пример напоминает обычный файл HTML. Единственное новшество здесь –– конструкция .

    Все, что стоит между , интерпретируется как код на языке PHP. Здесь мы также видим пример использования команды echo –– одной из наиболее важных, часто используемых команд при программировании на этом языке. Команда echo применяется, когда необходимо что-либо написать в текущем документе. Так наша небольшая программа на PHP в HTML-документе выводит фразу “А это PHP”. Все что находится вне процессор РНР передает без изменения непосредственно на динамическую web-страницу.

    Вместо специального тега могут также использоваться теги :

    код на РНР

    Наш первый сценарий

    Тексты сцеариев (php-программ) должны храниться в файлах с раширением php.

    РНР-код состоит из отдельных операторов, каждый из которых завершается точкой с запятой (ее отсутствие вызовет сообщение об ошибке ).

    Первый скрипт на РНР (файл index.php) будет достаточно простым, но уже он продемонстрирует совместное использование HTML и РНР.

    Первый пример

    PHP-программа состоит из двух операторов присваивания, определения значения константы и вывода текста и текущей даты в окно браузера с помощью команды echo .

    Данный текст можно набрать в любом текстовом редакторе, например, в NotePad++, и сохранить под именем index.php. Следует убедиться, что файл сохранен как php-файл, в противном случае он не будет корректно обработан РНР.

    В случае локальной работы необходимо скопировать файл index.php в каталог документов web-сервера. Для Denver это home/localhost/www (если в настройках не указано иное). После чего можно переходить непосредственно к запуску скрипта.

    Для запуска скрипта index.php следует открыть web-браузер, а затем ввести в адресной строке полный путь к этому скрипту. В случае локальной установки адрес будет таким:

    Если все сделано правильно, на экране мы увидим:

    Файл styles.css (таблица стилей):

    /* Стили для отображения содержимого страницы */ * { margin: 0; padding: 0; } body { font-family: Verdana, Arial, sans-serif; color: #14556b; background-color: #f2f2f2; margin: 20px; } h3, p { margin: 6px 0; /* Поля заголовков и абзацев */ }

    Прямо из браузера мы можем просмотреть код этой странички, сформированный web-сервером:

    Таким образом, имя переменной заменяется ее значением, которое помещается на то же место , где в программе стояло имя этой переменной.

    Итак, PHP-файлы обычно представляют собой смесь HTML, CSS и РНР. При этом РНР-код всегда заключается внутри конструкции . Web-сервер посылает HTML-код браузеру без изменения. РНР-код выполняется, и если он формирует теги и какой-либо текст для отображения, этот текст вставляется на то место , где размещался РНР-код. Браузер интерпретирует HTML-теги страницы и отображает результат на экране.

    PHP-код может располагаться в произвольном месте и многократно включаться в текст скрипта. С его помощью можно также формировать и HTML-теги, что видно из нашего примера.

    Комментарии в скриптах

    В РНР существует три типа комментариев. Первый позволяет располагать комментарии в нескольких строках, начиная их символами /* (записываются без пробела) и заканчивая символами */, например:

    Следует иметь ввиду, что вложенные комментарии записывать нельзя .

    Многострочные комментарии могут оказаться полезными там, где надо вставить значительный объем текста. Кроме того, распространенным приемом при отладке программы является заключение части кода в комментарий (чтобы предотвратить его выполнение).

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

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

    Отображение текста

    Оператор echo , который предназначен для отображения произвольного текста на web-странице, является, пожалуй, наиболее употребительным оператором РНР. В простейшем случае после echo следует поместить одну строку в кавычках. Текст может быть заключен как в двойные кавычки, так и в простые кавычки (апострофы ). Для отображения чисел кавычки необязательны, например:

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

    При необходимости длинная строка может быть размещена на нескольких строках в тексте скрипта, например:

    Отдельные строки могут объединяться при помощи оператора сцепления «.» –– точка. В результате образуется единая строка, которая передается оператору echo. Например:

    что эквивалентно

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

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

    Отображение большого текста

    При использовании echo для отображения большого объема текста его можно записать так: вначале ставим символы .

    Переменные, оператор присваивания

    Как и в любом языке программирования, переменные предназначены для хранения данных. В РНР имена переменных всегда начинаются со знака доллара $, далее следует буква или знак подчеркивания, после которого может следовать произвольное количество букв, цифр или знаков подчеркивания. Следует помнить, что в именах переменных большие буквы и малые буквы различаются. Например, $var и $Var –– это разные переменные.

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

    Переменная существует до тех пор, пока выполняется программа.

    Для присвоения значения переменной в РНР используется оператор присваивания , обозначаемый знаком равенства =. Ниже приведены примеры операторов присваивания:

    $ternperature = 24;

    $number_of_earths = 1;

    $pi = 3.1415926535;

    $message = “Доброе утро!”;

    Обратим внимание, что одним переменным присвоены числа, а другим - строки.

    Задание . Вывести все значения этих переменных в браузер: (1) каждое значение –– в новой строке; (2) –– все значения –– в одной строке.

    Константы

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

    Для описания константы используется функция define, которой передается имя константы и ее значение. Существует соглашение, по которому имена констант всегда пишутся в верхнем регистре (большими буквами), например:

    define (“PI”, 3.1415926535);

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

    Константам нельзя давать имена, которые являются служебными словами языка РНР (так как перед именем константы не ставится знак доллара).

    Зарезервированные (служебные) слова РНР:

    and array as break default
    die do echo endif endswitch
    endwhile global if include print
    require eval lnclude_onc e require_once return
    case сfunction class const continue
    declare else elseif empty enddeclare
    endfor endforeach exception exit extends
    for foreach function isset list
    new old_function or php_user_filter static
    switch unset use while xor

    В языке РНР определено множество встроенных констант, которые можно использовать в сценариях. Эти константы начинаются с двух символов подчеркивания и заканчиваются тоже двумя символами подчеркивания. Например:

    __CLASS__ __FILE__ __FUNCTION__ __LINE__ __METHOD__

    Прерывание выполнения сценария

    Наиболее часто для останова выполнения сценария применяется функция exit (). Другой полезной функцией является die (“Сообщение”), которая позволяет также вывести сообщение об ошибке. Это позволяет сообщить пользователю причину, по которой сценарий завершился неудачей.

    Уничтожение переменной

    Иногда требуется принудительно уничтожить переменную. Для этого предназначена функция unset().

    Если попробовать выполнить оператор echo “$variable” после вызова функции unset , то мы получим сообщение об ошибке –– переменная $variable больше не будет существовать.

    Можно одновременно уничтожить несколько переменных:

    unset($variable, $name);

    Следующий текст при первом чтении можно пропустить

    Типы данных

    В языке РНР тип переменной определяется автоматически при создании переменной на основе ее значения. Тем не менее, следует иметь представление о типах данных, которые могут использоваться. Всего их восемь:

    • Логический тип, содержит значения TRUE или FALSE.
    • Целое число.
    • Вещественное число.
    • Текст произвольной длины.
    • Массив.
    • Объект.
    • Ресурс (например, файл).
    • NULL Значение NULL.

    Например:

    $variable = TRUE;

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

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

    $int_variable = (integer) $variable;

    $float_variable = (float) $variable;

    $string_jyariable = (string) $variable;

    При преобразовании в логический тип boolean, следующие значения преобразуются в значение FALSE.

    • Целое число 0.
    • Вещественное число 0.0.
    • Пустая строка и строка “0”.
    • Массив с нулевым количеством элементов.
    • Объект, не имеющий свойств.
    • Специальный тип NULL.

    При преобразовании к типу целых значений другие типы преобразуются так:

    • Логическое FALSE преобразуется в целое число 0, логическое TRUE преобразуется в целое число 1.
    • Вещественные числа округляются в меньшую сторону. При преобразовании в вещественное число сперва осуществляется преобразование в целочисленное значение.

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

    Любые другие значения, включая все ресурсы, преобразуются в TRUE.

    Итоги

    Язык РНР предназначен для создания динамических web-страниц.

    • Код РНР заключается между тегами .
    • Оператор echo предназначен для отображения текста.
    • Имеется возможность включать в код РНР большие блоки текста
    • В РНР используются три вида комментариев: /* … */, // и #.
    • Имя переменной предваряется знаком доллара $, начинается с буквы или знака подчеркивания, после которого может следовать произвольное количество букв, цифр или знаков подчеркивания.
    (учебный курс для начинающих)

    ВВЕДЕНИЕ

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

    То, чем сказано выше подкрепляется результатами проделанной работы на страницах сайта:
    150 скриптов , Ноу-Нау , изучением учебных дисциплин с тест-картами контроля и обучения.

    Задача настоящего курса - это с помощью разных методик: пассивных (для ленивых, занятых), активных, творческих - научиться писать скрипты.

    Начальное обучение:
    - чтение (знакомство) со справочной (help) информацией,
    - простая механическая "набивка" тестов (листингов) скриптов - такая форма освоения написания скриптов полезна и ее не следует избегать.
    - отладка набранных текстов скриптов - здесь уже придется проявить терпение, настойчивость и пытливость к тому, чтобы скрипт у вас "заработал".
    - анализ действующих скриптов - в тест-картах обучения и контроля: с помощью вопросов сделать анализ - что делает скрипт.
    - написание скрипта не механически, а по поставленной задаче,
    - и наконец, написание личного скрипта или скриптов, - это уже будет высший пилотаж и, если вы это сделали, то можете скрипт смело подавать на конкурс.

    С чего начинать писать скрипты?

    Во-первых, разберемся, что такое вообще скрипт?
    Скрипт - это сценарий (диалог, макрокоманда) .

    Сценарий включает всё: и задание входных и выходных параметров, выполнения действия (диалог), просмотр информации в цифровом и графическом видах, звуковое и видео-сопровождение, объединенные одним словом – в мультимедиа и т.д.

    Как создавать скрипты?

    Существует множество программ, с помощью которых можно писать скрипты, причем они с одним общим свойством - они пишутся для Интернета. Работа же с Интернетом (просмотр Web-страниц и т.д) осуществляется броузером - программой, пригодной для просмотра HTML-файлов. Таких программ много, но самая распространенная Microsoft Internet Explorer - она стоит на каждом компьютере и поэтому о других начинающему знать не надо. Другое важное свойство броузеров, что они могут не только просмотреть HTML-файлы, но и производить их отладку, причем не в Интернете, а локально за компьютером, не подключенном к Интернет.

    Самая простая страница (считай самый простой скрипт) создается помощью система HTML, которая есть не что иное, как основанная на тексте, кодовая система, используемая для того, чтобы сообщить броузеру (в нашем случае Internet Explorer) каким образом следует отображать информацию. Есть много готовых систем, позволяющих создавать HTML-файлы, в которые пользователю, в принципе, не надо и влезать. Однако, чтобы работать с JavaSсript - где без написание сценариев уже не обойтись - умение работать с текстом, созданием таблиц, размещением в них других таблиц, входных и выходных переменных, формирование кнопок "Выполнить", "Изобразить" и т.д. - знание элементарных кодов HTML и элементарное умение работать с ними необходимо. При изучение для этого, в принципе, достаточно одного урока – потом используйте Help .

    Однако для написания же полноценных скриптов, требуется что-то еще.
    И этим «что-то» еще является полноценная программа написания скриптов JavaScript , без которой невозможно создать скрипт (считай- и Web-страницу). Здесь уже необходимы знаниям и умения по всей программе. Написано огромное множество скриптов, к сожалению все они для Web -страниц в чистом виде, и почти нет для инженерных, художественно-творческих и тем более бытовых.
    Правда, готовые скрипты можно использовать и в качестве шаблонов, или какой-то части вашего скрипта, но все это требует корректировки, на которую уйдет больше времени, чем на написание нового скрипта.
    Изучение JavaSript является не сложным делом и даже начинающие программисты смогут объединить вместе несколько сценариев, способных поразить не только друзей, но и вас самих.

    Графика

    Можно было бы не ставить вопрос о том, как научиться писать скрипты. В Интернете
    и на прилавках магазинов представлено огромное количество книг, пособий и программ, CD-дисков - если бы не их слабое место - там нет (или почти нет) возможности работать с векторной графикой!
    Причина в том, что векторная графика с одной стороны еще не под силу Интернету, а с другой - прикладные программы с векторной графикой ориентированы на профессиональные задачи проектирования и изготовления, еще не решают задачи, которые ставит Интернет и, в частности, скрипт-программирования.
    Продолжение следует…

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

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

    Скрипт или как его еще называют - сценарий, это последовательность команд, которые по очереди считывает и выполняет программа-интерпретатор, в нашем случае это программа командной строки - 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, чтобы система могла выполнить скрипт, нужно установить на файл с ним флаг исполняемый.

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

    Чтобы выполните:

    chmod ugo+x файл_скрипта

    Теперь выполняем нашу небольшую первую программу:

    ./файл_скрипта

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

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

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

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

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

    string="Hello world"

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

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

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

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

    И проверяем:

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

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

    Проверяем:

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

    Переменные и вывод команд

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

    $(команда )

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

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

    string1="hello world "
    string2=$(date)

    string=$string1$string2

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

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

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

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

    !/bin/bash
    echo $1

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

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

    В 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.

    Например, переберем пять цифр:

    for index in 1 2 3 4 5
    do
    echo $index
    done

    Или вы можете перечислить все файлы из текущей директории:

    for file in $(ls -l); do echo "$file"; done

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

    Второй цикл, который мы рассмотрим - это цикл while, он выполняется пока команда условия возвращает код 0, успех. Рассмотрим синтаксис:

    while команда условие
    do
    команда
    done

    Рассмотрим пример:

    !/bin/bash
    index=1
    while [[ $index < 5 ]]
    do
    echo $index
    let "index=index+1"
    done

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

    Хотелось бы отметить еще кое-что. Такие конструкции, как while, for, if рассчитаны на запись в несколько строк, и если вы попытаетесь их записать в одну строку, то получите ошибку. Но тем не менее это возможно, для этого там, где должен быть перевод строки ставьте точку с запятой ";". Например, предыдущий цикл можно было выполнить в виде одной строки:

    index=1; while [[ $index < 5 ]]; do echo $index; let "index=index+1"; done;

    Все очень просто я пытался не усложнять статью дополнительными терминами и возможностями bash, только самое основное. В некоторых случаях, возможно, вам понадобиться сделать gui для bash скрипта , тогда вы можете использовать такие программы как zenity или kdialog, с помощью них очень удобно выводить сообщения пользователю и даже запрашивать у него информацию.

    Выводы

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

    Пишем скрипты в Linux (обучение на примерах)

    ———————————————————————————-

    1. Введение

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

    Зачем нужны скрипты
    Во-первых, администрирование linux-сервера в той или иной степени сводится к систематическому выполнению одних и тех же команд. Причем не обязательно, чтобы эти команды выполнял человек. Их можно запрограммировать на выполнение машиной.
    Во-вторых, даже просто выполнение обычной задачи, которая (вдруг) составляет 20-1000… однообразных операций ГОРАЗДО проще реализовать в скрипте.

    Что такое скрипт
    Скрипт — набор инструкций, которые должен в определенном порядке и в определенное время выполнить компьютер. Инструкциями могут быть как внутренние команды оболочки (циклы, условия, обработка текстовой информации, работа с переменными окружения и прочее), так и любая программа, выполняемая нами в консоли с необходимыми параметрами.

    Как писать скрипт
    В нашем случае скрипт будет представлять из себя текстовый файл с атрибутами выполнения. Если файл сценария начинается с последовательности #!, которая в мире UNIX называется sha-bang, то это указывает системе какой интерпретатор следует использовать для исполнения сценария. Если это трудно понять, то просто запомните, что все скрипты мы будем начинать писать именно со строчки #!/bin/bash или #!/bin/sh, а далее пойдут команды и комментарии к ним.

    Напутствие
    Я Вам искренне советую писать как можно больше комментариев чуть ли ни к каждой строчке в скрипте. Пройдет время и Вам понадобится изменить или модернизировать написанный когда-то скрипт. Если не помнишь или не понимаешь, что написано в скрипте, то становится сложно его изменять, проще писать с нуля.

    Какие скрипты могут нам понадобиться:

      устанавливающий правила файервола при загрузке системы.
      выполняющий backup настроек и данных.
      добавляющий почтовые ящики в почтовый сервер (точнее в базу mysql)
      запускающий в определенное время (лучше каждую ночь) программу, которая сканирует логи прокси-сервера и выдает удобный web-отчет по количеству скачанного трафика.
      отправляющий нам на почту информацию о том, что кто-то получил доступ к нашему серверу по ssh, время подключения и адрес клиента.

    О методике написания скриптов
    Создаем текстовый файл, редактируем его, устанавливаем права на выполнение, запускаем, смотрим ошибки, исправляем, запускаем, смотрим ошибки…
    Когда все вылизано и работает правильно, ставим его в автозагрузку либо в планировщик на определенное время.

    ———————————————————————————-

    2. Обучение написанию сценариев на внутреннем языке BASH
    оригинал: https://www.linuxconfig.org/Bash_scripting_Tutorial

    Это руководство предполагает отсутствие предварительных знаний о методике написания сценариев (далее скриптов) с помощью внутреннего языка Bash. С помощью данного руководства вы обнаружите в скором времени, что написание скриптов очень простая задача. Давайте начнем наше обучение с простого сценария, выполняющего вывод строки «Hello World!» (в перев. с англ. — Всем привет!)

    1. Сценарий «Всем привет»
    Вот ваш первый пример bash-скрипта:

    #!/bin/bash
    echo «Hello World»

    Переходим в директорию, содержащую наш файл hello_world.sh и делаем его исполняемым:

    Код: Выделить всё $ chmod +x hello_world.sh

    Запускаем скрипт на выполнение

    Код: Выделить всё $ ./hello_world.sh

    2. Простой архивирующий bash-скрипт

    #!/bin/bash
    tar -czf myhome_directory.tar.gz /home/user

    Код: Выделить всё $ ./backup.sh

    $ du -sh myhome_directory.tar.gz
    41M myhome_directory.tar.gz

    3. Работа с переменными
    В данном примере мы объявляем простую переменную и выводим её на экран с помощью команды echo

    #!/bin/bash
    STRING=»HELLO WORLD!!!»
    echo $STRING

    Код: Выделить всё $ ./hello_world.sh
    HELLO WORLD!!!

    Наш архивирующий скрипт с переменными:

    #!/bin/bash
    OF=myhome_directory_$(date +%Y%m%d).tar.gz
    IF=/home/user
    tar -czf $OF $IF

    Код: Выделить всё $ ./backup.sh
    tar: Removing leading "\" from member names
    $ du -sh *tar.gz
    41M myhome_directory_20100123.tar.gz

    3.1 Глобальные и локальные переменные

    #!/bin/bash
    # Объявляем глобальную переменную
    # Такая переменная может использоваться в любом месте этого скрипта
    VAR=»global variable»
    function bash {
    # Объявляем локальную переменную
    # Такая переменная действительна только для функции, в которой её объявили
    local VAR=»local variable»
    echo $VAR
    }
    echo $VAR
    bash
    # Обратите внимание, что глобальная переменная не изменилась
    echo $VAR

    Код: Выделить всё $ ./variables.sh
    global variable
    local variable
    global variable

    4. Передаем аргументы в скрипт

    #!/bin/bash
    # Используйте предопределенные переменные для доступа к аргументам
    # Выводим аргументы на экран
    echo $1 $2 $3 ‘ -> echo $1 $2 $3’

    #Мы так же можем получить доступ к аргументам через специальный массив args=(«$@»)
    # Выводим аргументы на экран
    echo ${args} ${args} ${args} ‘ -> args=(«$@»); echo ${args} ${args} ${args}’

    # Используйте переменную $@ для вывода всех аргументов сразу
    echo $@ ‘ -> echo $@’

    Используйте переменную $# для вывода количества переданный в скрипт аргументов
    echo Number of arguments passed: $# ‘ -> echo Number of arguments passed: $#’

    Код: Выделить всё $ ./arguments.sh Bash Scripting Tutorial
    Bash Scripting Tutorial -> echo $1 $2 $3
    Bash Scripting Tutorial -> args=("$@"); echo ${args} ${args} ${args}
    Bash Scripting Tutorial -> echo $@
    Number of arguments passed: 3 -> echo Number of arguments passed: $#

    5. Выполнение в скрипте команд оболочки

    #!/bin/bash
    # используйте обратные кавычки » ` ` » для выполнения команды оболочки
    echo `uname -o`
    # теперь попробуем без кавычек
    echo uname -o

    Код: Выделить всё $ uname -o
    GNU/Linux
    $ ./bash_backtricks.sh
    GNU/Linux
    uname -o

    Как видим, во втором случае вывелась сама команда, а не результат её выполнения

    6. Читаем пользовательский ввод (интерактивность)

    #!/bin/bash
    echo -e «Hi, please type the word: \c »
    read word
    echo «The word you entered is: $word»
    echo -e «Can you please enter two words? »
    read word1 word2
    echo «Here is your input: \»$word1\» \»$word2\»»
    echo -e «How do you feel about bash scripting? »
    # read command now stores a reply into the default build-in variable $REPLY
    read
    echo «You said $REPLY, I’m glad to hear that! »
    echo -e «What are your favorite colours ? »
    # -a makes read command to read into an array
    read -a colours
    echo «My favorite colours are also ${colours}, ${colours} and ${colours}:-)»

    Код: Выделить всё $ ./read.sh
    Hi, please type the word: something
    The word you entered is: something
    Can you please enter two words?
    Debian Linux
    Here is your input: "Debian" "Linux"
    How do you feel about bash scripting?
    good
    You said good, I"m glad to hear that!
    What are your favorite colours ?
    blue green black
    My favorite colours are also blue, green and black:-)

    7. Использование ловушки

    #!/bin/bash
    # объявляем ловушку
    trap bashtrap INT
    # очищаем экран
    clear;
    # функция ловушки выполняется, когда пользователь нажимает CTRL-C:
    # На экран будет выводиться => Executing bash trap subrutine !
    # но скрипт будет продолжать выполняться
    bashtrap()
    {
    echo «CTRL+C Detected !…executing bash trap !»
    }
    # скрипт будет считать до 10
    for a in `seq 1 10`; do
    echo «$a/10 to Exit.»
    sleep 1;
    done
    echo «Exit Bash Trap Example!!!»

    Код: Выделить всё $ ./trap.sh
    1/10
    2/10
    3/10
    4/10
    5/10
    6/10

    7/10
    8/10
    9/10
    CTRL+C Detected !...executing bash trap !
    10/10
    Exit Bash Trap Example!!!

    Как видим, сочетание клавишь Ctrl-C не остановило выполнение скрипта.

    8. Массивы
    8.1 Объявляем простой массив

    #!/bin/bash
    # Объявляем простой массив с 4 элементами
    ARRAY=(‘Debian Linux’ ‘Redhat Linux’ Ubuntu Linux)
    # Получаем количество элементов в массиве
    ELEMENTS=${#ARRAY[@]}

    # выводим в цикле каждый элемент массива
    for ((i=0;i