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é!

Unix / Linux - Decision Making

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...elsecase...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