Nhập môn Bash Scripting
Alex Scriven
Data Scientist
Python:
for x in range(3):
print(x)
0
1
2
R:
for (x in seq(3)){
print(x)
}
[1] 1
[1] 2
[1] 3
Cấu trúc cơ bản trong Bash cũng tương tự:
for x in 1 2 3do echo $x done
1
2
3
Bash có cách tạo dải số gọn gọi là “brace expansion”:
{START..STOP..INCREMENT}for x in {1..5..2}do echo $x done
1
3
5
Một cách phổ biến khác là cú pháp “ba biểu thức”.
x=2)x<=4)x+=2)
for ((x=2;x<=4;x+=2))
do
echo $x
done
2
4
Bash cho phép mở rộng mẫu (glob) vào vòng lặp for bằng ký hiệu *, như danh sách tệp trong thư mục.
Ví dụ, giả sử có hai tệp văn bản trong thư mục /books:
for book in books/*
do
echo $book
done
books/book1.txt
books/book2.txt
Nhớ cách tạo shell-lồng-trong-shell bằng ký pháp $() chứ?
Bạn có thể gọi trực tiếp trong vòng lặp for!
Giả sử cấu trúc thư mục như sau:

Ta có thể lặp qua kết quả của shell-lồng-trong-shell:
for book in $(ls books/ | grep -i 'air')do echo $book done
AirportBook.txt
FairMarketBook.txt
Tương tự vòng lặp FOR, nhưng bạn đặt điều kiện kiểm tra ở mỗi vòng.
Lặp cho đến khi điều kiện không còn đúng.
while thay cho for-le)&& (AND) hoặc || (OR)Ví dụ đơn giản:
x=1while [ $x -le 3 ];do echo $x ((x+=1)) done
1
2
3
Cẩn thận vòng lặp WHILE vô hạn nếu điều kiện dừng không bao giờ thỏa.
x=1
while [ $x -le 3 ];
do
echo $x
# không tăng x. Nó sẽ không bao giờ đạt 3!
# ((x+=1))
done
Điều này sẽ in 1 mãi mãi!
Nhập môn Bash Scripting