|
Цикл 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 | Поможем написать вашу работу | Нарушение авторских прав |