Присвоение значений переменным
Существует еще несколько способов присвоения значения переменной:
· использование команды read для присвоения ввода переменной;
· перенаправление вывода команды в переменную;
· присвоение позиционного параметра переменной.
Использование команды read
Общий формат команды read:
read variable<ENTER>
Значение, присвоенное командой read переменной variable, будет заменять $variable где бы она не встречалась в программе пользователя.
Команда read будет ждать до тех пор, пока вы не введете строку символов и нажмете клавишу <ENTER>, тем самым присваивая строку переменной.
Следующий пример покажет вам, как написать простую shell программу num.please, содержащую имена. Программа будет выглядеть следующим образом:
cat num.please<ENTER>
echo Введите имя:
Read name
grep $name home/list
Создайте файл list, содержащий несколько фамилий и номеров телефонов. И теперь запустите файл num.please. В следующем примере приводится текст программы mknum, которая создает список номеров телефонов и абонентов.
Если вы хотите, чтобы вывод команды echo добавлялся в конец списка, то вы должны использовать >>. Если вы будете использовать >, то список будет состоять из последнего номера телефона, который вы добавили.
С помощью команды cat:
cat mknum<ENTER>
отобразите содержание программы mknum:
Echo Введите имя
Read name
Echo Введите номер
Read num
echo $name $num >> list
Сделайте mknum выполняемой программой:
chmod u+x mknum<ENTER>
4.6. Арифметические операции: команда let
Команда let- это команда интерпретатора BASH shell, обеспечивающая выполнение операций над арифметическими величинами. С помощью этой команды можно сравнивать числовые значения или выполнять над ними арифметические операции, такие как сложение или умножение. Командаlet задается либо с помощью ключевого слова let, либо посредством двойных круглых скобок. Базовый формат команды включает ключевое слово let, за которым следуют два числовых значения, разделенных арифметическим оператором либо оператором сравнения:
$ letзначение1 оператор значение2
Следующий пример наглядно демонстрирует, как изменяется работа интерпретатора при использовании ключевого слова let.
$ T=2+3
$ echo $T
2+3
$ let T=2+3
$ echo $T
В shell-сценариях может использоваться любой из перечисленных в таблице 1 операторов.
Ключевое слово letможно использовать и без оператора присваивания.
$ let 2*7
Если в арифметическом выражении между операндами необходимо поместить пробелы, выражение следует заключить в кавычки. Аргументом команды letможет быть только одно арифметическое выражение, например: $ let "2V*V7"
Таблица 1
Арифметические операторы | Функции |
* | Умножение |
/ | Деление |
+ | Сложение |
- | Вычитание |
Логические операторы | Функции |
> | Больше чем |
< | Меньше чем |
>= | Больше либо равно |
<= | Меньше либо равно |
= | Равенство в выражениях |
!= | Не равно |
Конструкции языка программирования Shell
Язык программирования shell имеет несколько конструкций, которые придадут гибкость вашим программам:
· комментарии позволят описывать функции программы;
· команда exit позволяет завершать программу в нужной точке и использовать коды возврата;
· конструкции цикла for, while позволяют повторять группу команд в цикле;
· условные команды if и case выполняют группу команд, если выполнилось некоторое условие;
· команда break позволяет выполнить безусловный выход из цикла.
Комментарии
Чтобы в программе разместить комментарии, воспользуйтесь знаком #. Если знак # стоит после команды, то сама команда выполняется, а комментарий игнорируется. Формат строки комментария:
#comment<ENTER>
Циклы
Операторы цикла for и while позволяют выполнить команду или последовательность команд несколько раз.
Оператор for
Оператор for выполняет последовательность команд для каждого элемента списка. Он имеет формат:
forпеременная<ENTER>
in значения переменной<ENTER>
do<ENTER>
команда_1<ENTER>
…
последняя команда<ENTER>
done<ENTER>
Для каждой итерации цикла следующий элемент списка присваивается переменной, данной в операторе for. Ссылка на эту переменную может быть сделана в любом месте в командах внутри оператора do. При конструировании каждой секции команд вам необходимо убедиться, что каждому do соответствует done в конце цикла. Переменная может иметь любое имя. Например, если ваша переменная названа var, то ссылка в списке команд на $var сделает значение доступным. Если оператор in опущен, то значением для var будет набор аргументов, заданный в команде и доступный в специальном параметре $*. Список команд между ключевым словом do и done будет выполнен для каждого значения.
Когда команды будут выполнены для последнего элемента списка, программа будет выполнять строку ниже done.
Оператор while
Оператор цикла while использует 2 группы команд. Он будет выполнять последовательность команд во второй группе (список do ... done) до тех пор, пока последняя команда в первой группе (список while) возвращает состояние "истина", означающее, что выражение после do может быть выполнено.
Общий формат оператора цикла while:
while<ENTER>
команда_1<ENTER>
…
последняя команда<ENTER>
do<ENTER>
команда _1<ENTER>
…
последняя команда<ENTER>
done<ENTER>
Например, программа enter.name использует цикл while для ввода списка имен в файл. Программа состоит из следующих командных строк:
echo “Введите пожалуйста список имён<ENTER>”
echo “после завершения ввода нажмите <Ctrl+D>”
While read x
Do
echo $x>>xfile
Done
echo xfile содержит следующие имена:
Cat xfile
Их можно просмотреть, введя команду:
cat enter.name<ENTER>
Обратите внимание, что после завершения цикла программа выполняет команды ниже done.
После того, как цикл завершится, программа распечатает все имена, содержащиеся в xfile.