Làm thế nào để viết Bash WHILE-Loops

Lệnh, Cú pháp và Ví dụ

Bạn có thể thực hiện một chuỗi các lệnh bằng cách viết chúng vào một tệp kịch bản và sau đó chạy nó.

Tệp kịch bản chỉ đơn giản là một tệp văn bản, thường là với phần mở rộng tệp .SH, chứa một chuỗi các lệnh có thể được thực hiện từ dòng lệnh ( shell ).

Trong khi ví dụ vòng lặp

Dưới đây là ví dụ về vòng lặp while. Khi được thực hiện, tệp tập lệnh này sẽ in các số từ 1 đến 9 trên màn hình. Câu lệnh while cho bạn khả năng linh hoạt hơn để chỉ định điều kiện kết thúc so với vòng lặp for .

#! / bin / bash count = 1 trong khi [$ count -le 9] làm echo "$ count" sleep 1 ((count ++)) done

Ví dụ, bạn có thể làm cho tập lệnh trước một vòng lặp vô hạn bằng cách bỏ qua câu lệnh gia tăng "((count ++))":

#! / bin / bash count = 1 trong khi [$ count -le 9] làm echo "$ count" sleep 1 done

Câu lệnh "sleep 1" tạm dừng thực thi trong 1 giây trên mỗi lần lặp. Sử dụng phím tắt Ctrl + C để chấm dứt quá trình.

Bạn cũng có thể tạo một vòng lặp vô hạn bằng cách đặt dấu hai chấm làm điều kiện:

#! / bin / bash count = 1 trong khi: làm echo "$ count" sleep 1 ((count ++)) done

Để sử dụng nhiều điều kiện trong vòng lặp while, bạn phải sử dụng ký hiệu ngoặc vuông kép:

count = 1 done = 0 trong khi [[$ count -le 9] && [$ done == 0]] lặp lại "$ count" ngủ 1 ((count ++)) nếu [$ count == 5]; sau đó $ done = 1 fi done

Trong kịch bản này, biến "done" được khởi tạo thành 0 và sau đó được đặt thành 1 khi đếm đến 5. Điều kiện vòng lặp cho biết rằng vòng lặp while sẽ tiếp tục miễn là "count" nhỏ hơn 9 và "done" bằng nhau không. Do đó, các vòng thoát khi đếm bằng 5.

"&&" có nghĩa là hợp lý "và" và "||" có nghĩa là hợp lý "hoặc".

Một ký hiệu thay thế cho các liên từ "và" và "hoặc" trong điều kiện là "-a" và "-o" với các dấu ngoặc vuông đơn. Các điều kiện trên:

[[$ count -le 9] && [$ done == 0]]

... có thể được viết lại dưới dạng:

[$ count -le 9] -a [$ đã thực hiện == 0]

Đọc một tập tin văn bản thường được thực hiện với một vòng lặp while. Trong ví dụ sau, tập lệnh bash đọc dòng nội dung theo dòng của tệp có tên "inventory.txt:"

Hàm FILE = inventory.txt 6

Dòng đầu tiên gán tên tệp đầu vào cho biến "FILE". Dòng thứ hai lưu "đầu vào tiêu chuẩn" trong bộ mô tả tập tin "6" (nó có thể là bất kỳ giá trị nào trong khoảng từ 3 đến 9). Điều này được thực hiện sao cho "đầu vào tiêu chuẩn" có thể được phục hồi thành tập tin mô tả "0" ở cuối tập lệnh (xem câu lệnh "exec 0 Trong dòng thứ 3, tệp đầu vào được gán cho bộ mô tả tập tin" 0, "được sử dụng đối với đầu vào tiêu chuẩn, câu lệnh "read" sau đó đọc một dòng từ tệp trên mỗi lần lặp và gán nó cho biến "line1".

Để thoát sớm trong một vòng lặp while, bạn có thể sử dụng lệnh break như sau:

count = 1 done = 0 trong khi [$ count -le 9] làm echo "$ count" sleep 1 ((count ++)) nếu [$ count == 5] sau đó break fi done echo Finished

Câu lệnh break bỏ qua thực thi chương trình đến cuối trong khi lặp và thực hiện bất kỳ câu lệnh nào theo sau nó. Trong trường hợp này, câu lệnh "echo Finished".

Mặt khác, câu lệnh tiếp tục, chỉ bỏ qua phần còn lại của câu lệnh vòng lặp while của phép lặp hiện tại và nhảy trực tiếp đến lần lặp tiếp theo:

count = 1 done = 0 trong khi [$ count -le 9] làm ngủ 1 ((count ++)) nếu [$ count == 5] sau đó tiếp tục fi echo "$ count" done echo Finished

Trong trường hợp này, câu lệnh "tiếp tục" được thực hiện khi biến "đếm" đạt đến 5. Điều này có nghĩa là câu lệnh tiếp theo (echo "$ count") không được thực thi trên lần lặp này (khi giá trị "đếm" là 5).