Android

Bash cho vòng lặp

Bash vs Python для DevOps инженеров и системных администраторов

Bash vs Python для DevOps инженеров и системных администраторов

Mục lục:

Anonim

Vòng lặp là một trong những khái niệm cơ bản của ngôn ngữ lập trình. Vòng lặp rất tiện lợi khi bạn muốn chạy một loạt các lệnh nhiều lần cho đến khi đạt được một điều kiện nhất định.

Trong các ngôn ngữ kịch bản như Bash, các vòng lặp rất hữu ích để tự động hóa các tác vụ lặp đi lặp lại.

Có ba cấu trúc vòng lặp cơ bản trong kịch bản Bash, cho vòng lặp, vòng lặp while và cho đến vòng lặp.

Trong hướng dẫn này, chúng tôi sẽ đề cập đến những điều cơ bản về các vòng lặp trong Bash. Chúng tôi cũng sẽ chỉ cho bạn cách sử dụng ngắt và tiếp tục báo cáo để thay đổi luồng của vòng lặp.

Bash chuẩn cho vòng lặp

Vòng lặp for lặp qua danh sách các mục và thực hiện nhóm lệnh đã cho.

Vòng lặp Bash for có dạng sau:

for item in do done

Danh sách có thể là một chuỗi các chuỗi được phân tách bằng dấu cách, một dãy số, đầu ra của một lệnh, một mảng, v.v.

Vòng qua chuỗi

Trong ví dụ bên dưới, vòng lặp sẽ lặp lại qua từng mục trong danh sách các chuỗi và element biến sẽ được đặt thành mục hiện tại.

for element in Hydrogen Helium Lithium Beryllium do echo "Element: $element" done

Vòng lặp sẽ tạo ra đầu ra sau:

Element: Hydrogen Element: Helium Element: Lithium Element: Beryllium

Lặp lại trên một phạm vi số

Bạn có thể sử dụng biểu thức chuỗi để chỉ định một phạm vi số hoặc ký tự bằng cách xác định điểm bắt đầu và điểm kết thúc của phạm vi. Biểu thức trình tự có dạng sau:

{START..END}

Trong ví dụ bên dưới, vòng lặp sẽ lặp qua tất cả các số từ 0 đến 3.

for i in {0..3} do echo "Number: $i" done

Number: 0 Number: 1 Number: 2 Number: 3

Bắt đầu từ Bash 4, cũng có thể chỉ định gia số khi sử dụng phạm vi. Biểu thức có dạng sau:

{START..END..INCREMENT}

for i in {0..20..5} do echo "Number: $i" done

Number: 0 Number: 5 Number: 10 Number: 15 Number: 20

Lặp lại các phần tử mảng

Bạn cũng có thể sử dụng vòng lặp for để lặp qua một mảng các phần tử:

Trong ví dụ dưới đây, chúng tôi đang xác định một BOOKS mảng và lặp lại qua từng phần tử của mảng.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby') for book in "${BOOKS}"; do echo "Book: $book" done

Book: In Search of Lost Time Book: Don Quixote Book: Ulysses Book: The Great Gatsby

Vòng lặp Bash theo kiểu C

Cú pháp của vòng lặp kiểu C được thực hiện dưới dạng sau:

for ((INITIALIZATION; TEST; STEP)) do done

Phần INITIALIZATION được thực hiện một lần khi vòng lặp bắt đầu. Sau đó, phần TEST được đánh giá. Nếu nó sai, vòng lặp for bị chấm dứt. Nếu TEST là đúng, các lệnh bên trong phần thân của vòng lặp for được thực thi và phần STEP được cập nhật.

Trong đoạn mã sau, các vòng lặp sao bằng cách khởi tạo i = 0 , sau đó trước mỗi lần lặp kiểm tra nếu i ≤ 10 . Nếu đúng, nó in giá trị hiện tại của i i bằng 1 ( i++ ) nếu không thì vòng lặp chấm dứt.

for ((i = 0; i <= 1000; i++)); do echo "Counter: $i" done

Vòng lặp sẽ lặp lại 1001 lần và tạo ra kết quả sau:

Counter: 0 Counter: 1 Counter: 2… Counter: 998 Counter: 999 Counter: 1000

Tuyên bố phá vỡ và tiếp tục

Các câu lệnh break và continue có thể được sử dụng để kiểm soát việc thực hiện vòng lặp for.

Tuyên bố phá vỡ

Câu lệnh break chấm dứt vòng lặp hiện tại và chuyển điều khiển chương trình sang câu lệnh theo sau câu lệnh kết thúc. Nó thường được sử dụng để chấm dứt vòng lặp khi một điều kiện nhất định được đáp ứng.

Trong ví dụ sau, chúng tôi đang sử dụng câu lệnh if để chấm dứt việc thực hiện vòng lặp một khi mục lặp hiện tại bằng với 'Lithium'.

for element in Hydrogen Helium Lithium Beryllium; do if]; then break fi echo "Element: $element" done echo 'All Done!'

Element: Hydrogen Element: Helium All Done!

Tiếp tục tuyên bố

Câu lệnh continue thoát khỏi lần lặp hiện tại của một vòng lặp và chuyển điều khiển chương trình sang lần lặp tiếp theo của vòng lặp.

Trong ví dụ sau, chúng ta đang lặp qua một dãy số và khi mục lặp hiện tại bằng '2', câu lệnh continue sẽ khiến cho việc thực thi trở về đầu vòng lặp và tiếp tục với lần lặp tiếp theo.

for i in {1..5}; do if]; then continue fi echo "Number: $i" done

Number: 1 Number: 3 Number: 4 Number: 5

Bash Ví dụ về vòng lặp

Đổi tên tập tin với khoảng trắng trong tên tệp

Ví dụ sau đây cho thấy cách sử dụng vòng lặp Bash for để đổi tên tất cả các tệp trong thư mục hiện tại bằng một khoảng trắng trong tên của nó bằng cách thay thế khoảng trắng thành dấu gạch dưới.

for file in *\ *; do mv "$file" "${file// /_}" done

Hãy chia nhỏ dòng mã theo từng dòng:

  • Dòng đầu tiên tạo một vòng lặp for và lặp qua danh sách tất cả các tệp có khoảng trắng trong tên của nó. Biểu thức *\ * tạo danh sách. Dòng thứ hai áp dụng cho từng mục của danh sách và di chuyển tệp sang một mục mới thay thế khoảng trắng bằng dấu gạch dưới ( _ ). Phần ${file// /_} đang sử dụng mở rộng tham số shell để thay thế một mẫu trong một tham số bằng một chuỗi. done chỉ ra kết thúc của phân đoạn vòng lặp.

Thay đổi phần mở rộng tập tin

Ví dụ sau đây cho thấy cách sử dụng vòng lặp Bash for để đổi tên tất cả các tệp kết thúc bằng.jpeg trong thư mục hiện tại bằng cách thay thế phần mở rộng tệp từ.jpeg thành.jpg.

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg" done

Hãy phân tích từng dòng mã:

  • Dòng đầu tiên tạo một vòng lặp for và lặp qua danh sách tất cả các tệp kết thúc bằng '.jpeg'. Dòng thứ hai áp dụng cho từng mục của danh sách và di chuyển tệp sang một mục mới thay thế '.jpeg' bằng '.jpg'. ${file%.jpeg} để xóa phần '.jpeg' khỏi tên tệp bằng cách mở rộng tham số shell done cho biết kết thúc phân đoạn vòng lặp.

Phần kết luận

Bây giờ bạn nên hiểu rõ về cách sử dụng bash for loop để lặp qua các danh sách.

thiết bị đầu cuối bash loop