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
โครงสร้างพื้นฐานใน Bash มีลักษณะคล้ายกัน:
for x in 1 2 3do echo $x done
1
2
3
Bash มีวิธีสร้างช่วงตัวเลขที่เรียกว่า "brace expansion":
{START..STOP..INCREMENT}for x in {1..5..2}do echo $x done
1
3
5
อีกรูปแบบที่นิยมใช้คือ "three expression" syntax
x=2)x<=4)x+=2)
for ((x=2;x<=4;x+=2))
do
echo $x
done
2
4
Bash รองรับการขยายรูปแบบ (pattern-matching) ใน for loop ด้วยสัญลักษณ์ * เช่น ไฟล์ในไดเรกทอรี
ตัวอย่างเช่น สมมติว่ามีเอกสารข้อความสองไฟล์ในโฟลเดอร์ /books:
for book in books/*
do
echo $book
done
books/book1.txt
books/book2.txt
จำการสร้าง shell-within-a-shell ด้วย $() ได้ไหม?
สามารถเรียกใช้ใน for loop ได้เลย!
สมมติว่าโครงสร้างโฟลเดอร์เป็นดังนี้:

สามารถวนลูปผ่านผลลัพธ์ของ shell-within-a-shell ได้:
for book in $(ls books/ | grep -i 'air')do echo $book done
AirportBook.txt
FairMarketBook.txt
คล้ายกับ FOR loop แต่กำหนดเงื่อนไขที่ตรวจสอบในทุกรอบ
วนซ้ำต่อไปจนกว่าเงื่อนไขไม่เป็นจริง!
while แทน for-le)&& (AND) หรือ || (OR) เหมือน IFตัวอย่างง่าย ๆ:
x=1while [ $x -le 3 ];do echo $x ((x+=1)) done
1
2
3
ระวัง infinite loop หากเงื่อนไขหยุดไม่เคยเป็นจริง
x=1
while [ $x -le 3 ];
do
echo $x
# don't increment x. It never reaches 3!
# ((x+=1))
done
โค้ดนี้จะพิมพ์ 1 ออกมาตลอดไป!
Bash Scripting เบื้องต้น