Pętle FOR i instrukcje WHILE

Wprowadzenie do skryptów Bash

Alex Scriven

Data Scientist

Podstawowa struktura pętli 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
Wprowadzenie do skryptów Bash

Pętla FOR w Bash

Podstawowa struktura w Bash jest podobna:

for x in 1 2 3

do echo $x done
1
2
3
Wprowadzenie do skryptów Bash

Zakresy liczbowe w pętli FOR

Bash oferuje wygodny sposób tworzenia zakresów liczbowych zwany rozwinięciem nawiasów klamrowych:

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

do echo $x done
1
3
5
Wprowadzenie do skryptów Bash

Składnia trzech wyrażeń w pętli FOR

Innym popularnym sposobem zapisu pętli FOR jest składnia "trzech wyrażeń".

  • Trzy wyrażenia otoczone podwójnymi nawiasami
  • Pierwsze wyrażenie to wartość początkowa (x=2)
  • Środkowe to warunek zakończenia (x<=4)
  • Ostatnie to wyrażenie inkrementacji (lub dekrementacji) (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Wprowadzenie do skryptów Bash

Rozwinięcia glob

Bash umożliwia dopasowywanie wzorców w pętli for za pomocą symbolu *, np. pliki w katalogu.

Przyjmijmy, że w folderze /books znajdują się dwa dokumenty tekstowe:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Wprowadzenie do skryptów Bash

Powłoka w powłoce — ponownie

Pamiętasz tworzenie powłoki w powłoce za pomocą notacji $()?

Można jej użyć bezpośrednio w pętli for!

Przyjmijmy następującą strukturę folderów:

Struktura katalogu books

Wprowadzenie do skryptów Bash

Powłoka w powłoce w pętli FOR

Możemy iterować po wynikach wywołania powłoki w powłoce:

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

do echo $book done
AirportBook.txt
FairMarketBook.txt
Wprowadzenie do skryptów Bash

Składnia instrukcji WHILE

Podobna do pętli FOR. Różnica polega na ustawieniu warunku sprawdzanego przy każdej iteracji.

Iteracje trwają, dopóki warunek jest spełniony!

  • Zamiast for używa się słowa while
  • Warunek umieszcza się w nawiasach kwadratowych
    • Dostępne te same flagi porównań numerycznych co w IF (np. -le)
  • Warunki można łączyć lub używać podwójnych nawiasów jak w IF wraz z && (AND) lub || (OR)
  • Należy zapewnić zmianę wewnątrz kodu powodującą zatrzymanie (inaczej powstanie pętla nieskończona!)
Wprowadzenie do skryptów Bash

Przykład instrukcji WHILE

Prosty przykład:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Wprowadzenie do skryptów Bash

Uwaga na pętle nieskończone

Uwaga na nieskończoną pętlę WHILE, gdy warunek zakończenia nigdy nie jest spełniony.

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

To będzie drukować 1 w nieskończoność!

Wprowadzenie do skryptów Bash

Czas na ćwiczenia!

Wprowadzenie do skryptów Bash

Preparing Video For Download...