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 2 và var2 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