Sử dụng vòng lặp ‘while’ 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 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 trong khi
vòng lặp trong Bash.
Giới thiệu
Các trong 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 chạy thành công (tức là trả về trạng thái 0. Bất kỳ lệnh nào 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).
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 thực hiện cho đến khi lệnh cuối cùng trong danh sách chạy thành công.
Cú pháp chung
Cú pháp chung cho trong khi
vòng lặp trong Bash là:
trong khi làm
Danh sách lệnh thực thi sẽ tiếp tục chạy cho đến khi lệnh cuối cùng trong danh sách lệnh điều kiện chạy thành công và thoát với trạng thái 0. Trong lần lặp, khi lệnh điều kiện cuối cùng khô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
không bằng 10.
x = 0 trong khi [[$ x -ne 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
). Ở đây vì chúng tôi đang sử dụng -ne
toán tử (viết tắt của 'không bằng'), lệnh kiểm tra trả về 0, tức là thành công, nếu giá trị của x không phải là 10 và nó trả về giá trị khác 0, tức là không thành công nếu giá trị của x là 10.
Sau đó, bên trong làm xong
khối, chúng tôi in giá trị của x và tăng nó lên. Khi giá trị của x là 10, lệnh kiểm tra trả về trạng thái khác 0 và vòng lặp sẽ thoát ra.
Ghi chú: Biến chỉ mục được sử dụng trong vòng lặp while phải được khởi tạo trước vòng lặp while 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 while echo "Danh sách tệp:" ls -l [[$ z -ne 5]] do echo "Tạo dir $ z ..." mkdir dir $ z ((z ++)) đã xong
Các lệnh đầu tiên echo "Danh sách các tệp:"
và ls -l
sẽ thực thi một lần hoàn toà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 giá trị của z không phải là 5, lệnh kiểm tra trả về trạng thái thành công và do đó vòng lặp tiếp tục chạy. Các lệnh điều kiện và lệnh được 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 lệnh echo và lệnh ls 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ỉ
câu lệnh, để thoát có điều kiện khỏi vòng lặp.
x = 0 while [[$ x -ne 10]] do if [[$ x -eq 5]] break fi echo $ x ((x ++)) thực hiện xong
Vòng lặp while ở trên sẽ in ra các số từ 0 đến 4. Sau đó khi giá trị của i là 5 thì 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
để 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 while [[$ x -ne 10]] do [[$ 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 vì
và trong khi
vòng lặp, một lần trong 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 nó trong một 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 trong khi
vòng lặp, tương tự như vì
và cho đến khi
vòng lặp là một tính năng quan trọng trong kịch bản Bash. Vòng lặp while có cách sử dụng tương tự như vòng lặp Until, ngoại trừ việc nó được sử dụng để chạy các lệnh / chương trình thay thế khi một chương trình cụ thể thành công. Điều này thường thấy sự hữu ích của nó trong các tập lệnh mạng nâng cao, tập lệnh bảo trì hệ thống, v.v.