Vòng lặp For trong Bash
Trong chủ đề này, chúng ta sẽ tìm hiểu cách sử dụng vòng lặp for trong các kịch bản Bash.
Giống như bất kỳ ngôn ngữ lập trình nào khác, shell script của bash cũng hỗ trợ ‘vòng lặp for’ để thực hiện các nhiệm vụ lặp lại. Nó giúp chúng ta lặp lại một tập hợp cụ thể các lệnh trên một loạt các từ trong một chuỗi hoặc các phần tử trong một mảng. Ví dụ, bạn có thể chạy lệnh (hoặc tác vụ) UNIX nhiều lần hoặc chỉ đơn giản là đọc và xử lý danh sách các lệnh bằng cách sử dụng ‘vòng lặp for’.
Cú pháp của For Loop
Chúng ta có thể áp dụng ‘vòng lặp for’ trong kịch bản bash theo hai cách. Một cách là ‘for-in’ và cách khác là cú pháp kiểu c. Sau đây là cú pháp của ‘vòng lặp for’ trong shell script của bash:
for variable in list
do
commands
done
Hoặc
for (( expression1; expression2; expression3 ))
do
commands
done
Dưới đây là vài điểm chính của câu lệnh ‘for loop’:
Mỗi khối của ‘for loop’ trong Bash bắt đầu bằng từ khóa ‘do’ theo sau là các lệnh trong khối. Câu lệnh ‘for loop’ được đóng bằng từ khóa ‘done’.
Số lần lặp của ‘for loop’ phụ thuộc vào các biến danh sách được khai báo.
Vòng lặp sẽ chọn một phần tử từ danh sách và gán giá trị cho một biến sẽ được sử dụng trong vòng lặp.
Sau khi thực thi các lệnh giữa ‘do’ và ‘done’, vòng lặp quay lại đầu và chọn phần tử tiếp theo trong danh sách và lặp lại toàn bộ quá trình.
Danh sách có thể chứa các số hoặc chuỗi vv, được phân tách bởi dấu cách.
Dưới đây là một số ví dụ về ‘for loop’ để minh họa cách thức hoạt động của chúng:
Ví dụ về ‘For Loop’ Cơ bản:
#!/bin/bash
#This is the basic example of 'for loop'.
learn="Start learning from Javatpoint."
for learn in $learn
do
echo $learn
done
echo "Thank You."
Kết quả
Vòng lặp for để đọc một phạm vi
Đoạn mã Bash:
#!/bin/bash
#This is the basic example to print a series of numbers from 1 to 10.
for num in {1..10}
do
echo $num
done
echo "Series of numbers from 1 to 10."
Kết quả
Vòng lặp For để đọc một phạm vi với tăng/giảm
Chúng ta có thể tăng hoặc giảm một giá trị đã xác định bằng cách thêm hai dấu chấm (..) và giá trị để tăng lên, ví dụ: {START..END..INCREMENT}. Xem ví dụ bên dưới:
Đối với tăng lên:
#!/bin/bash
#For Loop to Read a Range with Increment
for num in {1..10..1}
do
echo $num
done
Kết quả
Giảm xuống
#!/bin/bash
#For Loop to Read a Range with Decrement
for num in {10..0..1}
do
echo $num
done
Kết quả
Vòng lặp ‘for’ để đọc các biến mảng:
Chúng ta có thể sử dụng vòng lặp ‘for’ để lặp lại các giá trị của một mảng. Cú pháp có thể được định nghĩa như sau:
array=( "element1" "element 2" . . "elementN" )
for i in "${arr[@]}"
do
echo $i
done
Đầu tiên, chúng ta đã khai báo một mảng chứa một số giá trị bất kỳ. Tiếp theo, chúng ta đã sử dụng vòng lặp ‘for’ để lặp lại các giá trị của mảng. Vòng lặp được khởi tạo bằng cách sử dụng cú pháp “for i in ${array[@]}” trong đó i là biến chứa giá trị của từng phần tử trong mảng. Sau đó, các lệnh được thực thi trong khối ‘do’-‘done’ với giá trị của i được sử dụng để tham chiếu đến từng phần tử của mảng. Kết quả của mỗi phần tử được in ra màn hình bởi lệnh ‘echo’.
#!/bin/bash
#Array Declaration
arr=( "Welcome""to""Javatpoint" )
for i in "${arr[@]}"
do
echo $i
done
Kết quả
Vòng lặp ‘for’ để đọc các khoảng trắng trong chuỗi làm phân tách từ Cú pháp có thể được xác định như sau:
#!/bin/bash
for word in $str;
do
<Statements>
done
Ở đây, str đề cập đến một chuỗi.
Các lệnh từ ‘do’ đến ‘done’ được thực thi cho mỗi ‘từ’ trong chuỗi. Hãy xem ví dụ dưới đây:
Kịch bản Bash:
#!/bin/bash
#For Loop to Read white spaces in String as word separators
str="Let's start
learning from Javatpoint."
for i in $str;
do
echo "$i"
done
Kết quả
Vòng lặp For để đọc mỗi dòng trong chuỗi như một từ. Cú pháp có thể được định nghĩa như sau:
#!/bin/bash
for word in "$str";
do
<Statements>
done
Ở đây, str đề cập đến một chuỗi.
Các câu lệnh từ ‘do’ đến ‘done’ được thực thi cho mỗi ‘dòng’ của chuỗi. Hãy xem ví dụ bên dưới:
Đoạn mã Bash:
#!/bin/bash
#For Loop to Read each line in String as a word
str="Let's start
learning from
Javatpoint."
for i in "$str";
do
echo "$i"
done
Kết quả
Chú ý: Sự khác biệt duy nhất giữa ‘For Loop to Read white spaces in String as word separators’ và ‘For Loop to Read each line in String as a word’ là dấu ngoặc kép xung quanh biến chuỗi.
Vòng lặp For để đọc ba biểu thức
Cú pháp ba biểu thức là cú pháp vòng lặp ‘for’ phổ biến nhất. Biểu thức đầu tiên tham chiếu đến quá trình khởi tạo, biểu thức thứ hai tham chiếu đến điều kiện dừng, và biểu thức thứ ba tham chiếu đến sự tăng hoặc giảm.
Kiểm tra ví dụ bên dưới để in các số từ 1 đến 10 sử dụng ba biểu thức với vòng lặp ‘for’:
#!/bin/bash
#For Loop to Read Three-expression
for ((i=1; i<=10; i++))
do
echo "$i"
done
Kết quả
Vòng lặp ‘for’ với câu lệnh ‘break’ Câu lệnh ‘break’ có thể được sử dụng trong vòng lặp ‘for’ để thoát khỏi vòng lặp.
#!/bin/bash
#Table of 2
for table in {2..100..2}
do
echo $table
if [ $table == 20 ]; then
break
fi
done
Kết quả
Vòng lặp ‘for’ với lệnh ‘continue’.
Chúng ta có thể sử dụng lệnh ‘continue’ bên trong vòng lặp ‘for’ để bỏ qua bất kỳ lệnh nào trong một điều kiện cụ thể. Nó báo cho Bash dừng thực thi vòng lặp của phần tử đó và thực thi phần tử của vòng lặp tiếp theo.
Kịch bản Bash:
#!/bin/bash
#Numbers from 1 to 20, ignoring from 6 to 15 using continue statement"
for ((i=1; i<=20; i++));
do
if [[ $i -gt 5 && $i -lt 16 ]];
then
continue
fi
echo $i
done
Kết quả
Vòng lặp for vô hạn trong Bash được tạo ra khi không có ‘start, condition và increment’ trong ba biểu thức của vòng lặp for. Để kết thúc vòng lặp vô hạn trong Bash, chúng ta có thể nhấn Ctrl+C.
Bash Script (đoạn mã vòng lặp for vô hạn):
#!/bin/bash
i=1;
for (( ; ; ))
do
sleep 1s
echo "Current Number: $((i++))"
done
Kết quả
Kết luận
Trong chủ đề này, chúng ta đã thảo luận về cách sử dụng câu lệnh for loop trong Bash để thực hiện các nhiệm vụ cụ thể.