
- •4. Основы программирования на командном языке (sh)
- •4.1. Переменные Shell
- •4.2. Присваивание значений переменным
- •4.3. Вывод содержимого переменных
- •4.4. Специальные символы
- •4.4.1. Кавычки
- •4.4.2. Двойные кавычки
- •4.7. Построим простейшую Shell-процедуру (командный файл)
- •4.8. Специальные параметры интерпретатора команд
- •4.9. Простые условные операторы
- •4.9.1. And-if (&&) – Условное и
- •4.9.2. Or-if (||) – Условное или
- •4.10. Команда test
- •4.10.1. Cравнение строк
- •4.10.2. Cравнение чисел
- •4.10.3. Проверка состояния файла
- •4.10.4. Использование команды test в операторе if
- •4.11. Управляющие конструкции высокого уровня
- •4.11.1. Условный оператор (if)
- •4.12. Операторы цикла (for и while)
- •4.12.1. Оператор цикла for
- •Пример_1: Процедура print1 печатает (выводит в стандартный вывод) три файла, перечисленные в списке значений цикла for.
- •4.12.2. Оператор цикла while
- •4.13. Оператор выбора case
- •4.14. Арифметические операции с переменными Shell
- •4.15 Стандартные переменные Shell
- •4.16 Экспортирование переменных
- •4.17 Встроенные команды интерпретатора sh
- •4.18. Системные файлы
- •4.19. Запуск и режимы работы sh
4.3. Вывод содержимого переменных
Чтобы получить доступ к переменной, нужно непосредственно перед именем переменной поставить знак доллара ($):
%var=80
%echo $var
80
%
и еще пример:
%message="Hello"
%echo $message
Hello
%
Подстановка значений переменных. Всегда, когда интерпретатор командного языка встречает знак $, сопутствующий имени переменной, он подставляет содержимое этой переменной именно в то место, где она встречается.
%var=80
%echo The variable is $var
The variable is 80
Если попробовать вывести переменную, которой не было присвоено никакого значения, то будет выведена пустая строка.
%var=betta
%echo $betta
<Пустая строка>
%
Имя переменной можно заключить в фигурные скобки, тогда её выведенное значение будет сопровождаться символами, которые могут стоять за фигурными скобками.
%var="Glava"
%echo ${var}5
%Glava5
Использование переменных Shell. Переменные Shell удобно использовать в командах, например для сокращения длинного набора имени.
%file="/usr/export/lib/examples/memory.txt"
%cat $file
<Содержимое файла file>
Точно так же можно размещать в переменных Shell длинные имена каталогов:
%doc=/usr/export/lib/examples
и теперь можно быстро получить список файлов в этом каталоге:
%ls $doc
Еще пример:
определим переменную catalog, содержащую имя рабочего каталога:
%catalog=/new/home/dir/
Обратите внимание на символ '/' (слэш), завершающий имя каталога. Это позволяет выводить оглавление каталога и распечатывать содержимое файлов из этого каталога.
Вывод оглавление каталога:
%ls –l $catalog
<Оглавление каталога>
«Распечатка» файла:
%cat ${catalog}c.txt
Значение переменной Shell может быть присвоено другой его переменной:
%file=proba.txt
%save_file=$file
%echo $save_file
proba.txt
4.4. Специальные символы
4.4.1. Кавычки
Shell – уникальный язык по способу использования кавычек. Интерпретатор различает 4 символа, которые трактуются как кавычки:
двойные кавычки (");
апостроф (');
символ обратной наклонной черты (\);
обратный апостроф (`).
4.4.2. Двойные кавычки
Рассмотрим несколько примеров применения кавычек:
Пример_1: использование метасимвола в качестве аргумента команды
%echo *
proba.txt file1 doc
Здесь Shell заменит * на имена всех файлов в текущем каталоге.
Пример_2: метасимвол в кавычках
%echo "*"
*
В этом примере кавычки отменили специальное значение символа *.
Любой символ, который имеет специальное значение для Shell (* ? < > >>), заключенный в двойные кавычки, утрачивает свой специальный статус.
Пример_3: кавычки и обычные переменные
%message="Hello"
%echo $message
Hello
%echo "$message"
Hello
4.4.3. Апостроф
Когда переменная находится в апострофах, её значение НЕ подставляется в качестве результата.
%echo '$message'
$message
Сравните действие двойных и одинарных апострофов:
%var=Hello
%echo $var "$var" '$var'
Hello Hello $var
4.4.4. Обратные апострофы
Если некоторая команда заключена в обратные апострофы, Shell выполнит её и результаты поместит на то же место, где эта команда находится:
Пример_1:
%echo The date is `date`
The date is <дата>
Пример_2:
%echo Your current directory is `pwd`
Your current directory is /new/home/fomin
Пример_3:
%users=`who | wc –l`
%echo There are $users users logged in
There are 2 users logged in
4.6. Аргументы Shell-программы
Shell рассматривает командную строку следующим образом:
Командная строка состоит из «слов», разделенных пробелами. Первое слово интерпретируется как имя программы, остальные слова – это аргументы команды. Shell осуществляет поиск исполнимого файла (программы), имя которого совпадает с именем команды, вызывает его и передаёт ему все относящиеся к нему параметры.
Если исполнимый файл является Shell-процедурой (командным файлом), то интерпретатор будет просто читать файл и запускать из него команды.
В Shell-процедурах аргументы кодируются особым образом:
- первому аргументу соответствует переменная $1;
- второму - $2 и т.д. до $9.
Эти переменные называются позиционными т.к. их номера соответствуют номерам позиций аргументов. Обратите внимание на то, что всего существует 9 переменных, хранящих позиционные переменные. Как получить доступ к позиционным переменным, если их будет больше 9-ти, вы узнаете позже.