Vòng lặp Until được sử dụng để thực thi một khối mã đươc lặp đi lặp lại dựa trên kết quả boolean của một biểu thức. Tập hợp các lệnh chỉ được thực hiện cho đến khi biểu thức đánh giá là true. Nó có nghĩa là khi biểu thức đánh giá là false, một tập hợp các lệnh sẽ được thực hiện lặp đi lặp lại. Vòng lặp được kết thúc ngay sau khi biểu thức đánh giá là true lần đầu tiên.
Như đã biết, trong bash shell có các vòng lặp cấu trúc như For, While, Until. Mỗi một vòng lặp đều có chức năng và cú pháp khác nhau. Tuy nhiên mục đích của chúng là đều lặp lại một khối lệnh thực thi.
Vòng lặp while là một lựa chọn tuyệt vời để thực hiện một tập hợp các lệnh khi một số điều kiện đánh giá là true. Đôi khi, chúng ta cần thực hiện một tập hợp các lệnh cho đến khi một điều kiện được đánh giá là true. Trong những trường hợp như vậy, vòng lặp Until rất hữu ích.
Cú pháp:
until [CONDITION]
do
[COMMANDS]
done
done
Phân tích cú pháp:
- Vòng lặp bắt đầu bằng từ khóa until và theo sau là một biểu thức được đặt trong dấu ngoặc đơn hoặc dấu ngoặc kép.
- Biểu thức phải được đánh giá là sai trước khi bắt đầu thực thi khối mã.
- Khối mã thực thi phải được đặt giữa bên trong do và done
Để dễ hình dung hơn chung ta hãy thực hành một số ví dụ đơn giản sau:
Ví dụ cơ bản về vòng lặp Until
Tạo 1 vòng lặp vô hạn
Bạn có thể tạo 1 vòng lặp vô hạn khi sử dụng điều kiện false dưới dạng 1 biểu thức. Lưu ý khi sử dụng vòng lặp vô hạn, bạn hãy đặt lệnh sleep để vòng lặp thực hiện định kì để chúng ta dễ nhìn hơn.
#!/bin/bash count=0 until false do echo "Counter = $count" ((count++)) sleep 2 done
Chúng ta cũng có thể viết câu lệnh tương tự như ví dụ trên và trên 1 dòng đơn.
# until false; do echo "Counter = $count"; ((count++)); sleep 2; done
Lặp với nhiều điều kiện trong 1 biểu thức
#!/bin/bash max=5 a=1 b=0 until [[ $a -gt $max || $b -gt $max ]]; do echo "a = $a & b = $b." ((a++)) ((b++)) done
Sử dụng lệnh break và continue
Bạn cũng có thể sử dụng lệnh break và continue bên trong vòng lặp Until tương tự như vòng lặp While. Câu lệnh break sẽ thoát ra khỏi vòng lặp và chuyển qua câu lệnh tiếp theo trong khi câu lệnh continue sẽ bỏ qua lần lặp hiện tại và bắt đầu lần lặp tiếp theo.
Chúng ta xem xét ví dụ sau:
#!/bin/bash count=0 until false do ((count++)) if [[ $count -eq 5 ]] then continue elif [[ $count -ge 10 ]] then break fi echo "Counter = $count" done
Sử dụng lại vòng lặp vô hạn ở ví dụ 1, khi lượt lặp $count -eq 5 có giá trị bằng 5 vòng lặp sẽ bỏ qua và không hiện giá trị này và sẽ chuyển sang lượt lặp kế tiếp.
Tương tự vòng lặp sẽ bị ngắt khi $count -ge 10 có gia trị bằng 10.
Kết luận
Vòng lặp Until cũng là một trong số các vòng lặp cơ bản trong Bash Script, chúng tôi hy vọng thông qua bài biết này có thể mang lại có cái nhìn tổng thể hơn về cách sử dụng vòng lặp này.
Chúc các bạn thành công.