Unix / Linux - Điều khiển vòng lặp

Xin chào, các bạn học lập trình! Hôm nay, chúng ta sẽ cùng khám phá thế giới thú vị của điều khiển vòng lặp trong lập trình shell script của Unix và Linux. Là giáo viên máy tính hàng xóm thân thiện của bạn, tôi sẽ dẫn đường cho bạn trong hành trình này, từng bước một. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ những điều cơ bản và dần dần nâng cao. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu bạn thích), và chúng ta cùng bắt đầu học về vòng lặp!

Unix / Linux - Loop Control

Hiểu về Vòng lặp

Trước khi chúng ta nhảy vào điều khiển vòng lặp, hãy nhanh chóng ôn lại vòng lặp là gì. Hãy tưởng tượng bạn được giao nhiệm vụ viết "Tôi yêu lập trình" lên bảng đen 100 lần. Thay vì viết手动 100 lần, bạn có thể sử dụng vòng lặp để tự động hóa nhiệm vụ lặp lại này. Đó chính xác là điều vòng lặp làm trong lập trình - chúng cho phép chúng ta thực thi một bộ lệnh nhiều lần mà không cần viết chúng điệp lại nhiều lần.

Vòng lặp vô hạn

Bây giờ, hãy nói về một điều thú vị nhưng cũng có thể nguy hiểm: vòng lặp vô hạn. Nó giống như một vòng đu quay không bao giờ dừng lại - nó cứ tiếp tục và tiếp tục.

Vòng lặp vô hạn là gì?

Một vòng lặp vô hạn là một vòng lặp tiếp tục chạy mãi mãi vì điều kiện kết thúc của nó không bao giờ được thỏa mãn. Mặc dù điều này có thể听起来 như một công thức cho thảm họa, nhưng thực tế có những tình huống mà vòng lặp vô hạn lại rất hữu ích (chúng ta sẽ thảo luận về điều đó sau).

Ví dụ về vòng lặp vô hạn

Dưới đây là một ví dụ đơn giản về vòng lặp vô hạn trong lập trình shell script:

#!/bin/bash
while true
do
echo "This is an infinite loop!"
sleep 1
done

Trong script này:

  • while true tạo ra một điều kiện luôn đúng, vì vậy vòng lặp không bao giờ dừng.
  • echo in ra thông điệp của chúng ta.
  • sleep 1 dừng script trong 1 giây trước khi phiên bản tiếp theo.

Nếu bạn chạy script này, bạn sẽ thấy "This is an infinite loop!" được in ra mỗi giây cho đến khi bạn dừng script thủ công (thường bằng cách nhấn Ctrl+C).

Khi nào chúng ta có thể sử dụng vòng lặp vô hạn?

tin không phải vòng lặp vô hạn luôn xấu! Chúng có thể hữu ích trong các tình huống như:

  1. Tạo một chương trình cần chạy liên tục (như một máy chủ).
  2. Thực hiện một hệ thống menu cho phép người dùng chọn các tùy chọn liên tục.
  3. Giám sát các hệ thống cho các sự kiện hoặc điều kiện cụ thể.

Nhớ rằng, với quyền lực lớn đi kèm với trách nhiệm lớn. Luôn đảm bảo bạn có cách để thoát khỏi vòng lặp vô hạn khi cần!

Lệnh break

Bây giờ chúng ta đã biết vòng lặp có thể chạy mãi mãi, hãy học cách dừng chúng khi chúng ta muốn. Đó là lúc lệnh break xuất hiện - lối thoát khẩn cấp khỏi bất kỳ vòng lặp nào.

Lệnh break làm gì?

Lệnh break làm chính xác những gì tên của nó暗示 - nó "dừng" khỏi vòng lặp hiện tại, bất kể điều kiện của vòng lặp có còn đúng hay không.

Ví dụ về việc sử dụng break

Hãy thay đổi vòng lặp vô hạn trước đó để dừng sau 5 lần lặp:

#!/bin/bash
count=0
while true
do
echo "Loop iteration: $count"
count=$((count + 1))
if [ $count -eq 5 ]
then
echo "Breaking the loop!"
break
fi
sleep 1
done
echo "Loop has ended."

