Làm thế nào để viết một BASH "cho" Loop

Cách sử dụng vòng lặp BASH "for" trong các kịch bản lệnh shell

BASH (viết tắt của Bourne Again Shell) là một ngôn ngữ kịch bản được sử dụng bởi hầu hết các hệ điều hành Linux và UNIX.

Bạn có thể chạy lệnh BASH trong cửa sổ đầu cuối sau lệnh kia hoặc bạn có thể thêm lệnh vào tệp văn bản để tạo tập lệnh shell.

Điều tuyệt vời khi viết kịch bản lệnh shell là bạn có thể chạy chúng lặp đi lặp lại. Ví dụ, hãy tưởng tượng bạn cần thêm người dùng vào hệ thống, đặt quyền của họ và quản lý môi trường bắt đầu của họ. Bạn có thể viết ra các lệnh trên một mảnh giấy và chạy chúng khi bạn thêm người dùng mới hoặc bạn có thể viết một kịch bản đơn và chỉ chuyển các tham số vào tập lệnh đó.

Các ngôn ngữ kịch bản như BASH có cấu trúc lập trình tương tự như các ngôn ngữ khác. Ví dụ, bạn có thể sử dụng các tham số nhập để lấy đầu vào từ bàn phím và lưu chúng dưới dạng biến. Sau đó bạn có thể nhận được kịch bản để thực hiện một hành động nhất định dựa trên giá trị của các tham số đầu vào .

Một phần quan trọng của bất kỳ ngôn ngữ lập trình và kịch bản nào là khả năng chạy cùng một đoạn mã một lần nữa và một lần nữa.

Có một số cách để lặp lại mã (còn được gọi là vòng lặp). Trong hướng dẫn này, bạn sẽ được hiển thị cách viết một vòng lặp "for".

Vòng lặp for lặp lại một phần nhất định của mã lặp đi lặp lại. Chúng hữu ích để một loạt các lệnh có thể tiếp tục chạy cho đến khi một điều kiện cụ thể được đáp ứng, sau đó chúng sẽ dừng lại.

Trong hướng dẫn này, bạn sẽ được hiển thị năm cách để sử dụng vòng lặp for trong một tập lệnh BASH.

Trước khi bắt đầu

Trước khi bắt đầu với các ví dụ vòng lặp for, bạn cần mở một cửa sổ dòng lệnh và làm theo các bước sau:

  1. Nhập tập lệnh mkdir ( tìm hiểu thêm về mkdir tại đây )
  2. Nhập tập lệnh cd (điều này sẽ thay đổi thư mục thành tập lệnh )
  3. Nhập nano examplen.sh (trong đó n là ví dụ bạn đang làm việc)
  4. Nhập tập lệnh
  5. Nhấn CTRL + O để lưu và CTRL + X để thoát
  6. Chạy bash examplen.sh (một lần nữa, với n là ví dụ bạn đang làm việc với)

Cách lặp qua danh sách

#! / bin / bash
cho số trong 1 2 3 4 5
làm
echo $ number
làm xong
thoát 0

Cách BASH sử dụng các vòng lặp "cho" hơi khác với cách mà hầu hết các ngôn ngữ lập trình và kịch bản khác xử lý các vòng lặp "cho". Hãy phá vỡ kịch bản ...

Trong một vòng BASH "cho" tất cả, các báo cáo giữa làmthực hiện được thực hiện một lần cho mỗi mục trong danh sách.

Trong ví dụ trên, danh sách là mọi thứ xuất hiện sau từ trong (ví dụ: 1 2 3 4 5).

Mỗi khi vòng lặp lặp lại, giá trị tiếp theo trong danh sách được chèn vào biến được chỉ định sau từ "for" . Trong vòng lặp trên, biến được gọi là số .

Câu lệnh echo được sử dụng để hiển thị thông tin cho màn hình.

Do đó, ví dụ này lấy các số từ 1 đến 5 và xuất chúng từng cái một đến màn hình:

Cách lặp lại giữa điểm bắt đầu và điểm kết thúc

Những rắc rối với ví dụ trên là nếu bạn muốn xử lý một danh sách lớn hơn (nói 1 đến 500), nó sẽ mất lứa tuổi để gõ tất cả các số ở nơi đầu tiên.

