Vòng lặp FOR & câu lệnh WHILE

Nhập môn Bash Scripting

Alex Scriven

Data Scientist

Cấu trúc FOR cơ bản

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
Nhập môn Bash Scripting

Vòng lặp FOR trong Bash

Cấu trúc cơ bản trong Bash cũng tương tự:

for x in 1 2 3

do echo $x done
1
2
3
Nhập môn Bash Scripting

Dải số trong FOR

Bash có cách tạo dải số gọn gọi là “brace expansion”:

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

do echo $x done
1
3
5
Nhập môn Bash Scripting

Cú pháp FOR ba biểu thức

Một cách phổ biến khác là cú pháp “ba biểu thức”.

  • Đặt ba biểu thức trong ngoặc kép
  • Phần đầu là khởi tạo (x=2)
  • Phần giữa là điều kiện dừng (x<=4)
  • Phần cuối là tăng/giảm (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Nhập môn Bash Scripting

Mở rộng glob

Bash cho phép mở rộng mẫu (glob) vào vòng lặp for bằng ký hiệu *, như danh sách tệp trong thư mục.

Ví dụ, giả sử có hai tệp văn bản trong thư mục /books:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Nhập môn Bash Scripting

Ôn lại shell-lồng-trong-shell

Nhớ cách tạo shell-lồng-trong-shell bằng ký pháp $() chứ?

Bạn có thể gọi trực tiếp trong vòng lặp for!

Giả sử cấu trúc thư mục như sau:

Cấu trúc thư mục books

Nhập môn Bash Scripting

Shell-lồng-trong-shell cho vòng lặp FOR

Ta có thể lặp qua kết quả của shell-lồng-trong-shell:

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

do echo $book done
AirportBook.txt
FairMarketBook.txt
Nhập môn Bash Scripting

Cú pháp WHILE

Tương tự vòng lặp FOR, nhưng bạn đặt điều kiện kiểm tra ở mỗi vòng.

Lặp cho đến khi điều kiện không còn đúng.

  • Dùng từ khóa while thay cho for
  • Đặt điều kiện trong ngoặc vuông
    • Dùng các cờ so sánh số như trong IF (ví dụ -le)
  • Có thể nối nhiều điều kiện hoặc dùng ngoặc kép như IF với && (AND) hoặc || (OR)
  • Bên trong vòng lặp phải có thay đổi để dừng (nếu không sẽ thành vòng lặp vô hạn!)
Nhập môn Bash Scripting

Ví dụ WHILE

Ví dụ đơn giản:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Nhập môn Bash Scripting

Cảnh giác vòng lặp vô hạn

Cẩn thận vòng lặp WHILE vô hạn nếu điều kiện dừng không bao giờ thỏa.

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # không tăng x. Nó sẽ không bao giờ đạt 3!
    # ((x+=1)) 
done

Điều này sẽ in 1 mãi mãi!

Nhập môn Bash Scripting

Ayo berlatih!

Nhập môn Bash Scripting

Preparing Video For Download...