Языки скриптов для linux

Содержание
  1. ИТ База знаний
  2. Полезно
  3. Навигация
  4. Серверные решения
  5. Телефония
  6. Корпоративные сети
  7. Учимся писать базовые скрипты в Unix и Linux
  8. Идентификация оболочки.
  9. Выбор оболочки
  10. Выполнение команд
  11. Добавление комментариев
  12. Делаем файл исполняемым
  13. Использование команды if
  14. Понятие переменных
  15. Запрос пользователя на ввод данных
  16. Использование аргументов командной строки
  17. Различные способы создания циклов
  18. Использование оператора case
  19. Реакция на ошибки
  20. Написание скриптов на языке BASH
  21. Автоматический выбор интерпретатора
  22. Shebang
  23. Варианты Shebang
  24. Пример добавления информации к скрипту
  25. Выбор языка для написания скриптов
  26. Использование Ruby или Python
  27. Использование Ruby
  28. Использование Python
  29. Запуск внешних программ в Bash
  30. Документация
  31. Известные особенности обработки строк в Bash
  32. Описание переменных
  33. Описание переменных. Пример
  34. Циклы
  35. Обход вывода приложения
  36. Условный оператор if
  37. Возвращаемое значение
  38. Проверка возвращаемого значения в Bash
  39. Приложение test
  40. Встроенная команда Bash [[
  41. Комбинирование проверок в test
  42. Строковые проверки команд test и [[
  43. Числовые проверки команд test и [[
  44. Файловые проверки команд test и [[
  45. Циклы while и until
  46. Пример цикла while
  47. Типы переменных в Bash
  48. Переменные окружения
  49. Позиционные переменные
  50. Базовое использование позиционных переменных
  51. Специальная обработка аргументов
  52. Проверка качества скриптов

ИТ База знаний

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Учимся писать базовые скрипты в Unix и Linux

Если вы еще не умеете писать скрипты в системах Unix и Linux, эта статья познакомит с основами написания скриптов.

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

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

Идентификация оболочки.

Сегодня в системах Unix и Linux есть несколько оболочек, которые вы можете использовать. Каждая оболочка — это интерпретатор команд. Он считывает команды и отправляет их ядру для обработки.

Bash является одной из самых популярных оболочек, но существуют также zsh , csh , tcsh и korn . Есть даже оболочка под названием fish , которая может быть особенно полезна новичкам в Linux благодаря полезным параметрам автозаполнения команд. Чтобы определить, какую оболочку вы используете, используйте эту команду:

Вы также можете определить свою основную оболочку, просмотрев файл /etc/passwd :

Один из способов определить, какие оболочки доступны в системе Linux, — это проверить файл /etc/shells .

На выводе видно, что доступно всего девять оболочек.

Какую оболочку выбрать пользователю во многом зависит от того, что он привык использовать, поскольку большая часть синтаксиса в скриптах не представляет команды, которые вы найдете в /bin , /us /bin или /usr/local/bin . Вместо этого они являются частью самой оболочки и называются «встроенными». Сюда входят команды, используемые для цикла (например, for и while ).

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

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

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

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

Выполнение команд

Любую команду, которую вы запускаете в командной строке Linux, можно запустить в скрипте, если он совместим с указанной оболочкой. Используйте свой любимый текстовый редактор и вводите нужные для исполнения команды. Вот очень простой скрипт, который выводит текущую дату в формате день-месяц-год. Скрипт имеет название today .

Чтобы запустить этот скрипт, выполните команду:

Добавление комментариев

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

Читайте также:  Драйвер принтера с центра обновления windows

Делаем файл исполняемым

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

Если скрипт не сделан как исполняемый, его все равно можно запустить с помощью символа . Это встроенная функция, которая «выполняет» (т. е. читает и запускает) скрипт.

Использование команды if

Команда if позволяет вам проверять условия или переменные. В примере ниже мы проверяем, запускается ли скрипт в пятницу.

Базовый синтаксис команды if — if value == other_value . Знак == выполняет сравнение, и необходимо убедиться, что оболочка видит по одному значению с каждой стороны оператора сравнения. По этой причине часто приходится заключать свои строки в кавычки.

Понятие переменных

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

Запрос пользователя на ввод данных

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

Человек, запускающий сценарий, увидит приглашение и введет ответ :

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

Чтобы использовать аргументы, которые пользователь вводит вместе с именем скрипта, необходимо знать, как их идентифицировать. Аргументам скрипта будут присвоены имена $1 , $2 и так далее. Для любого аргумента, который вы собираетесь использовать неоднократно, вы можете рассмотреть возможность присвоения этих значений более значимым именам переменных.

В этом случае мы проверяем, является ли первый предоставленный аргумент числовым, и закрываем скрипт, если это не так. Если ответ — число, то далее назначаем его переменной $loops , чтобы использовать позже в скрипте.

Еще одна полезная вещь, которую нужно сделать в скрипте, — это сначала проверить наличие аргументов. В противном случае синтаксис, подобный показанному выше, не сработает, потому что оболочка увидит выражение if [[! = 4 *]]; , что приведет к синтаксической ошибке.

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

Различные способы создания циклов

Есть несколько способов сделать цикл внутри скрипта. Используйте for , если вы хотите повторить действие заданное количество раз. Например:

Используйте while , если хотите выполнять какое-то действие, пока условие существует или не существует.

Использование оператора case

Операторы case позволяют вашим скриптам реагировать по-разному в зависимости от того, какие значения проверяются. В приведенном ниже скрипте используются разные команды для извлечения содержимого файла, предоставленного в качестве аргумента, путем определения типа файла.

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

Реакция на ошибки

Вы можете обнаруживать ошибки в скриптах и реагировать на них и тем самым избегать других ошибок. Хитрость заключается в том, чтобы проверять выходные коды после запуска команд. Если код выхода имеет значение, отличное от нуля, произошла ошибка. В этом скрипте проверяется, запущен ли Apache, но отправляем результат проверки в /dev/null . Затем проверяем, не равен ли код выхода нулю, поскольку это означает, что команда ps не получила ответа. Если код выхода не равен нулю, сценарий сообщает пользователю, что Apache не запущен.

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

Источник

Написание скриптов на языке BASH

Всего можно выделить 2 типа исполняемых файла:

  • Бинарные приложения, предназначенные для работы на текущем процессоре
  • Интерпретируемые приложения, включая скриптовые языки и интерпетируемые языки

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

Читайте также:  Вася диагност не видит usb адаптер windows 10

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

Автоматический выбор интерпретатора

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

В UNIX-мире есть механизм, позволяющий указать интерпретатор для запуска файла

  • Текстовому файлу должны быть выданы права на выполнение
  • В начале текстового файла может быть указана информация, по которой загрузчик программ, автоматически выберет интерпретатор

Shebang

Строка для выбора интерпретатора называется Shebang:

В случае, если в начале файла указана данная строка, то при его запуске загрузчик постарается найти интерпретатор и запустит интерпретатор с указанным файлом

Варианты Shebang

  • #!/bin/sh — запуск интерпретатора Bourne Shell или совместимого с ним.
  • #!/bin/bash — запуск файла с помощью интерпретатора Bash.
  • #!/usr/bin/python3 — запуск файла с помощью системного интерпретатора Python 3
  • #!/usr/bin/env ruby — запуск файла с помощью интерпретатора Ruby, поиск которого надо выполнять в PATH пользователя, вызывающего приложение
  • #!/bin/false — запретить выполнение файла через запуск, нужно например для файлов, предназначеных только для подключения к другим исполняемым скриптам

Путь к интерпретатору должен быть абсолютным, т.к. данный механизм по умолчанию не использует подсистему поиска по PATH. Если необходима функциональность по поиску интерпретатора, тогда следует использовать /usr/bin/env

Пример добавления информации к скрипту

Рассмотрим простейшее приложение на языке Bash:

Запишем его в файл /home/user/script.sh и дадим права на исполнение

Для запуска скрипта необходимо:

  • либо указать полный путь к исполнямому файлу в качестве команды
  • либо поместить файл в один из каталогов PATH

Выбор языка для написания скриптов

Исполняемые скрипты для выполнения административных задач в Linux можно писать на множестве языков: Python, Ruby, Perl, Bash и так далее

При выборе языка программирования необходимо учитывать множество факторов:

  • Сколько времени нужно будет поддерживать скрипт?
  • Кто будет поддерживать скрипт?
  • Насколько сложную задачу необходимо решать?
  • Сложность задачи состоит в последовательности вызова программ или в обработке данных?
  • Скрипт должен поддерживать работу на одной или нескольких платформах?

Использование Ruby или Python

Если задача требует сложных вычислений и её необходимо поддерживать достаточно долго, то рекомендуется использовать более продвинутые языки программирования

Использование Ruby

  • Для настройки систем есть специализированные проекты Chef и Puppet
  • Для выполнения действий над файлами можно использовать библиотеку FileUtils
  • Для запуска внешних процессов есть мощная библиотека open3
  • Для выполнения действий по сети есть библиотеки net-ssh и net-scp

Использование Python

  • Для настройки систем есть специализированные проекты Ansible и Salt
  • Для выполнения действий над файлами можно использовать библиотеку shutil
  • Для запуска внешних процессов есть библиотека Subprocess
  • Для выполнения действий по SSH есть библиотека paramiko

Запуск внешних программ в Bash

С базовым синтаксисом Bash мы уже знакомы

Bash выполняет каждую строку как отдельную команду, которую вводили в терминале

Документация

Наиболее полная книжка по Bash называется Advanced Bash Scripting Guide

Известные особенности обработки строк в Bash

  • Расширение путей: * , ? , [[:upper:]]
  • Расширение скобок:
  • Арифметическое расширение: $((5 + 10))
  • Расширение переменных: $
  • Замена команд: $(ls)

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

Описание переменных

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

Для получения доступа к значению переменной используйте $name

  • Пробелы вокруг знака равенства недопустимы
  • Если не указать значение, то переменная будет содержать нулевую строку
  • Декларирование переменных может происходить в рамках команд alias , declare , typeset , export , readonly , local
  • Для отмены значений переменной необходимо использовать unset name
  • В названии переменной можно использовать латинские символы, подчёркивания
  • В качестве значения может выступать любое строковое выражение, к которому будут применены все расширения

Описание переменных. Пример

Со знака # начинаются комментарии

Циклы

Для обхода набора значений удобно воспользоваться циклами

Обход вывода приложения

Циклы можно использовать для обработки вывода из приложения

Условный оператор if

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

Если последняя команда из списка в условии вернёт 0, тогда будут выполнены команды в then -списке, в противном случае будет протестированы команды из elif

Возвращаемое значение

Стандартное определение функции main на языке Си:

  • int argc — количество аргументов
  • char* argv[] — массив с аргументами
  • char** envp — массив с переменными окружения в формате КЛЮЧ=ЗНАЧЕНИЕ
  • int main , метод возвращает целое значение, обозначающее результат выполнения
    • 0 — программа выполнила все действия корректно
    • !=0 — во время работы программы возникли ошибки, некорректное завершение
Читайте также:  Мне пришел windows 10

Проверка возвращаемого значения в Bash

В BASH переменная ? позволяет узнать статус выполнения последней команды

Приложение test

Приложение позволяет проверить некоторые выражения и вернуть 1 или 0

Написанное выражение подвергается обработке со стороны BASH как обычная строка, а после передаётся для выполнения в приложение test

Данное приложение предназначено для использования в if-выражении:

Встроенная команда Bash [[

Данная команда является расширением приложения test и исправляет ряд его ограничений. Рекомендуется к использованию вместо приложения test

  • Внутри команды [[ ]] не происходит расширения строк
  • Можно использовать && , || внутри выражения
  • Легче группировать выражения с помощью (. )

Команду [[ следует использовать для сравнения строк и проверки файлов

Комбинирование проверок в test

Несколько проверок можно объединить с помощью && , || на уровне Bash:

Операторы && и || работают на уровне результатов работы приложения

Строковые проверки команд test и [[

Строковые проверки отличаются

[[ test Пример
> \> [[ a > b ]] ложь, a идёт раньше b
\ [[ az правда, a идёт раньше z
= , == = [[ a = a ]] правда, a равно a
!= != [[ a != b ]] правда, a не равно b
= , == нет [[ name = n* ]] правда, name начинается с n
=

нет [[ home =

^h+ ]] правда, home соответствует выражению

-z -z [[ -z $info ]] правда, если строка в $info нулевой длины
-n -n [[ -n $data ]] правда, если строка в $data ненулевой длины

Числовые проверки команд test и [[

Числовые проверки между test и [[ не отличаются

Проверка Пример
-gt [[ 5 -gt 10 ]] ложь, 5 меньше 10
-lt [[ 8 -lt 9 ]] правда, 8 меньше 9
-eq [[ 5 -eq 3 ]] ложь, 5 не равно 3
-ne [[ 5 -ne 3 ]] правда, 5 не равно 3
-ge [[ 3 -ge 3 ]] правда, 3 больше или равно 3
-le [[ 3 -le 8]] правда, 3 меньше или равно 8

Файловые проверки команд test и [[

Проверка Пример
-a [[ -a /tmp/data ]] правда, если файл существует
-d [[ -d /var/log ]] правда, если директория существует
-e [[ -e /run/info.pid ]] правда, если файл существует
-f [[ -f /tmp/test ]] правда, если существует и является файлом
-r [[ -r

/info ]] правда, если файл доступен на чтение -w [[ -w

/result ]] правда, если файл доступен на запись -x [[ -x

/bin/run ]] правда, если файл можно выполнять

Циклы while и until

Помимо итеративного for в Bash также есть бесконечные циклы while и utlit:

  • Цикл while будет выполнять свои действия пока условия в list-1 верны
  • Цикл until будет выполнять свои действия пока условия в list-1 неверны

Выйти из цикла можно с помощью break [n] Если передать число, тогда выход будет произведён из такого количества циклов

Для перехода к следующей итерации можно воспользоваться continue [n] Если передать число, то продолжение будет на соответствующем уровне вложенности

Пример цикла while

Типы переменных в Bash

Bash поддерживает следующие типы переменных:

  • Локальные переменные, которые видны внутри области видимости (файла, функции и т.д.)
  • Переменные окружения, которые видны детским процессам
  • Позиционные переменные

Переменные окружения

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

Позиционные переменные

В переменные $0 , $1 , $2 записываются аргументы скрипта

  • $0 содержит название скрипта
  • $1 содержит первый аргумент и т.д.
  • После 9 к аргументам необходимо обращаться $
  • $* и $@ позволяют обратиться сразу ко всем переменным
  • $# позволяет получить количество переданных аргументов

Базовое использование позиционных переменных

Специальная обработка аргументов

Команда shift производит “сдвиг” позиционных аргументов влево

Значение переменной $0 не изменяется

С помощью этой команды можно обойти все аргументы:

shift может сдвигать сразу на несколько позиций

Проверка качества скриптов

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

Для проверки Bash-кода на наличие проблем рекомендуется использовать статический анализатор кода ShellCheck

Для установки его в GNU/Debian необходимо от имени сперпользователя

Источник

Оцените статью