Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

9.2. Переменные

shell программы манипулируют с переменными. В этом пункте обсуждаются три типа переменных:

  • позиционные параметры;
  • специальные параметры;
  • именованные переменные.

9.2.1. Позиционные параметры

Позиционные параметры являются переменными в shell программе. Их значение устанавливается из аргументов, указанных в командной строке, которая вызывает программу. Позиционные параметры нумеруются и на них ссылка идет с помощью символа $: $1, $2, $3 и т.д.

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

	shell.prog pp1 pp2 pp3 pp4 pp5 pp6 pp7 pp8 pp9 <CR>

то позиционному параметру $1 в программе присваивается значение pp1, $2 - значение pp2 и т.д. во время вызова программы. Чтобы практически рассмотреть это замещение позиционных параметров, создайте файл pp. Затем введите команды echo в файл pp. В результате выполнения команды cat получим следующий вывод:

        $ cat pp<CR>
        echo The first positional parameter is: $1<CR>
        echo The second positional parameter is: $2<CR>
        echo The third positional parameter is: $3<CR>
        echo The fourth positional parameter is: $4<CR>
        $

Если вы выполните эту shell программу с аргументами one, two, three, four, то получите результат (но вначале нужно сделать shell программу pp исполняемой с помощью команды chmod):

        $ chmod u+x pp<CR>
        $
        $ pp one two three four<CR>
        echo The first positional parameter is: one
        echo The second positional parameter is: two
        echo The third positional parameter is: three
        echo The fourth positional parameter is: four
        $

Команда who перечисляет всех пользователей, в данный момент зарегистрированных в системе. Можем создать простую программу whoson, которая будет сообщать, работает ли в настоящий момент конкретный пользователь. Введем в файл whoson командную строку:

	who | grep $1<CR>

Команда who перечисляет всех текущих пользователей системы, а команда grep осуществляет поиск строки, содержащей значение, соответствующее позиционному параметру $1. Теперь подставим конкретное имя в качестве аргумента в файле whoson, например, sue. Когда вы зададите команду "whoson sue", shell программа заменит $1 на sue в вашей программе и выполнит ее в следующем виде:

	who | grep sue<CR>

Вывод будет следующим:

        $ whoson sue<CR>
        sue     tty26      Jan 24 13:35
        $

Если указанный пользователь sue не зарегистрирован в данный момент в системе, grep завершится неудачно и whoson не будет ничего выводить на экран.

shell позволяет указывать в командной строке до 128 аргументов, но ссылаться можно не более, чем на 9 позиционных параметров. В следующем пункте описан специальный параметр $*.

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

Когда вы обращаетесь к программе shell, специальный параметр $# содержит число аргументов, с которыми shell программа была вызвана. Это значение может использоваться в любом месте shell программы.

Например, создайте командную строку в файле get.num, сделайте файл исполняемым и запустите команду cat:

        $ cat get.num<CR>
        echo The number of arguments is: $#
        $

Программа просто отобразит число аргументов, с которыми она была вызвана.

Когда вы обращаететсь к shell программе специальный параметр $* содержит строку со всеми аргументами, с которыми программа была вызвана.

9.2.3. Именованные переменные

В shell программе вы можете использовать именованные переменные. Значение именованной переменной вы присваиваете сами следующим образом:

	name_variable=value<CR>

Обратите внимание, что ни слева ни справа от знака равенства нет пробелов.

В следующем примере var1 - это имя переменной, а myname - значение строки символов, которое присваивается переменной:

Пример.

	var1=myname<CR>

Знак $ используется перед именем переменной в shell программе для ссылки на значение этой переменной. Если взять предыдущий пример, то ссылка $var1 говорит shell, что нужно заменить на значение myname любую встретившуюся строку символов $var1.

