Giống như bất kỳ ngôn ngữ kịch bản nào khác, Bash cũng hỗ trợ các vòng lặp.
Vòng lặp rất tốt để thực hiện các công việc lặp đi lặp lại. Chúng ta có thể sử dụng các vòng lặp for và vòng lặp while trong các tập lệnh Bash của mình.
Bash For Loop
Cú pháp của vòng lặp for là:
for VARIABLE in PARAM1 PARAM2 PARAM3
do
// scope of for loop
done
Vòng lặp for sẽ thực thi cho mỗi tham số. Các tham số có thể là số, phạm vi số hoặc chuỗi, v.v.
Ví dụ về Bash For Loop
Ví dụ đơn giản này in các số, từ 1 đến 5 bằng vòng lặp for:
#!/bin/bash
for i in 1 2 3 4 5
do
echo "$i"
done
Đầu ra:
1
2
3
4
5
Bash For Loop - Dải số In
Chúng tôi cũng có thể xác định một loạt các số để lặp qua:
Ví dụ:
for i in {1..5}
do
echo "$i"
done
Đầu ra:
1
2
3
4
5
Bash Loop Through Strings
Chúng ta cũng có thể sử dụng vòng lặp for để lặp qua các tham số chuỗi:
#!/bin/bash
for day in MON TUE WED THU FRI SAT SUN
do
echo "$day"
done
Đầu ra:
MON
TUE
WED
THU
FRI
SAT
SUN
Bash For Loop - C Style
Chúng ta cũng có thể sử dụng cú pháp kiểu C để viết vòng lặp for. Ví dụ:
#!/bin/bash
for ((i=1; i<=5; i++))
do
echo "$i"
done
Đầu ra
1
2
3
4
5
Vòng lặp để In Danh sách Tệp trong Thư mục Hiện tại
Để liệt kê tất cả các tệp trong thư mục hiện tại bằng vòng lặp bash for, chúng tôi sử dụng:
#!/bin/bash
for fname in ./
do
ls -l $fname
done
Bash While Loop
Bash cũng hỗ trợ vòng lặp while. Trong khi các vòng lặp thực thi một tập hợp các lệnh cho đến khi một điều kiện được đánh giá là true.
Cú pháp của vòng lặp Bash while là:
while [condition]
do
//execute instructions
done
Điều kiện được đánh giá trước khi thực hiện bất kỳ hướng dẫn nào. Do đó, cần phải có một phương tiện cập nhật điều kiện, nếu không, vòng lặp sẽ thực thi mãi mãi.
Ví dụ về Bash While Loop
Sau đây là một vòng lặp while đơn giản in các số từ 1 đến 5. Vòng lặp được kết thúc khi số lớn hơn 5.
#!/bin/bash
num=1
while [ $num -le 5 ]
do
echo "$num"
let num++
done
Bash C-Style While Loop
Giống như vòng lặp for, chúng ta cũng có thể viết vòng lặp bash while bằng ngôn ngữ giống như kiểu C.
Ví dụ:
#!/bin/bash
num=1
while((num <= 5))
do
echo $num
let num++
done