Переменные

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

#!/bin/bash

# Переменная

S1=Hello!

S2=”Hello World!”

 

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

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

echo $S1

echo $S2

 

В этом случае будет выполнена операция подстановки. Сначала конструкция $S2 будет заменена на Hello World, а затем будет выполнена команда echo Hello World.

Операция подстановки может быть выполнена не только в случае команды echo, но и в других командах, например командах сравнения. В этом случае рекомендуется брать конструкцию $S1 в двойные кавычки - “$S1″. Позже мы подробнее рассмотрим почему.

В качестве подстановки может быть использован и результат выполнения команды. Синтаксис похож - пишем символ $, а затем команду в круглых скобках без пробелов. Например: OF=/var/backup-$(date +%Y%m%d).tgz. В этом примере сначала будет выполнена команда в скобках - date +%Y%m%d, результат выполнения которой будет текущая дата в формате YYYYMMDD (например 20091217). Затем будет выполнена подставка, чтобы образовалась строка /var/backup-20091217.tgz и затем эта строка будет присвоена переменной OF.

Не забывайте, что если бы в строке были бы пробелы, то всю конструкцию следовало бы взять в двойные кавычки: “OF=/var/backup $(date +%Y%m%d).tgz”.

Переменные могут быть локальными и глобальными. Глобальные мы рассмотрели выше, а локальные описываются с помощью слова local.

Рассмотрим следующий пример:

#!/bin/bash

STR=Hello

function echoworld

{

local STR=World

echo $STR

}

echo $STR

echoworld

echo $STR

 

Результат выполнения команды будет следующий:

Hello
World
Hello

 

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