Vòng lặp là một trong những khái niệm cơ bản của các ngôn ngữ lập trình. Chúng rất hữu ích khi bạn muốn thực thi một loạt các lệnh một số lần cụ thể cho đến khi một điều kiện nhất định được đáp ứng.
Trong các ngôn ngữ script như Bash, vòng lặp là một công cụ hữu ích để tự động hóa các tác vụ lặp lại. Có ba cấu trúc vòng lặp cơ bản trong Bash scripting, đó là vòng lặp for, vòng lặp while và vòng lặp until.
Vòng Lặp while trong Bash
Vòng lặp while được sử dụng để thực hiện một tập hợp các lệnh đã cho một số lần không xác định miễn là điều kiện cho trước đánh giá là đúng.
Cú pháp của vòng lặp while trong Bash như sau:
while [CONDITION]
do
[COMMANDS]
done
Lệnh while bắt đầu với từ khóa while, theo sau là biểu thức điều kiện.
Điều kiện được đánh giá trước khi thực thi các lệnh. Nếu điều kiện được đánh giá là đúng, các lệnh được thực thi. Nếu điều kiện được đánh giá là sai, vòng lặp sẽ kết thúc và kiểm soát của chương trình sẽ được chuyển cho lệnh tiếp theo.
Trong ví dụ dưới đây, trong mỗi lần lặp, giá trị hiện tại của biến i được in ra và tăng lên một.
i=0
while [ $i -le 2 ]
do
echo Number: $i
((i++))
done
Vòng lặp trên sẽ lặp lại miễn là i nhỏ hơn hoặc bằng hai. Nó sẽ tạo ra đầu ra sau:
Number: 0
Number: 1
Number: 2
Vòng Lặp while Vô Hạn
Một vòng lặp vô hạn là một vòng lặp lặp lại vô hạn và không bao giờ kết thúc. Nếu điều kiện luôn đánh giá là đúng, bạn sẽ có một vòng lặp vô hạn.
Trong ví dụ sau, chúng tôi sử dụng lệnh tích hợp sẵn : để tạo ra một vòng lặp vô hạn. : luôn trả về đúng. Bạn cũng có thể sử dụng lệnh tích hợp sẵn true hoặc bất kỳ lệnh nào khác luôn trả về đúng.
while :
do
echo "Nhấn <CTRL+C> để thoát."
sleep 1
done
Vòng lặp while trên sẽ chạy mãi mãi. Bạn có thể kết thúc vòng lặp bằng cách nhấn CTRL+C.
Dưới đây là một dạng ngắn gọn tương đương:
while :; do echo 'Nhấn <CTRL+C> để thoát.'; sleep 1; done
Đọc Tệp Từng Dòng
Một trong những cách sử dụng phổ biến nhất của vòng lặp while là đọc một tệp, dòng dữ liệu hoặc biến từng dòng.
Dưới đây là một ví dụ đọc tệp /etc/passwd từng dòng và in mỗi dòng:
file=/etc/passwd
while read -r line; do
echo $line
done < "$file"
Thay vì kiểm soát vòng lặp bằng một điều kiện, chúng tôi sử dụng chuyển hướng đầu vào (< “$file”) để truyền một tệp cho lệnh read, điều này kiểm soát vòng lặp. Vòng lặp while sẽ chạy cho đến khi đọc được dòng cuối cùng.
Khi đọc tệp dòng bởi dòng, luôn sử dụng lệnh read với tùy chọn -r để ngăn việc gạch chéo hoạt động như một ký tự trốn.
Mặc định, lệnh read cắt bỏ các ký tự dấu cách/tab dẫn đầu/cuối (spaces và tabs). Sử dụng tùy chọn IFS= trước lệnh read để ngăn hành vi này:
file=/etc/passwd
while IFS= read -r line; do
echo $line
done < "$file"
Các Lệnh break và continue
Các lệnh break và continue có thể được sử dụng để kiểm soát thực thi của vòng lặp while.
Lệnh break
Lệnh break kết thúc vòng lặp hiện tại và chuyển kiểm soát của chương trình cho lệnh tiếp theo sau khi vòng lặp đã kết thúc. Thông thường được sử dụng để kết thúc vòng lặp khi một điều kiện nhất định được đáp ứng.
Trong ví dụ dưới đây, thực thi của vòng lặp sẽ bị gián đoạn ngay sau khi phần tử hiện tại được lặp lại bằng hai.
i=0
while [ $i -lt 5 ]
do
echo "Number: $i"
((i++))
if [[ "$i" == '2' ]]; then
break
fi
done
echo 'Hoàn thành!'
Lệnh continue
Lệnh continue kết thúc vòng lặp hiện tại và chuyển kiểm soát của chương trình đến lần lặp tiếp theo của vòng lặp.
Trong ví dụ dưới đây, sau khi phần tử hiện tại được lặp lại bằng hai, lệnh continue sẽ khiến việc thực thi quay lại đầu vòng lặp và tiếp tục với lần lặp tiếp theo.
i=0
while [ $i -lt 5 ]
do
((i++))
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
echo 'Hoàn thành!'
Kết Luận
Vòng lặp while thực hiện lặp lại một tập hợp các lệnh đã cho miễn là một điều kiện nhất định là đúng.
Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, hãy để lại một bình luận.