Циклы FOR и операторы WHILE

Введение в Bash-скриптинг

Alex Scriven

Data Scientist

Базовая структура цикла FOR

Python:

for x in range(3):
    print(x)
0
1
2

R:

for (x in seq(3)){
    print(x)
}
[1] 1
[1] 2
[1] 3
Введение в Bash-скриптинг

Цикл FOR в Bash

В Bash базовая структура аналогична:

for x in 1 2 3

do echo $x done
1
2
3
Введение в Bash-скриптинг

Числовые диапазоны в цикле FOR

В Bash есть удобный способ задать числовой диапазон — «расширение фигурных скобок»:

  • {START..STOP..INCREMENT}
for x in {1..5..2}

do echo $x done
1
3
5
Введение в Bash-скриптинг

Синтаксис трёх выражений в цикле FOR

Ещё один распространённый способ записи циклов FOR — синтаксис «трёх выражений».

  • Три выражения заключаются в двойные скобки
  • Первое выражение — начальное (x=2)
  • Среднее выражение — условие завершения (x<=4)
  • Последнее выражение — шаг увеличения (или уменьшения) (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Введение в Bash-скриптинг

Глобальные подстановки

Bash также позволяет использовать в цикле шаблонные подстановки с символом * — например, для файлов в каталоге.

Предположим, в папке /books находятся два текстовых документа:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Введение в Bash-скриптинг

Подоболочка: возвращаемся к теме

Помните создание подоболочки с помощью нотации $()?

Её можно использовать прямо внутри цикла for!

Предположим, структура папок выглядит так:

Структура каталога books

Введение в Bash-скриптинг

Подоболочка в цикле FOR

Можно перебирать результат вызова подоболочки в цикле:

for book in $(ls books/ | grep -i 'air')

do echo $book done
AirportBook.txt
FairMarketBook.txt
Введение в Bash-скриптинг

Синтаксис оператора WHILE

Похож на цикл FOR, но вместо перечисления элементов задаётся условие, которое проверяется на каждой итерации.

Итерации продолжаются, пока условие выполняется!

  • Используйте слово while вместо for
  • Условие заключается в квадратные скобки
    • Применяются те же флаги числового сравнения, что и в операторах IF (например, -le)
  • Можно объединять несколько условий или использовать двойные скобки — как в операторах IF — с && (AND) или || (OR)
  • Обязательно предусмотрьте внутри цикла изменение, которое в итоге прервёт выполнение (иначе получится бесконечный цикл!)
Введение в Bash-скриптинг

Пример оператора WHILE

Простой пример:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Введение в Bash-скриптинг

Осторожно: бесконечный цикл

Остерегайтесь бесконечного цикла WHILE — когда условие выхода так и не выполняется.

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # don't increment x. It never reaches 3!
    # ((x+=1)) 
done

Этот код будет бесконечно выводить 1!

Введение в Bash-скриптинг

Давайте потренируемся!

Введение в Bash-скриптинг

Preparing Video For Download...