Trong chương này, sẽ hiểu về việc ra quyết định shell trong Unix. Trong khi viết kịch bản shell, có thể có một tình huống khi bạn cần sử dụng một đường dẫn trong số hai đường dẫn đã cho. Vì vậy, bạn cần sử dụng các câu lệnh điều kiện cho phép chương trình của bạn đưa ra quyết định chính xác và thực hiện các hành động đúng.
Unix Shell hỗ trợ các câu lệnh có điều kiện được sử dụng để thực hiện các hành động khác nhau dựa trên các điều kiện khác nhau. Bây giờ chúng ta sẽ hiểu hai tuyên bố ra quyết định ở đây –
- Câu lệnh if … else
- Trường hợp … câu lệnh esac
Câu lệnh if … else
Các câu lệnh if else là các câu lệnh ra quyết định hữu ích có thể được sử dụng để chọn một tùy chọn từ một tập hợp các tùy chọn nhất định.
Unix Shell hỗ trợ các dạng lệnh if… else sau :
- câu lệnh if … fi
- câu lệnh if … else … fi
- câu lệnh if … elif … else … fi
Hầu hết các câu lệnh if kiểm tra quan hệ bằng cách sử dụng các toán tử quan hệ đã thảo luận trong chương trước.
Trường hợp … Tuyên bố esac
Bạn có thể sử dụng nhiều câu lệnh if … elif để thực hiện một nhánh multiway. Tuy nhiên, đây không phải lúc nào cũng là giải pháp tốt nhất, đặc biệt là khi tất cả các nhánh phụ thuộc vào giá trị của một biến duy nhất.
Unix Shell hỗ trợ câu lệnh case … esac xử lý chính xác tình huống này và nó hoạt động hiệu quả hơn các câu lệnh if … elif lặp lại .
Chỉ có một dạng câu lệnh case … esac đã được mô tả chi tiết ở đây –
- case … câu lệnh esac
Câu lệnh case … esac trong Unix shell rất giống với câu lệnh switch … case mà chúng ta có trong các ngôn ngữ lập trình khác như C hoặc C ++ và PERL , v.v.
Unix / Linux – Các loại Shell Loop
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 lặp đi lặp lại 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ụ, vòng lặp while thực hiện các lệnh đã cho cho đến khi điều kiện đã cho vẫn đúng; vòng lặp cho đến khi 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, các vòng lặp while và for 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.v.
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, 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 vòng lặp while . 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à cách hoạt động của echo -n ở đây. Tùy chọn Here -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
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
- Tuyên bố ngắt
- Tuyên bố tiếp tục
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 là 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. Một 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 vòng lặp while để 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 vì a luôn lớn hơn hoặc bằng 10 và nó không bao giờ nhỏ hơn 10.
Tuyên bố nghỉ
Câu lệnh break được sử dụng để chấm dứt 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
Câu lệnh break sau đượ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 vòng lặp bao quanh thứ n cho lối ra từ.
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ếu var1 bằng 2 và var2 bằng 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
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âu lệnh continue tương tự như lệnh break , ngoại trừ việc nó làm thoát lần lặp hiện tại của vòng lặp, thay vì toàn bộ vòng lặp.
Câu lệnh này hữu ích khi có lỗi xảy ra 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ố số nguyên có thể được cấp cho lệnh continue để bỏ qua các lệnh từ các vòng lặp lồng nhau.
continue n
Ở đây n chỉ định vòng lặp thứ n để tiếp tục.
Thí dụ
Vòng lặp sau sử dụng câu lệnh continue 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