Điều này đưa chúng ta đến ví dụ thứ hai cho thấy cách xác định điểm bắt đầu và điểm kết thúc:

#! / bin / bash
cho số trong {1..10}
làm
echo "$ number"
làm xong
thoát 0

Các quy tắc cơ bản giống nhau. Các giá trị sau từ " in" tạo danh sách để lặp qua và mỗi giá trị trong danh sách được đặt trong biến (tức là số), và mỗi lần vòng lặp lặp lại, các câu lệnh giữa thực hiệnthực hiện được thực hiện.

Sự khác biệt chính là cách danh sách được hình thành. Dấu ngoặc nhọn {} về cơ bản biểu thị một phạm vi và phạm vi, trong trường hợp này, là từ 1 đến 10 (hai dấu chấm tách riêng phần bắt đầu và kết thúc của một dải ô).

Ví dụ này, do đó, chạy qua từng số từ 1 đến 10 và xuất ra số đó cho màn hình như sau:

Cùng một vòng lặp có thể được viết như thế này, với cú pháp giống với ví dụ đầu tiên:

cho số trong 1 2 3 4 5 6 7 8 9 10

Làm thế nào để bỏ qua số trong một phạm vi

Ví dụ trước cho thấy cách lặp giữa điểm bắt đầu và điểm kết thúc, vì vậy bây giờ chúng ta sẽ xem xét cách bỏ qua các số trong phạm vi.

Hãy tưởng tượng bạn muốn lặp lại từ 0 đến 100 nhưng chỉ hiển thị mọi số thứ mười. Kịch bản sau đây cho thấy cách thực hiện điều đó:

#! / bin / bash
cho số trong {0..100..10}
làm
echo "$ number"
làm xong
thoát 0

Các quy tắc cơ bản giống nhau. Có một danh sách, một biến và một tập các câu lệnh được thực hiện giữa thực hiệnthực hiện . Danh sách lần này trông như sau: {0..100..10}.

Số đầu tiên là 0 và số cuối là 100. Số thứ ba (10) là số mục trong danh sách mà nó sẽ bỏ qua.

Ví dụ trên, do đó, hiển thị kết quả sau:

Một tìm kiếm truyền thống hơn cho vòng lặp

Cách viết BASH cho vòng lặp hơi lạ khi so sánh với các ngôn ngữ lập trình khác.

Tuy nhiên, bạn có thể viết vòng lặp for theo kiểu tương tự với ngôn ngữ lập trình C, như sau:

#! / bin / bash
cho ((số = 1; số <100; số ++))
{
if (($ number% 5 == 0))
sau đó
echo "$ số chia hết cho 5"
fi
}
thoát 0

Vòng lặp bắt đầu bằng cách đặt số biến thành 1 (số = 1 ). Vòng lặp sẽ tiếp tục lặp lại trong khi giá trị của một số nhỏ hơn 100 ( số <100 ). Giá trị của các thay đổi số bằng cách thêm 1 vào nó sau mỗi lần lặp ( số ++ ).

Mọi thứ giữa các dấu ngoặc nhọn được thực hiện qua mỗi lần lặp của vòng lặp.

Các bit giữa các niềng răng kiểm tra giá trị của một số , chia cho 5, và so sánh phần còn lại với 0. Nếu phần còn lại bằng 0 thì số chia hết cho 5 và sau đó được hiển thị trên màn hình.

Ví dụ:

Nếu bạn muốn thay đổi kích thước bước của phép lặp, bạn có thể sửa đổi phần số ++ thành số = số + 2 , số = số + 5 hoặc số = số + 10 v.v.

Điều này có thể được giảm thêm thành số + = 2 hoặc số + = 5 .

Một ví dụ thực tế

Đối với các vòng lặp có thể làm nhiều hơn các danh sách các số lặp. Bạn thực sự có thể sử dụng đầu ra của các lệnh khác làm danh sách.

Ví dụ sau đây cho thấy làm thế nào để chuyển đổi các tập tin âm thanh từ MP3 sang WAV :

#! / bin / bash

Danh sách trong ví dụ này là mọi tệp có phần mở rộng .MP3 trong thư mục hiện tại và biến là một tệp .

Lệnh mpg chuyển đổi tập tin MP3 thành WAV. Tuy nhiên, bạn có thể cần phải cài đặt điều này bằng cách sử dụng trình quản lý gói của bạn trước tiên.