Unix / Linux - Kiểm soát vòng lặp Shell

Trong chương này, chúng ta sẽ thảo luận về điều khiển vòng lặp shell trong Unix. Cho đến nay, bạn đã xem xét việc tạo vòng lặp và làm việc với các vòng lặp để hoàn thành các nhiệm vụ khác nhau. Đôi khi bạn cần dừng một vòng lặp hoặc bỏ qua các lần lặp lại của vòng lặp.

Trong chương này, chúng ta sẽ tìm hiểu hai câu lệnh sau được sử dụng để điều khiển các vòng lặp

  • Các break tuyên bố

  • Các continue tuyên bố

Vòng lặp vô hạn

Tất cả các vòng lặp đều có tuổi thọ giới hạn và chúng xuất hiện khi điều kiện sai hoặc đúng tùy thuộc vào vòng lặp.

Một vòng lặp có thể tiếp tục mãi mãi nếu điều kiện bắt buộc không được đáp ứng. Vòng lặp thực thi mãi mãi mà không kết thúc thực thi trong một số lần vô hạn. Vì lý do này, các vòng lặp như vậy được gọi là vòng lặp vô hạn.

Thí dụ

Đây là một ví dụ đơn giản sử dụng while vòng lặp để hiển thị các số từ 0 đến 9 -

#!/bin/sh

a=10

until [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

Vòng lặp này tiếp tục mãi mãi bởi vì a luôn luôn greater than hoặc là equal to 10 và nó không bao giờ nhỏ hơn 10.

Tuyên bố nghỉ

Các breakcâu lệnh được sử dụng để kết thúc việc thực thi toàn bộ vòng lặp, sau khi hoàn thành việc thực thi tất cả các dòng mã cho đến câu lệnh break. Sau đó, nó bước xuống mã sau khi kết thúc vòng lặp.

Cú pháp

Sau break câu lệnh được sử dụng để thoát ra khỏi vòng lặp -

break

Lệnh break cũng có thể được sử dụng để thoát khỏi vòng lặp lồng nhau bằng cách sử dụng định dạng này:

break n

Đây n chỉ định nth vòng lặp bao quanh lối ra khỏi.

Thí dụ

Đây là một ví dụ đơn giản cho thấy rằng vòng lặp kết thúc ngay sau khi a trở thành 5 -

#!/bin/sh

a=0

while [ $a -lt 10 ]
do
   echo $a
   if [ $a -eq 5 ]
   then
      break
   fi
   a=`expr $a + 1`
done

Khi thực hiện, bạn sẽ nhận được kết quả sau:

0
1
2
3
4
5

Đây là một ví dụ đơn giản về vòng lặp for lồng nhau. Tập lệnh này thoát ra khỏi cả hai vòng lặp nếuvar1 equals 2var2 equals 0 -

#!/bin/sh

for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ]
      then
         break 2
      else
         echo "$var1 $var2"
      fi
   done
done

Sau khi thực hiện, bạn sẽ nhận được kết quả sau. Trong vòng lặp bên trong, bạn có lệnh break với đối số 2. Điều này chỉ ra rằng nếu một điều kiện được đáp ứng, bạn nên thoát ra khỏi vòng lặp bên ngoài và cuối cùng là từ vòng lặp bên trong.

1 0
1 5

Tuyên bố tiếp tục

Các continue tuyên bố tương tự như break , ngoại trừ việc nó làm cho quá trình lặp hiện tại của vòng lặp thoát ra, thay vì toàn bộ vòng lặp.

Câu lệnh này hữu ích khi xảy ra lỗi nhưng bạn muốn thử thực hiện lần lặp tiếp theo của vòng lặp.

Cú pháp

continue

Giống như với câu lệnh break, một đối số nguyên có thể được cấp cho lệnh continue để bỏ qua các lệnh khỏi các vòng lặp lồng nhau.

continue n

Đây n chỉ định nth vòng lặp bao quanh để tiếp tục.

Thí dụ

Vòng lặp sau sử dụng continue câu lệnh trả về từ câu lệnh continue và bắt đầu xử lý câu lệnh tiếp theo -

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS
do
   Q=`expr $NUM % 2`
   if [ $Q -eq 0 ]
   then
      echo "Number is an even number!!"
      continue
   fi
   echo "Found odd number"
done

Khi thực hiện, bạn sẽ nhận được kết quả sau:

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number