Vòng lặp Bash 'Until': Hướng dẫn và Ví dụ

Sử dụng vòng lặp ‘Until’ trong tập lệnh Bash để lặp qua (các) lệnh.

Bash (Bourne Again Shell) là một lời nhắc lệnh shell và ngôn ngữ kịch bản trong hệ điều hành GNU / Linux. Nó là trình bao mặc định cho hầu hết các bản phân phối Linux.

Giống như hầu hết các ngôn ngữ kịch bản, Bash cung cấp các cú pháp vòng lặp để lặp lại các tác vụ tương tự nhiều lần. Trong bài viết này, chúng ta sẽ học cách sử dụng cho đến khi vòng lặp trong Bash.

Giới thiệu

Các cho đến khi vòng lặp trong Bash được sử dụng để thực hiện (các) lệnh (các lệnh đã thực thi) nhiều lần dựa trên kết quả đầu ra của (các) lệnh khác (các lệnh điều kiện). Các lệnh được thực thi sẽ tiếp tục chạy cho đến khi lệnh điều kiện tiếp tục không thành công (tức là trả về trạng thái khác 0. Mọi lệnh trong Linux đều trả về 0 cho thành công và một số nguyên khác 0 nếu thất bại). Điều này hoàn toàn trái ngược với trong khi vòng lặp, trong đó các lệnh được thực thi tiếp tục chạy cho đến khi lệnh điều kiện thành công.

Nếu có nhiều lệnh điều kiện, câu lệnh chỉ xem xét trạng thái của lệnh cuối cùng trong danh sách, tức là, vòng lặp sẽ chạy cho đến khi lệnh cuối cùng trong danh sách tiếp tục không thành công.

Cú pháp chung

Cú pháp chung cho cho đến khi vòng lặp trong Bash là:

cho đến khi làm xong

Danh sách lệnh thực thi sẽ chạy cho đến khi lệnh cuối cùng trong danh sách lệnh điều kiện bị lỗi. Khi lệnh cuối cùng thành công, vòng lặp sẽ thoát.

Người dùng có thể chỉ định bất kỳ tệp thực thi nào trong danh sách lệnh. Nó có thể là các chương trình Linux tiêu chuẩn hoặc các chương trình hoặc tập lệnh người dùng tùy chỉnh. Mỗi lệnh phải nằm trên một dòng mới hoặc được phân tách bằng dấu chấm phẩy trên cùng một dòng.

Hãy để chúng tôi xem một vài ví dụ.

Vòng lặp cho đến khi một biến có một giá trị cụ thể: Vòng lặp sau sẽ thực hiện cho đến khi giá trị của biến x là 10.

x = 0 cho đến khi [[$ x -eq 10]] thực hiện echo $ x ((x ++)) xong

Trong mỗi lần lặp, chúng tôi đang kiểm tra xem giá trị của x có bằng 10. Giá trị đang được kiểm tra bằng cách sử dụng kiểm tra yêu cầu. [[ Biểu hiện ]] là cú pháp cho lệnh kiểm tra (Xem kiểm tra người đàn ông).

Sau đó, bên trong làm xong khối, chúng tôi chỉ cần in giá trị của x và tăng nó lên. Vòng lặp thoát khi lệnh điều kiện thành công, tức là khi $ x bằng 10.

Ghi chú: Biến chỉ mục được sử dụng trong vòng lặp ‘Until’ phải được khởi tạo trước vòng lặp ‘Until’ hoặc trong các lệnh điều kiện, trái ngược với vòng lặp for, cho phép khởi tạo một biến một cách ngầm định.

Với nhiều lệnh điều kiện: Vòng lặp sau tạo 5 thư mục có tên dir0, dir1, ... dir4.

z = 0 cho đến khi echo "Chào" echo "Bye" [[$ z -eq 5]] do echo "Tạo dir $ z ..." mkdir dir $ z ((z ++)) hoàn tất

