CodeGym /Các khóa học /Docker SELF /Điều kiện (`if`, `else`) và vòng lặp (`for`, `while`) tro...

Điều kiện (`if`, `else`) và vòng lặp (`for`, `while`) trong bash

Docker SELF
Mức độ , Bài học
Có sẵn

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 block if) — 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:

  • -f kiểm tra xem tệp có tồn tại không.
  • Nếu tệp tồn tại, lệnh echo sẽ in ra thông báo cho điều đó. Nếu không, block else sẽ đượ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 1 gử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ỉ ifelse 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 +%H trả 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 i nhậ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 FILE chứ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ập GUESS không bằng với số bí mật SECRET.

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 SITES chứa danh sách các trang web.
  • for duyệt qua từng trang web trong mảng.
  • if kiểm tra xem trang web có khả dụng hay không bằng cách sử dụng ping.

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!

1
Nhiệm vụ
Docker SELF, mức độ, bài học
Đã khóa
Kiểm tra sự tồn tại của tệp
Kiểm tra sự tồn tại của tệp
1
Nhiệm vụ
Docker SELF, mức độ, bài học
Đã khóa
Bảng số
Bảng số
1
Nhiệm vụ
Docker SELF, mức độ, bài học
Đã khóa
Số chẵn và số lẻ
Số chẵn và số lẻ
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION