1. Điều kiện trong bash: if, else, và một chút phép thuật
Điều kiện để làm gì?
Điều kiện cho phép script của bạn đưa ra quyết định dựa trên dữ liệu đầu vào, biến, hoặc thậm chí kết quả của các command. Ví dụ, bạn muốn kiểm tra xem tệp có tồn tại không, hoặc đảm bảo rằng server khả dụng trước khi thực thi hành động tiếp theo. Đây là lúc cấu trúc if phát huy tác dụng.
Cú pháp cơ bản
Đây là cách một điều kiện if cổ điển trông như thế trong bash:
if [ điều kiện ]; then
# Code ở đây sẽ chạy nếu điều kiện đúng
echo "Điều kiện đã được thực hiện!"
else
# Code ở đây sẽ chạy nếu điều kiện sai
echo "Điều kiện không được thực hiện!"
fi
Từ khóa:
if,then,else, vàfi(đóng blockif) — là những từ ma thuật. Không có chúng script sẽ không chạy được.- Dấu ngoặc vuông
[ ... ]được dùng để kiểm tra điều kiện.
Ví dụ 1: Kiểm tra sự tồn tại của tệp
#!/bin/bash
FILE="/etc/passwd"
if [ -f $FILE ]; then
echo "Tệp $FILE tồn tại."
else
echo "Tệp $FILE không tìm thấy."
fi
Giải thích:
-fkiểm tra xem tệp có tồn tại không.- Nếu tệp tồn tại, lệnh
echosẽ in ra thông báo cho điều đó. Nếu không, blockelsesẽ được thực thi.
Điều kiện với các lệnh
Bạn có thể sử dụng kết quả thực thi của một lệnh làm điều kiện, bởi vì trong Linux mọi thứ đều là một lệnh.
Ví dụ 2: Kiểm tra khả dụng của trang web
#!/bin/bash
if ping -c 1 example.com &> /dev/null; then
echo "Trang web khả dụng."
else
echo "Trang web không khả dụng."
fi
Giải thích:
ping -c 1gửi một yêu cầu tới server. Nếu server phản hồi, điều kiện sẽ trở thành đúng.&> /dev/nullẩn output của lệnh để không làm lộn xộn terminal.
Sử dụng operator elif
Đôi khi chỉ if và else là không đủ. Bạn cần xem xét nhiều điều kiện. Đây là lúc elif xuất hiện.
Ví dụ 3: Xác định thời gian trong ngày
#!/bin/bash
HOUR=$(date +%H)
if [ $HOUR -lt 12 ]; then
echo "Chào buổi sáng!"
elif [ $HOUR -lt 18 ]; then
echo "Chào buổi chiều!"
else
echo "Chào buổi tối!"
fi
Giải thích:
date +%Htrả về giờ hiện tại theo định dạng 24 giờ.- Chúng ta so sánh thời gian hiện tại với các giá trị cố định: nếu nhỏ hơn 12 — buổi sáng, nhỏ hơn 18 — buổi chiều, còn lại — buổi tối.
2. Vòng lặp trong bash: lặp đi lặp lại — là mẹ của học tập
Vòng lặp là cách để khiến script của bạn lặp lại hành động trong khi một điều kiện nào đó đang được thỏa mãn. Điều này đặc biệt hữu ích nếu bạn cần xử lý nhiều tệp, thực hiện một tác vụ nhiều lần hoặc đợi một sự kiện cụ thể.
Vòng lặp for
for duyệt qua danh sách các giá trị (ví dụ: tệp hoặc số) và thực hiện hành động được chỉ định trên mỗi phần tử trong danh sách đó.
Ví dụ 4: Vòng lặp for đơn giản
#!/bin/bash
for i in {1..5}; do
echo "Đây là lần lặp thứ $i"
done
Giải thích:
{1..5}— danh sách các số từ 1 đến 5.- Trong mỗi lần lặp, biến
inhận giá trị từ danh sách.
Ví dụ 5: Duyệt qua các tệp trong thư mục
#!/bin/bash
for FILE in /etc/*; do
echo "Đang xử lý tệp: $FILE"
done
Giải thích:
/etc/*— là danh sách tất cả các tệp trong thư mục/etc.- Trong mỗi lần lặp, biến
FILEchứa tên của một tệp.
Vòng lặp while
while thực hiện hành động trong khi điều kiện được thỏa mãn.
Ví dụ 6: Đoán số
#!/bin/bash
SECRET=5
GUESS=0
while [ $GUESS -ne $SECRET ]; do
echo "Nhập phán đoán của bạn (số từ 1 đến 10):"
read GUESS
done
echo "Bạn đã đoán đúng!"
Giải thích:
[ $GUESS -ne $SECRET ]— điều kiện tiếp tục trong khi số được nhậpGUESSkhông bằng với số bí mậtSECRET.
Kết hợp vòng lặp và điều kiện
Đôi khi điều kiện và vòng lặp làm việc cùng nhau.
Ví dụ 7: Kiểm tra nhiều trang web
#!/bin/bash
SITES=("example.com" "google.com" "nonexistent.website")
for SITE in ${SITES[@]}; do
if ping -c 1 $SITE &> /dev/null; then
echo "$SITE khả dụng."
else
echo "$SITE không khả dụng."
fi
done
Giải thích:
- Mảng
SITESchứa danh sách các trang web. forduyệt qua từng trang web trong mảng.ifkiểm tra xem trang web có khả dụng hay không bằng cách sử dụngping.
3. Bài tập thực hành
Kiểm tra domain
Viết một script nhận tên domain làm tham số và kiểm tra tính khả dụng của nó.
Gợi ý:
if ping -c 1 $1 &> /dev/null; then
echo "Domain khả dụng."
else
echo "Domain không khả dụng."
fi
Quản lý file
Viết một script kiểm tra sự tồn tại của nhiều file và hiển thị kết quả cho từng file.
Gợi ý:
FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
if [ -f $FILE ]; then
echo "$FILE tồn tại."
else
echo "$FILE không tìm thấy."
fi
done
Bảng cửu chương
Viết một script với vòng lặp lồng nhau, in ra bảng cửu chương cho các số từ 1 đến 10.
Gợi ý:
for i in {1..10}; do
for j in {1..10}; do
echo -n "$((i * j)) "
done
echo ""
done
Bây giờ bạn có thể thêm trí thông minh và logic vào bash script của mình. Điều kiện sẽ cho phép bạn kiểm tra trạng thái và đưa ra quyết định, còn vòng lặp sẽ giúp bạn tự động hóa những công việc lặp đi lặp lại. Còn rất nhiều cơ hội phía trước để bạn tự động hóa công việc đấy!
GO TO FULL VERSION