Chào mừng đến với phần bốn của loạt bài hướng dẫn về tập lệnh shell của HowtoForge (Nhấp vào đây để đọc phần 1, phần 2 và phần 3 của bài hướng dẫn). Trong phần này, chúng tôi sẽ đề cập đến các cấu trúc điều khiển lặp lại khác nhau của bash shell và cách sử dụng từng cấu trúc bằng cách cung cấp một số ví dụ. Chúng ta hãy bắt đầu.
Cú pháp này bắt đầu bằng từ khóa for, sau đó theo sau là tên biến, từ khóa in và danh sách các giá trị có thể có cho biến. Mỗi giá trị trong danh sách sẽ được phân tách bằng một khoảng trắng và phần bắt đầu của các dòng mã sẽ được lặp lại được định nghĩa trong do và kết thúc bằng từ khóa done.
Hãy tạo một câu lệnh lặp for đơn giản cho phép người dùng nhập 5 giá trị và lấy tổng của các số:
Trong ví dụ này, biến var đóng vai trò là bộ đếm của vòng lặp. Giá trị của nó được định nghĩa trong danh sách các số sau từ khóa in và shell thay đổi các giá trị của biến var sau mỗi lần thực hiện chu kỳ trong câu lệnh lặp. Vì chỉ có năm giá trị số nguyên trong danh sách của chúng ta, shell sẽ thực thi các mã bên trong câu lệnh lặp của chúng ta chỉ năm lần.
Dòng list="var1 var2 var3 var4" xác định các giá trị của biến list. Sau đó, nó được gán cho var trong dòng for var in $list và cuối cùng, các thư mục sau đó được tạo trong dòng mkdir $var.
Tiếp theo, hãy mở một tab mới trong cùng trình soạn thảo văn bản đó và tạo một tập lệnh mới. Tập lệnh này phải được lưu trong cùng thư mục nơi lưu danh sách các thư mục mà bạn đã tạo trước đó.
Ví dụ này trở nên hữu ích khi bạn phải tạo hàng trăm thư mục trên máy tính Linux của mình, bạn không nghĩ vậy sao?
Có lẽ, cấu trúc quen thuộc nhất của vòng lặp for mà shell hỗ trợ là cấu trúc giống C. Vòng lặp bắt đầu bằng việc khởi tạo biến đếm và sau đó shell đánh giá biểu thức Boolean được khai báo sau khi khởi tạo. Nếu biểu thức Boolean result là true, thì shell sẽ thực thi tập hợp các câu lệnh bên trong mệnh đề do, nếu không, nó sẽ kết thúc câu lệnh lặp và tiến tới dòng sau từ khóa done. Shell sẽ tiến tới lần lặp tiếp theo thông qua câu lệnh tăng hoặc giảm được khai báo sau phép thử Boolean. Ví dụ, chúng ta hãy xây dựng lại ví dụ đầu tiên của mình bằng cách sử dụng cấu trúc này.
Giới thiệu
Cấu trúc điều khiển lặp lại, còn được gọi là cấu trúc điều khiển vòng lặp, là một loại cấu trúc điều khiển trong ngôn ngữ lập trình được sử dụng để đơn giản hóa các tác vụ lặp lại hoặc đệ quy. Các câu lệnh vòng lặp tối ưu hóa mọi mã bằng cách cung cấp một cách để giảm thiểu mã, giúp khắc phục sự cố dễ dàng hơn so với mã không có cấu trúc cung cấp cùng một đầu ra. Có ba loại câu lệnh lặp mà bash shell hỗ trợ - vòng lặp for, while và until.Vòng lặp For
Vòng lặp for là một câu lệnh lặp sử dụng từ khóa for để khai báo một câu lệnh lặp lại. Bash hỗ trợ các cú pháp khác nhau cho câu lệnh vòng lặp for:Cú pháp 1: Cấu trúc For-in
Mã:
for in
do
#### câu lệnh của bạn ở đây
done
Hãy tạo một câu lệnh lặp for đơn giản cho phép người dùng nhập 5 giá trị và lấy tổng của các số:
Mã:
#!/bin/bash
result=0;
input=0;
for var in 1 2 3 4 5
do
printf "Input integer %d : " $var
read input
result=$((result+input))
done
echo "the result is " $result
Trong ví dụ này, biến var đóng vai trò là bộ đếm của vòng lặp. Giá trị của nó được định nghĩa trong danh sách các số sau từ khóa in và shell thay đổi các giá trị của biến var sau mỗi lần thực hiện chu kỳ trong câu lệnh lặp. Vì chỉ có năm giá trị số nguyên trong danh sách của chúng ta, shell sẽ thực thi các mã bên trong câu lệnh lặp của chúng ta chỉ năm lần.
Cú pháp 2: Câu lệnh lặp For với các giá trị danh sách String
Bạn cũng có thể khai báo một biến sẽ giữ danh sách các mục cho bộ đếm của bạn. Ví dụ, hãy xem xét đoạn mã sau:
Mã:
#!/bin/bash
list="var1 var2 var3 var4"
var=""
mkdir sample
cd sample
echo creating the "directories...."
for var in $list
do
mkdir $var
done
Dòng list="var1 var2 var3 var4" xác định các giá trị của biến list. Sau đó, nó được gán cho var trong dòng for var in $list và cuối cùng, các thư mục sau đó được tạo trong dòng mkdir $var.
Cú pháp 3: Câu lệnh vòng lặp For với danh sách dưới dạng tệp
Bạn cũng có thể truy xuất danh sách từ tệp hiện có để sử dụng trong câu lệnh vòng lặp for thay vì khai báo nó bên trong mã của mình bằng cách sử dụng lệnh cat. Ví dụ, hãy mở trình soạn thảo văn bản yêu thích của bạn rồi liệt kê ít nhất năm tên thư mục.Tiếp theo, hãy mở một tab mới trong cùng trình soạn thảo văn bản đó và tạo một tập lệnh mới. Tập lệnh này phải được lưu trong cùng thư mục nơi lưu danh sách các thư mục mà bạn đã tạo trước đó.
Mã:
#!/bin/bash
dirList=$(cat list)
echo "created directories...."
for var in $dirList
do
mkdir $var
done
Ví dụ này trở nên hữu ích khi bạn phải tạo hàng trăm thư mục trên máy tính Linux của mình, bạn không nghĩ vậy sao?
Cú pháp 4: Cú pháp giống C
Mã:
for((initialization; boolean_test; increment/decrement))
do
#### mã của bạn sẽ ở đây
done
Mã:
#!/bin/bash
result=0
input=0
for((var=1;var