Contact Info

Chicago 12, Melborne City, USA

+88 01682648101

[email protected]

Get Started
  1. Home
  2. Knowledge Base
  3. Linux
  4. Vòng Lặp while trong Bash

Vòng Lặp while trong Bash

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.

Was this article helpful?

Related Articles

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *