Unix / Linux - Quyết định trong Shell Scripting
Xin chào, các bạn học lập trình! Hôm nay, chúng ta sẽ cùng nhau khám phá thế giới thú vị của việc ra quyết định trong lập trình Unix và Linux shell scripting. Là người thầy thân thiện trong khu phố máy tính, tôi sẽ dẫn đường cho bạn trong hành trình này, từng bước một. Vậy, hãy chuẩn bị đồ uống yêu thích của bạn, ngồi thoải mái, và cùng nhau bắt đầu cuộc phiêu lưu này nhé!
Cú pháp if...else
Hãy tưởng tượng bạn đang ở một ngã rẽ trong mã của mình và bạn cần phải ra quyết định dựa trên một số điều kiện. Đó là lúc các cú pháp if...else
phát huy tác dụng. Chúng giống như đèn giao thông trong lập trình, dẫn dắt mã của bạn theo các hướng khác nhau tùy thuộc vào việc các điều kiện là đúng hay sai.
Cú pháp if cơ bản
Hãy bắt đầu với dạng đơn giản nhất của cú pháp if
:
if [ điều kiện ]
then
lệnh1
lệnh2
...
lệnhN
fi
Dưới đây là một ví dụ thực tế:
#!/bin/bash
age=18
if [ $age -ge 18 ]
then
echo "Bạn đủ tuổi để đi bầu!"
fi
Trong ví dụ này, chúng ta đang kiểm tra xem biến age
có lớn hơn hoặc bằng 18 hay không. Nếu có, tin nhắn "Bạn đủ tuổi để đi bầu!" sẽ được hiển thị.
Cú pháp if...else
Bây giờ, nếu chúng ta muốn làm gì đó khi điều kiện là sai? Đó là lúc phần else
được sử dụng:
if [ điều kiện ]
then
lệnh1
lệnh2
...
lệnhN
else
lệnh_thay_thế1
lệnh_thay_thế2
...
lệnh_thay_thếN
fi
Hãy sửa đổi ví dụ về việc bầu cử của chúng ta:
#!/bin/bash
age=16
if [ $age -ge 18 ]
then
echo "Bạn đủ tuổi để đi bầu!"
else
echo "Xin lỗi, bạn quá trẻ để đi bầu."
fi
Bây giờ, nếu tuổi nhỏ hơn 18, nó sẽ hiển thị tin nhắn "Xin lỗi, bạn quá trẻ để đi bầu."
Cú pháp if...elif...else
Đôi khi, cuộc sống (và mã) không chỉ có đen và trắng. Chúng ta thường cần kiểm tra nhiều điều kiện. Đó là lúc phần elif
(else if) được sử dụng:
if [ điều kiện1 ]
then
lệnh1
elif [ điều kiện2 ]
then
lệnh2
else
lệnh_thay_thế
fi
Hãy tạo một ví dụ phức tạp hơn:
#!/bin/bash
grade=75
if [ $grade -ge 90 ]
then
echo "A - Xuất sắc!"
elif [ $grade -ge 80 ]
then
echo "B - Tốt!"
elif [ $grade -ge 70 ]
then
echo "C - Bạn đã qua!"
else
echo "F - Bạn cần học thêm."
fi
Script này đánh giá điểm số của học sinh và cung cấp phản hồi phù hợp dựa trên các phạm vi điểm khác nhau.
Cú pháp case...esac
Bây giờ, hãy tưởng tượng bạn đang ở một tiệc buffet với nhiều lựa chọn đồ ăn. Đó là điều mà cú pháp case...esac
trong lập trình giống như. Nó cho phép bạn so sánh một giá trị với danh sách các mẫu và thực hiện các lệnh dựa trên kết quả khớp.
Cú pháp cơ bản trông như thế này:
case biểu_thức in
mẫu1)
lệnh1
lệnh2
...
lệnhN
;;
mẫu2)
lệnh1
lệnh2
...
lệnhN
;;
*)
lệnh_mặc_định
;;
esac
Hãy xem một ví dụ thực tế:
#!/bin/bash
fruit="apple"
case $fruit in
"apple")
echo "Đó là một loại quả đỏ delicious!"
;;
"banana")
echo "Đó là một loại quả vàng cong!"
;;
"orange")
echo "Đó là một loại quả cam汁!"
;;
*)
echo "Tôi không biết loại quả này."
;;
esac
Trong ví dụ này, chúng ta đang khớp giá trị của fruit
với các mẫu khác nhau. Nếu nó khớp với "apple", nó sẽ hiển thị tin nhắn tương ứng. Nếu nó không khớp với bất kỳ mẫu nào được chỉ định, nó sẽ thực hiện lệnh mặc định (*
).
Nhiều mẫu
Bạn cũng có thể khớp nhiều mẫu cho cùng một tập lệnh:
#!/bin/bash
day=$(date +%A)
case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "Đó là ngày làm việc."
;;
Saturday|Sunday)
echo "Đó là cuối tuần. Thời gian để nghỉ ngơi!"
;;
*)
echo "Bạn đang ở hành tinh nào vậy?"
;;
esac
Script này kiểm tra ngày trong tuần hiện tại và outputs xem đó là ngày làm việc hay cuối tuần.
So sánh if...else và case...esac
Bây giờ, hãy so sánh hai cấu trúc ra quyết định này:
Tính năng | if...else | case...esac |
---|---|---|
Độ phức tạp | Xử lý được các điều kiện phức tạp | Tốt nhất cho việc khớp giá trị đơn giản |
Độ đọc | Có thể khó đọc với nhiều điều kiện | Dễ đọc hơn với nhiều điều kiện |
Hiệu suất | Nhẹ hơn cho nhiều điều kiện | Nhanh hơn cho nhiều điều kiện |
Độ linh hoạt | Có thể sử dụng bất kỳ loại điều kiện nào | Giới hạn trong việc khớp mẫu |
Trong những năm dạy học của mình, tôi thấy rằng sinh viên thường gặp khó khăn trong việc chọn giữa if...else
và case...esac
. Dưới đây là một quy tắc đơn giản: nếu bạn đang kiểm tra một biến chống lại nhiều giá trị có thể, case...esac
sẽ là người bạn của bạn. Còn lại, hãy sử dụng if...else
.
Nhớ rằng, lập trình giống như nấu ăn. Các cấu trúc ra quyết định này là nguyên liệu của bạn, và với sự gyak, bạn sẽ học cách sử dụng每一种 nguyên liệu để tạo ra món ăn... tôi có nghĩa là script!
Cuối cùng, việc ra quyết định là một khía cạnh quan trọng của shell scripting. Nó cho phép script của bạn thích ứng và phản hồi với các tình huống khác nhau, làm cho chúng mạnh mẽ và linh hoạt hơn. Dù bạn sử dụng if...else
hay case...esac
, bạn现在已经 được trang bị các công cụ để ra quyết định. Hãy tiếp tục thực hành, và sớm bạn sẽ viết được script có thể ra quyết định nhanh hơn bạn có thể nói "sudo"!
Credits: Image by storyset