Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Цикл for

Цикл for в bash имеет два вида. Рассмотрим сначала классический вариант for. Общий вид следующий:

 

for переменная in последовательность значений

do

команды

done

 

Между элементами for и in задается переменная, которая по очереди принимает значение из последовательности значений заданной между in и do. Между do и done находятся команды которые выполняются каждый раз когда переменная меняет свое значение. Цикл прекращает работу когда переменная примет последнее значение из последовательности. Значения в последовательности задаются через пробел.

 

А вот практический пример:

#!/bin/bash

for i in 1 2 3 a b c

do

echo i=$i

done

 

Как вы помните переменные в bash не имеют типа поэтому в последовательности могут быть как цифры так и строки или символы.

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

igor@ubuntu:~/linux$./testfor.sh

i=1

i=2

i=3

i=a

i=b

i=c

 

Последовательность значений можно задавать разными способами. Явно - как в примере выше, или с помощью других переменных, или с помощью специальных команд.

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

#!/bin/bash

S="1 2 3 a b c"

for i in $S

do

echo i=$i

done

 

Результат будет таким же как и в первом примере.

 

Если необходимо задать последовательность чисел, то можно воспользоваться командой seq и механизмом подстановки. Команда seq возвращает на экран последовательность числовых значений. Синтаксис прост и будет понятен из примера ниже:

 

igor@ubuntu:~/linux$ seq 6

1

2

3

4

5

6

igor@ubuntu:~/linux$ seq 4 6

5

6

igor@ubuntu:~/linux$ seq 1 2 6

1

3

5

 

Используя механизм подстановки, а именно конструкцию $() получим следующий пример:

#!/bin/bash

for i in $(seq 2 2 10)

do

echo i=$i

done

 

Результат:

igor@ubuntu:~/linux$./testfor.sh i=2 i=4 i=6 i=8 i=10

 

Здесь хочу напомнить о двойных кавычках. Если взять конструкцию $(seq 2 2 10) в двойные кавычки, то результат возвращенный командой seq 2 2 10, а именно 2 4 6 8 10, будет интерпретирован как один элемент:

 

igor@ubuntu:~/linux$./testfor.sh i=2 4 6 8 10

 

Вернемся ко второму виду for. Часто в скриптах можно встретить так называемый С-подобный вариант for, которых используется для циклов на основе чисел. Рассмотрим сразу пример:

#!/bin/bash

for ((i=1;i<6;i++))

do

echo i=$i

done

 

Как видите, конструкция i in $(seq 5) в данном примере заменена на ((i=1;i<6;i++)). Какой из способов выбирать решать вам.




Дата добавления: 2014-12-18; просмотров: 29 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав