Программирование на BASH
Самое начало

Сценарий, является простым текстовым файлом, и может редактироваться любым текстовым редактором. При работе в терминале обычно могут использоваться следующие текстовые редакторы: vim, nano, emacs или mcedit.

Любой файл сценария начинается с комбинации символов '#!' в начале первой строки. После неё указывается полный путь к программе интерпретатору, которая должна использоваться для обработки данного сценария. В нашем случае выглядит это так:

#!/bin/bash

После того, как мы указали какую программу необходимо использовать для обработки сценария, можно писать команды, которые будут выполнены интерпретатором. В качестве команд сценария, помимо встроенных команд языка bash, могут быть использованы любые команды операционной системы, вызовы программ и других сценариев. Команды обычно пишутся по одной в строке, но их также можно писать и в одной строке, разделяя символами ';'. Для комментариев используется символ '#', всё что находится в строке правее его, будет игнорироваться интерпретатором, за исключением использования его в первой строке файла.

Команды

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

echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.
export отмечает аргументы как переменные для передачи в дочерние процессы среды
pwd выводит текущий рабочий каталог
return заставляет функцию оболочки выйти с указанным значением
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
unset вызывает уничтожение переменных оболочки
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
wait ждет выхода из дочернего процесса и сообщает выходное состояние.
kill посылает сигнал завершения процессу
exit выход из оболочки или завершение сценария
expr вывод значения выражения на стандартный вывод

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

Переменные

Язык bash довольно мощный. Важную часть представляют собой объявления переменных. Для переменных принято использовать буквы верхнего регистра, также можно использовать символы подчёркивания и цифры, но с цифры имя переменной начинаться не может. При объявлении переменной, необходимо сразу же присвоить её какое либо значение:

MY_TERM=vt100
COUNTER=0

Знак '=' используется как оператор присваивания, справа от него указыватеся новое значение переменной. Разделение на типы даных отсутствует, то есть все переменные являются строками. Впрочем, bash умеет интерпретировать целые числа со знаком.

Для того, чтобы извлечь значение переменной и использовать его где-либо в сценарии, перед её именем необходимо поставить знак '$'. То есть, если мы хотим вывести значение переменной TERM на экран, то с использованием команды echo это быдет выглядеть следующим образом:

echo $TERM

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

FILES=`/bin/ls -a /home/student`

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

#!/bin/bash
NAME=Stanislav
STR1="Name: $NAME"
STR2='Variable: $NAME'
echo $STR1
echo $STR2

на экране мы увидим следующее:

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

PATH_TO=/home/${USER}/docs

Помимо инициализируемых пользователем переменных, есть зарезервированные переменные оболочки:

$DIRSTACK - содержимое вершины стека каталогов
$EDITOR - текстовый редактор по умолчанию
$EUID - Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя
$UID - в отличие от предыдущего, содержит реальный идентификатор, который устанавливается только при логине
$FUNCNAME - имя текущей функции в скрипте.
$GROUPS - массив групп к которым принадлежит текущий пользователь
$HOME - домашний каталог пользователя
$HOSTNAME - ваш hostname
$HOSTTYPE - архитектура машины.
$OLDPWD - прежний рабочий каталог
$OSTYPE - тип ОС
$PATH - путь поиска программ
$PPID - идентификатор родительского процесса
$SECONDS - время работы скрипта или самой оболочки(в сек.)
$# - общее количество параметров переданных скрипту
$* - все аргументы переданыне скрипту(выводятся в строку)
$@ - тоже самое, что и предыдущий, но параметры выводятся в столбик
$! - PID последнего запущенного в фоне процесса
$$ - PID самого скрипта

Доступ к отдельному аргументу скрипта, возможен при обращении к переменным $0, $1, ... $N, где $0 - содержит имя файла сценария, а N - последний, N-ый параметр переданный скрипту.

Наверх

html counterсчетчик посетителей сайта

Автор: Бритвин Станислав Евгеньевич. e-mail: britvin.slawa@yandex.ru ВоГУ ФПМКТиФ группа ПМ-31, Вологда 2016г.