Trong script này:

  • Chúng ta khởi tạo một biến count để theo dõi số lần lặp.
  • Mỗi lần lặp, chúng ta tăng count và kiểm tra xem nó có bằng 5 hay không.
  • Nếu count bằng 5, chúng ta in ra một thông điệp và sử dụng break để thoát khỏi vòng lặp.

Khi bạn chạy script này, bạn sẽ thấy nó đếm đến 5 và sau đó dừng lại.

Lệnh continue

Trong khi break cho phép chúng ta thoát khỏi vòng lặp hoàn toàn, đôi khi chúng ta chỉ muốn bỏ qua phần còn lại của lần lặp hiện tại và chuyển sang lần lặp tiếp theo. Đó là lúc lệnh continue phát huy tác dụng.

Lệnh continue làm gì?

Lệnh continue bỏ qua phần còn lại của lần lặp hiện tại và nhảy đến lần lặp tiếp theo.

Ví dụ về việc sử dụng continue

Hãy tạo một script in ra các số từ 1 đến 10, nhưng bỏ qua các số chẵn:

#!/bin/bash
for i in {1..10}
do
if [ $((i % 2)) -eq 0 ]
then
continue
fi
echo $i
done

Trong script này:

  • Chúng ta sử dụng một vòng lặp for để đếm từ 1 đến 10.
  • if [ $((i % 2)) -eq 0 ] kiểm tra xem số có phải là chẵn hay không (chia cho 2 không có phần dư).
  • Nếu số là chẵn, continue bỏ qua phần còn lại của lần lặp hiện tại.
  • Nếu không, chúng ta in ra số.

Khi bạn chạy script này, bạn sẽ thấy chỉ các số lẻ được in ra: 1, 3, 5, 7, 9.

Kết hợp tất cả

Bây giờ chúng ta đã học về vòng lặp vô hạn, break, và continue, hãy tạo một ví dụ phức tạp hơn sử dụng tất cả các khái niệm này:

#!/bin/bash

echo "Welcome to the Number Guessing Game!"
secret_number=$((RANDOM % 10 + 1))
attempts=0

while true
do
read -p "Guess a number between 1 and 10 (or 'q' to quit): " guess

if [ "$guess" = "q" ]
then
echo "Thanks for playing! The secret number was $secret_number."
break
fi

if ! [[ "$guess" =~ ^[0-9]+$ ]]
then
echo "Please enter a valid number or 'q' to quit."
continue
fi

attempts=$((attempts + 1))

if [ "$guess" -eq "$secret_number" ]
then
echo "Congratulations! You guessed the number in $attempts attempts!"
break
elif [ "$guess" -lt "$secret_number" ]
then
echo "Too low! Try again."
else
echo "Too high! Try again."
fi
done

Script này tạo một trò chơi đoán số đơn giản minh họa:

  • Một vòng lặp vô hạn để giữ game chạy.
  • Sử dụng break để thoát khỏi vòng lặp khi người chơi đoán đúng hoặc chọn thoát.
  • Sử dụng continue để bỏ qua các đầu vào không hợp lệ.

Tóm tắt các lệnh điều khiển vòng lặp

Dưới đây là bảng tóm tắt các lệnh điều khiển vòng lặp chúng ta đã học:

Lệnh Mô tả Trường hợp sử dụng
while true Tạo một vòng lặp vô hạn Khi bạn cần một vòng lặp chạy liên tục cho đến khi một điều kiện cụ thể được thỏa mãn
break Thoát khỏi vòng lặp hiện tại Khi bạn muốn dừng vòng lặp dựa trên một điều kiện cụ thể
continue Bỏ qua phần còn lại của lần lặp hiện tại Khi bạn muốn bỏ qua phần còn lại của lần lặp hiện tại dựa trên một điều kiện

Nhớ rằng, vòng lặp là công cụ mạnh mẽ trong lập trình, nhưng với quyền lực lớn đi kèm với trách nhiệm lớn. Luôn đảm bảo bạn có cách để thoát khỏi vòng lặp và sử dụng breakcontinue một cách judiciously để tạo ra các script hiệu quả và hiệu quả.

Chúc mừng coding, các pháp sư shell scripting tương lai! Hãy để vòng lặp của bạn vô hạn chỉ khi bạn muốn và lệnh break của bạn luôn có mặt khi bạn cần. Hẹn gặp lại các bạn, hãy tiếp tục loop và học hỏi!

Credits: Image by storyset