Первый символ имени переменной должен быть буквой или символом подчеркивания. Имя переменной может состоять из букв, символов подчеркивания и цифр. Имена переменных не должны совпадать с именами shell команд. Также shell зарезервировано несколько имен переменных, которые вы не должны использовать для своих переменных. Ниже дано краткое описание этих зарезервированных имен переменных:
CDPATH - определяет путь поиска команды;
HOME - значение, используемое по умолчанию командой cd (собственный справочник);
IFS - определяет разделитель (обычно пробел, табуляция и возврат каретки);
LOGNAME - ваше регистрационное имя;
MAIL - имена файлов, которые содержат электронную почту;
PATH - определяет имя пути, используемое shell для нахождения команд;
PS1 - определяет первичную подсказку (по умолчанию $);
PS2 - определяет вторичную подсказку (по умолчанию >);
TERM - идентифицирует тип терминала. Значение этой переменной важно при работе с редактором vi;
TERMINFO - идентифицирует справочник, в котором находится информация о вашем терминале;
TZ - определяет зону времени (по умолчанию EST5EDT).

Значение этих переменных вы можете определить двумя способами. Первый, вы можете ввести:

	echo $variable_name 

Система распечатает значение переменной variable_name. Второй способ: вы можете воспользоваться командой env для распечатки значений всех определенных переменных в shell. Для этого введите команду env и система выдаст список всех имен переменных и их значения.

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

Если вы редактируете с помощью редактора vi, то знаете, что можно установить значения переменной TERM вводом следующей командной строки:

        TERM=terminal_name<CR>
        export TERM 

Это простейший способ присвоения значения переменной. Существует еще несколько способов присвоения:

  • использование команды read для присвоения ввода переменной;
  • перенаправление вывода команды в переменную с использованием команды замены со знаками слабого ударения (`...`);
  • присвоение позиционного параметра переменной.

9.2.4.1. Использование команды read

Общий формат команды read:

	read variable<CR>

Значение, присвоенное командой read переменной variable, будет заменять $variable где бы она не встречалась в программе пользователя. Если программа выполняет команду echo до команды read, то она сможет отобразить только:

	Type in ...

Команда read будет ждать до тех пор, пока вы не введете строку символов и нажмете клавишу <CR>, тем самым присваивая строку переменной.

Следующий пример покажет вам, как написать простую shell программу num.please, содержащую телефонные номера. Эта программа использует следующие команды:
echo - выдает подсказку для ввода фамилий клиентов;
read - присваивает вводимое значение переменной;
grep - просматривает файл list в поисках этой переменной.

Программа будет выглядеть следующим образом:

Пример.

        $ cat num.please<CR>
        echo Type in the list name:
        read name
        grep $name home/list
        $

Создайте файл list, содержащий несколько фамилий и номеров телефонов. И теперь запустите файл num.please.

В следующем примере приводится текст программы mknum, которая создает список. В программе mknum используется следующая последовательность команд:
echo - выдает подсказку для ввода имени клиента;
read - присваивает имя клиента переменной name;
echo - выдает подсказку для ввода номера телефона;
read - присваивает номер телефона переменной num;
echo - добавляет значение переменных name и num в файл list;

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

С помощью команды cat отобразите содержание программы mknum:

Пример.

        $ cat mknum<CR>
        echo Type in name
        read name
        echo Type in number
        read num
        echo $name $num >> list
        $ chmod u+x mknum<CR>
        $

9.2.4.2. Перенаправление вывода команды в переменную

Формат команды следующий:

	variable=command<CR>

Вывод команды становится значением переменной. Пример shell программы t, распечатывающей время:

        $ cat t<CR>
        time=`date | cut -c12-19`
        echo The time is: $time
        $

Сделайте файл исполняемым и получите программу, которая выдает время:

        $ chmod u+x t<CR>
        $ t<CR>
        The time is: 10:30
        $

9.2.4.3. Присвоение позиционного параметра переменной

Вы можете присвоить позиционный параметр именованному параметру следующим образом:

	var1=$1<CR>

В следующем примере приведена программа simp.p, которая присваивает позиционнный параметр переменной:

Пример.

        $ cat simp.p<CR>
        var1=$1
        echo $var1
        $

Также вы можете присвоить переменной вывод команды, которая использует позиционные параметры:

	person=`who | grep $1`<CR>

[ Назад | Оглавление | Далее ]










helloworld.ru © 2001-2021
Все права защищены