Vòng lặp trong Unix/Linux

Vòng lặp là công cụ chương trình có tính năng mạnh, cho phép bạn có thể lặp lại một tập hợp các lệnh. Trong chương này, bạn sẽ tìm hiểu qua các ví dụ thực hành về vòng lặp có trong các chương trình shell.

  • Vòng lặp while
  • Vòng lặp for
  • Vòng lặp until
  • Vòng lặp select

Bạn sẽ sử dụng các vòng lặp khác nhau trên cơ sở các tình huống khác nhau. Ví dụ, vòng lặp while sẽ chạy lệnh đã cho tới khi điều kiện đã cho vẫn còn đúng, trong khi đó vòng lặp until sẽ chạy tới khi điều kiện đã cho trở nên đúng.

Một khi bạn có các bài thực hành chương trình tốt, bạn sẽ bắt đầu sử dụng vòng lặp thích hợp trên cơ sở tình huống đã cho. Ở đây, vòng lặp while và for là có sẵn trong hầu hết các ngôn ngữ chương trình khác như C, C++ và PERL etc.

Lồng các vòng lặp trong Unix/Linux

Tất cả các vòng lặp hỗ trợ khái niệm lồng, có nghĩa là bạn có thể đặt một vòng lặp vào bên trong một vòng lặp tương tự hoặc các vòng lặp khác. Việc lồng này có thể không giới hạn số lượng tối đa vòng lặp, nó phụ thuộc vào yêu cầu của bạn.

Dưới đây là ví dụ của lồng vòng lặp while, và theo cách tương tự, các vòng lặp khác có thể được lồng tùy theo yêu cầu chương trình.

Lồng vòng lặp while trong Unix/Linux

Nó là có thể để sử dụng vòng lặp while như là một phần của thân của một vòng lặp while khác.

Cú pháp:

while command1 ; # Day la vong lap thu nhat, la vong lap ben ngoai
do
   Cac lenh de thuc thi neu command1 la true

   while command2 ; # Day la vong lap thu hai, la vong lap ben trong
   do
      Cac lenh de thuc thi neu command2 la true
   done

   Cac lenh de thuc thi neu command1 la true
done

Ví dụ:

Sau đây là ví dụ đơn giản của lồng vòng lặp:

#!/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

Nó tạo ra kết quả sau. Nó là quan trọng để ghi nhớ cách echo -n làm việc ở đây. Tại đây tùy chọn -n cho phép echo tránh việc in một dòng ký tự 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