Unix / Linux - Các loại vòng lặp Shell
Trong chương này, chúng ta sẽ thảo luận về các vòng lặp shell trong Unix. Vòng lặp là một công cụ lập trình mạnh mẽ cho phép bạn thực hiện nhiều lần một nhóm lệnh. Trong chương này, chúng ta sẽ xem xét các loại vòng lặp sau có sẵn cho các lập trình viên shell:
- Vòng lặp while
- Vòng lặp for
- Vòng lặp cho đến khi
- Vòng lặp chọn
Bạn sẽ sử dụng các vòng lặp khác nhau dựa trên tình huống. Ví dụ,whilevòng lặp thực hiện các lệnh đã cho cho đến khi điều kiện đã cho vẫn đúng; cácuntil vòng lặp thực hiện cho đến khi một điều kiện nhất định trở thành đúng.
Một khi bạn có thực hành lập trình tốt, bạn sẽ có được kiến thức chuyên môn và do đó, bắt đầu sử dụng vòng lặp thích hợp dựa trên tình huống. Đây,while và for vòng lặp có sẵn trong hầu hết các ngôn ngữ lập trình khác như C, C++ và PERL, Vân vân.
Vòng lặp làm tổ
Tất cả các vòng lặp đều hỗ trợ khái niệm lồng nhau, có nghĩa là bạn có thể đặt một vòng lặp bên trong một vòng lặp khác tương tự hoặc các vòng lặp khác nhau. Việc làm tổ này có thể lên đến số lần không giới hạn dựa trên yêu cầu của bạn.
Đây là một ví dụ về lồng ghép whilevòng. Các vòng khác có thể được lồng vào nhau dựa trên yêu cầu lập trình theo cách tương tự:
Lồng trong khi vòng lặp
Có thể sử dụng vòng lặp while như một phần của phần thân của vòng lặp while khác.
Cú pháp
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
Thí dụ
Đây là một ví dụ đơn giản về lồng vòng lặp. Hãy thêm một vòng lặp đếm ngược khác bên trong vòng lặp mà bạn đã từng đếm đến chín -
#!/bin/sh
a=0
while [ "$a" -lt 10 ] # this is loop1
do
b="$a"
while [ "$b" -ge 0 ] # this is loop2
do
echo -n "$b "
b=`expr $b - 1`
done
echo
a=`expr $a + 1`
done
Điều này sẽ tạo ra kết quả sau. Điều quan trọng cần lưu ý làecho -nhoạt động ở đây. Đây-n tùy chọn cho phép echo tránh in một ký tự dòng mới.
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0