Các lệnh đầu tiên echo “Hi” và echo “Bye” sẽ thực hiện hoàn toàn một lần; sự thành công hay thất bại của họ không ảnh hưởng gì đến thời gian vòng lặp sẽ chạy.

Sau đó, lệnh kiểm tra để kiểm tra giá trị của biến z sẽ thực hiện. Cho đến khi lệnh này tiếp tục không thành công, tức là cho đến khi giá trị của z là 5, các lệnh điều kiện và lệnh đã thực hiện tiếp tục chạy theo thứ tự. Ở đây, đối với mỗi lần lặp, đầu tiên nó sẽ chạy 2 lệnh echo trong điều kiện và sau đó lệnh điều kiện thứ 3 sẽ kiểm tra giá trị của z. Nếu nó không phải là 5, nó sẽ đi vào vòng lặp và thực hiện các lệnh đã cho.

Ngắt và tiếp tục

Tuyên bố ngắt cho thoát có điều kiện

Chúng ta cũng có thể sử dụng câu lệnh điều kiện nếu như bên trong vòng lặp. Các nếu như câu lệnh có thể được sử dụng với nghỉ một câu lệnh, để thoát có điều kiện khỏi vòng lặp.

x = 0 cho đến khi [[$ x -eq 10]] thực hiện nếu [[$ x -eq 5]] break fi echo $ x ((x ++)) hoàn thành

Vòng lặp Until ở trên sẽ in ra các số từ 0 đến 4. Sau đó khi giá trị của i là 5, nó sẽ thoát ra khỏi vòng lặp. Điều này đặc biệt được sử dụng khi một vòng lặp được thoát ra khi một lệnh đưa ra một đầu ra cụ thể.

Tiếp tục tuyên bố để bỏ qua một lần lặp lại có điều kiện

Bash cũng có một tiếp tục câu lệnh để bỏ qua phần còn lại của một lần lặp trong vòng lặp nếu một điều kiện cụ thể được thỏa mãn.

x = 0 cho đến khi [[$ x -eq 10]] thực hiện nếu [[$ x -eq 5]] tiếp tục fi echo $ x ((x ++)) xong

Vòng lặp trên sẽ in ra các số từ 0 đến 10, ngoại trừ 5, bởi vì trong quá trình lặp lại của x = 5 có một câu lệnh continue, câu lệnh này sẽ bỏ qua phần còn lại của mã trong vòng lặp khi bắt đầu với sự lặp lại của x = 6.

Sử dụng vòng lặp: Tập lệnh và Dòng lệnh

Các cú pháp vòng lặp có thể được sử dụng trực tiếp trong Bash shell hoặc từ một tệp script shell thực thi. Tương tự với trong khi vòng lặp, một lần cho đến khi cú pháp lặp được nhập trên shell, shell tiếp tục lời nhắc để người dùng tiếp tục các lệnh được lặp.

Hoặc nếu không, người dùng có thể lưu tệp này trong tệp script và thực thi tệp script.

Các #! / bin / bash lúc bắt đầu chỉ định trình thông dịch sẽ được sử dụng khi tệp được thực thi. Mặc dù Bash là shell được sử dụng phổ biến nhất hiện nay, nhưng một số người dùng lại thích các shell như zsh, nên được chỉ định thay cho bash ở đầu tệp này.

Để cung cấp quyền thực thi cho tệp này, hãy chạy:

chmod + x test.sh

Cuối cùng, để thực thi tệp, chạy:

./test.sh

Sự kết luận

Các cho đến khi loop là một tính năng quan trọng khác trong Bash scripting. Nó có tầm quan trọng đặc biệt trong các tập lệnh phức tạp khi một bộ chương trình nhất định sẽ trả về trạng thái lỗi và một số lệnh khác sẽ được thực thi để ghi lại lỗi, hiển thị chi tiết lỗi hoặc đơn giản là thực thi một số chương trình thay thế.