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

Вступ до Bash Scripting

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 Scripting

Цикл FOR у Bash

Базова структура в Bash подібна:

for x in 1 2 3

do echo $x done
1
2
3
Вступ до Bash Scripting

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

У Bash є зручний спосіб створити числовий діапазон — «brace expansion»:

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

do echo $x done
1
3
5
Вступ до Bash Scripting

Синтаксис трьох виразів для FOR

Ще один поширений спосіб — синтаксис «трьох виразів».

  • Оточте три вирази подвійними дужками
  • Перша частина — початковий вираз (x=2)
  • Середня — умова зупинки (x<=4)
  • Кінцева — вираз інкременту (або декременту) (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Вступ до Bash Scripting

Глоб-розширення

Bash також дозволяє розширення за шаблоном у циклі for за допомогою символу *, наприклад для файлів у каталозі.

Наприклад, припустімо, що в теці /books є два текстові документи:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Вступ до Bash Scripting

Повертаємось до «оболонки в оболонці»

Пам'ятаєте створення «оболонки в оболонці» через запис $()?

Її можна викликати безпосередньо в циклі for!

Припустімо, структура теки така:

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

Вступ до Bash Scripting

«Оболонка в оболонці» для циклу FOR

Можна пройтися циклом по результату виклику «оболонки в оболонці»:

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

do echo $book done
AirportBook.txt
FairMarketBook.txt
Вступ до Bash Scripting

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

Подібно до циклу FOR, але ви задаєте умову, яку перевіряють на кожній ітерації.

Ітерації тривають, доки умова виконується.

  • Використовуйте слово while замість for
  • Умову візьміть у квадратні дужки
    • Використовуйте ті самі прапорці для числового порівняння з IF (наприклад, -le)
  • Можна ланцюжити кілька умов або використовувати подвійні дужки, як у «IF», разом із && (AND) чи || (OR)
  • Подбайте про зміну всередині коду, що зупинить цикл (інакше буде нескінченний цикл!)
Вступ до Bash Scripting

Приклад оператора WHILE

Ось простий приклад:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Вступ до Bash Scripting

Остерігайтесь нескінченного циклу

Остерігайтесь нескінченного циклу WHILE, якщо умова виходу ніколи не спрацьовує.

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

Це виводитиме 1 без кінця!

Вступ до Bash Scripting

Давайте потренуємось!

Вступ до Bash Scripting

Preparing Video For Download...