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