Специальные типы переменных

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

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

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


( Читать дальше )

Переменные Bash не имеют типа

В отличие от большинства других языков программирования, Bash не производит разделения переменных по «типам». По сути, переменные Bash являются строковыми переменными, но, в зависимости от контекста, Bash допускает целочисленную арифметику с переменными. Определяющим фактором здесь служит содержимое переменных.

Пример 4-4. Целое число или строка?

#!/bin/bash
# int-or-string.sh: Целое число или строка?


( Читать дальше )

Присваивание значений переменным

=
оператор присваивания (пробельные символы до и после оператора — недопустимы)

Не путайте с операторами сравнения = и -eq!

Обратите внимание: символ = может использоваться как в качестве оператора присваивания, так и в качестве оператора сравнения, конкретная интерпретация зависит от контекста применения.

Пример 4-2. Простое присваивание

#!/bin/bash
# Явные переменные


( Читать дальше )

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

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


( Читать дальше )

Служебные символы, используемые в текстах сценариев. Часть 3

Ctl-H

Backspace («забой») — удаление предыдущего символа.

#!/bin/bash
# Вставка символа Ctl-H в строку.

a="^H^H" # Два символа Ctl-H (backspace).
echo «abcdef» # abcdef
echo -n «abcdef$a » # abcd f
# Пробел в конце ^ ^ двойной шаг назад.
echo -n «abcdef$a» # abcdef
# Пробела в конце нет backspace не работает (почему?).
# Результаты могут получиться совсем не те, что вы ожидаете.
echo; echo


( Читать дальше )

Служебные символы, используемые в текстах сценариев. Часть 2

<<
перенаправление ввода на встроенный документ.

<, >
Посимвольное ASCII-сравнение.

veg1=carrots
veg2=tomatoes

if [[ "$veg1" < "$veg2" ]]
then
echo «Не смотря на то, что в словаре слово $veg1 предшествует слову $veg2,»
echo «это никак не отражает мои кулинарные предпочтения.»
else
echo «Интересно. Каким словарем вы пользуетесь?»
fi

\<, \>
границы отдельных слов в регулярных выражениях.

bash$ grep '\<the\>' textfile

|


( Читать дальше )

Служебные символы, используемые в текстах сценариев. Часть 1

#
Комментарии. Строки, начинающиеся с символа # (за исключением комбинации #!) — являются комментариями.

# Эта строка — комментарий.

Комментарии могут располагаться и в конце строки с исполняемым кодом.

echo «Далее следует комментарий.» # Это комментарий.

Комментариям могут предшествовать пробелы (пробел, табуляция).

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



( Читать дальше )

Запуск сценария

Запустить сценарий можно командой sh scriptname [8] или bash scriptname. (Не рекомендуется запуск сценария командой sh <scriptname, поскольку это запрещает использование устройства стандартного ввода stdin в скрипте). Более удобный вариант — сделать файл скрипта исполняемым, командой chmod.

Это:
chmod 555 scriptname (выдача прав на чтение/исполнение любому пользователю в системе)

или
chmod +rx scriptname (выдача прав на чтение/исполнение любому пользователю в системе)

chmod u+rx scriptname (выдача прав на чтение/исполнение только «владельцу» скрипта)

После того, как вы сделаете файл сценария исполняемым, вы можете запустить его примерно такой командой ./scriptname. Если, при этом, текст сценария начинается с корректной сигнатуры («sha-bang»), то для его исполнения будет вызван соответствующий интерпретатор.

И наконец, завершив отладку сценария, вы можете поместить его в каталог /usr/local/bin (естественно, что для этого вы должны обладать правами root), чтобы сделать его доступным для себя и других пользователей системы. После этого сценарий можно вызвать, просто напечатав название файла в командной строке и нажав клавишу [ENTER].

Для начала о Sha-Bang

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

Пример. cleanup: Сценарий очистки лог-файлов в /var/log

# cleanup
# Для работы сценария требуются права root.

cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
echo "Лог-файлы очищены."



( Читать дальше )

Зачем необходимо знание языка Shell?

Знание языка командной оболочки является залогом успешного решения задач администрирования системы. Даже если вы не предполагаете заниматься написанием своих сценариев. Во время загрузки Linux выполняется целый ряд сценариев из /etc/rc.d, которые настраивают конфигурацию операционной системы и запускают различные сервисы, поэтому очень важно четко понимать эти скрипты и иметь достаточно знаний, чтобы вносить в них какие либо изменения.


( Читать дальше )