Excercise3 - Tài Liệu Thực Hành Hệ Điều Hành...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT Bài thực hành buổi 3 LẬP TRÌNH CẤU TRÚC VÀ VÒNG LẶP TRONG SHELL Nội dung thực hành Lệnh if Lệnh for Lệnh while Lệnh case Trước khi tìm hiểu về các cấu trúc lập trình và vòng lặp trong shell của Linux, chúng ta đề cập một chút về kiểu boolean trong shell. Trong shell của Linux giá trị True và False được thể hiện tương ứng bằng 2 giá trị không (0 – zero) và khác không (non-zero). Ví dụ: 5 > 2 0 (True) 5 < 2 1 (False) 1. Câu lệnh if Câu lệnh if được dùng để thiết lặp quyết định (lệnh rẽ nhánh) trong shell script. Cú pháp: if condition then command1 ... ... fi Lệnh command1 được thực thi khi điều kiện condition là True (0), ngược lại lệnh tiếp sau lệnh if (sau từ khóa fi) được thực hiện. Ví dụ: Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 27 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT Lưu đoạn script trên vời tên file là rmif, thực hiên chmod và thực thi. Kết quả thực thi như sau: Lần đầu thực thi rmif với tham số aaaa sẽ nhân được một thông báo lỗi “No such file or directory”. Lần thứ 2 thực hiện với tham số a thì nhận được một thông báo “a is deleted successfully”. Như vậy đoạn script trên thực hiện xóa file với tên file được truyền vào từ tham số của script. Nếu tên file không tồn tại thì lệnh rm không thành công hay nói cách khác lệnh sẽ trả về exit status là khác không có nghĩa la False. Ngược lại exit status bằng không (0) có nghĩa là True, khi đó lệnh echo được in ra màn hình. 2. Lệnh test hoặc [expr] Lệnh test hoặc [expr] dùng để kiểm tra một biểu thức logic là True hay False. Nếu biểu thức có giá True lệnh test hoặc [expr] sẽ trả về giá trị 0, ngược lại trả về giá trị khác không. Khảo sát đoạn script sau: if test $1 -gt 0 then echo "$1 is positive number" fi Lưu script trên với tên file là ispositive, thực hiện chmod và thực thi. Kết quả như sau: Đoạn script trên nhận vào một tham số, sau đó kiểm tra xem tham số có lớn hơn số 0 hay không nhờ vào lệnh test. Nếu lớn hơn 0 thì in câu “$1 is positive number”, ngược lại không in gì cả. Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 28 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT Lệnh test và [expr] hoạt động với các loại dữ liệu như: Integer, file và chuỗi ký tự. Dưới đây là các phép toán được dùng trong lệnh test hoặc [expr] Các phép toán so sánh Phép toán -eq -ne -lt -le -gt -ge Ý nghĩa Lệnh test sử dụng với if if test 5 –eq 6 if test 5 –ne 6 if test 5 –lt 6 if test 5 -le 6 if test 5 –gt 6 if test 5 –ge 6 So sánh bằng (==) Không bằng (!=) Nhỏ hơn (<) Nhỏ hơn hoặc bằng (<=) Lớn hơn (>) Lớn hơn hoặc bằng (>=) [expr] sử dụng với if if [5 –eq 6] if [5 –ne 6] if [5 –lt 6] if [5 –le 6] if [5 –gt 6] if [5 –ge 6] Phép toán so sánh chuỗi Phép toán = != Ý nghĩa So sánh bằng So sánh không bằng Lệnh test sử dụng với if [expr] sử dụng với if if test “aa” = “bb” if test “aa” != “bb” if [“aa” = “bb”] if [“aa” != “bb”] Sử dụng lệnh test hoặc [expr] với file và thư mục test -s file -f file -d dir -w file -r file -x file Ý nghĩa Trả về True (0) nếu file không rỗng Trả về True (0) nếu là file (không phải là thư mục) Trả về True (0) nếu là thư mục Trả về True (0) nếu file có thể viết Trả về True (0) nếu file chỉ đọc Trả về True (0) nếu file có thể thực thi Phép toán logic Phép toán ! expression expr1 –a expr2 expr1 –o expr2 Ý nghĩa Phủ định biểu thức expression Phép toán AND 2 biểu thức Phép toán OR 2 biểu thức 3. Lệnh if … else … fi Cú pháp: if condition then # condition trả về 0(true) # thực thi tất cả các câu lệnh cho đến từ khóa else else # condition là sai # thực thi tất cả các câu lệnh cho đến từ khóa fi fi Câu lệnh if … else … fi sẽ thực hiện các câu lệnh trong phần then nếu điều kiện đúng, ngược lại sẽ thực thi các câu lệnh trong phần else. Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 29 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT Ví dụ: if test $1 -gt 0 then echo "$1 is positive" else echo "$1 is negative" fi Khi thực thi đoạn script trên sẽ kiểm tra tham số đầu vào, nếu lớn hơn 0 sẽ in câu thông báo “$1 is positive” ngược lại sẽ in câu “$1 is negative”. 4. Lệnh if-then-else nhiều cấp Cú pháp if condition then # condition trả về 0(true) # thực thi tất cả các câu lệnh cho đến từ khóa elif elif condition1 then # condition1 trả về 0(true) # thực thi tất cả các câu lệnh cho đến từ khóa elif elif condition2 then # condition2 trả về 0(true) # thực thi tất cả các câu lệnh cho đến từ khóa else else # Tất cả condition,condition1,condition2 là False # thực thi tất cả các câu lệnh cho đến từ khóa fi fi Câu lệnh if-then-else nhiều cấp cũng được sử dụng giống như lệnh if-then-else 5. Lệnh lặp for: Lệnh lặp for trong shell của Linux có 2 cú pháp Cú pháp 1: for { variable name } in { list } do command done Biến name sẽ được lần lượt gán từng phần tử trong danh sách list và thực hiện lệnh command. Để hiểu rõ hơn xem ví dụ dưới đây: Ví dụ: for i in 1 2 3 4 5 do echo "Welcome $i times" done Lưu lại với tên testfor và thực thi ta có kết quả như sau: Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 30 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT Với kết quả trên ta thấy rằng biến i sẽ được lần lượt gán các giá trị 1, 2, 3, 4, 5 và mỗi lần như vậy vòng lặp for thực hiện lệnh echo “Welcome $i times”. Cú pháp 2: for (( expr1; expr2; expr3 )) do ..... ... # Thực hiện tất cả các câu lệnh giữa do và done # cho đến khi expr2 là TRUE done Với cú pháp này trước tiên biểu thức expr1 sẽ được thực thi (thông thường được dùng để khởi tạo giá trị cho biến vòng lặp). Sau đó các câu lệnh giữa do và done sẽ được thực hiện lặp đi lặp lại cho đến khi biểu thức expr2 có giá trị True. Sau mỗi lần lập biểu thức expr3 sẽ được thực thi (thông thường là làm thay đổi biến vòng lặp). Để thấy rõ hơn việc sử dụng vòng lặp này, xem ví dụ sau: Ví dụ: for (( i = 0 ; i <= 5; i++ do echo "Welcome $i times" done )) Lưu script trên với tên for2 và thực thi, ta có kết quả như sau: Vòng lặp for hoàn toàn có thể lồng nhau tạo thành vòng lặp phức tạp hơn. Dưới đây là một ví dụ sử dụng vòng lặp for lồng nhau. Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 31 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT for (( i = 1; i <= 5; i++ )) ### Vòng lặp ngoài ### do for (( j = 1 ; j <= 5; j++ )) ### Vòng lặp trong ### do echo -n "$i " done echo "" #### in dòng mới ### done Lưu script trên với tên nestedfor và thực thi. 6. Vòng lặp while Cú pháp: while [ condition ] do command1 command2 command3 .. .... done Các câu lệnh giữa do và done sẽ được thực hiện lặp đi lặp lại cho đến khi điều kiện condition là False. Ví dụ: i=1 while [ $i –le 5 ] do echo “Welcome $i times” i=`expr $i + 1` done Đoạn chương trình này sẽ thực hiện in câu “Welcome $i times” với i là biến integer. Kết quả khi thực thi đoạn script trên là: Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 32 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT 4.7 Lệnh case Cú pháp: case $variable-name in pattern1) command ... command;; pattern2) command ... command;; patternN) command ... command;; *) command ... command;; esac Biến variable-name được so sách với các pattern1, pattern2, pattern3… cho đến khi trùng khớp với một pattern nào đó. Khi đó sẽ thực thi các lệnh ngay sau pattern trùng khớp cho đến khi gặp 2 dấu chấm phẩy “;;”. Nếu không trùng khớp với pattern nào thì các câu lệnh của phần * sẽ được thực thi. Ví dụ: Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 33 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT Lưu script trên với tên casetest và thực thi, ta được kết quả như sau: Khi được thực thi, đoạn script trên sẽ yêu cầu người dùng nhập vào một số tương ứng với món ăn được chọn. Sau đó tùy vào người dùng nhập vào số nào mà chương trình sẽ in ra câu tương ứng với món được chọn và kèm lời cảm ơn. Nếu chọn những số khác, chương trình sẽ in câu sorry. Bài Tập Bài 1: Thực hiện và kiểm tra tất cả các ví dụ phía trên. Bài 2: Viết một script hiển thị trên màn hình hình sau: * ** *** **** ***** ****** ******* ******** ********* ********** Và 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 Bài 3: Viết script thực hiện giải phương trình bậc nhất với hệ số a và b được người dùng nhập vào từ bàn phím. Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 34 Tài Liệu Thực Hành Hệ Điều Hành – Bộ môn HTMT&TT Bài 4: Viết script thực hiện tổng dãy số nguyên từ 1 đến n, n được người dùng nhập vào từ bàn phím. Bài 5: Viết một script hiển thị bảng cửu chương cho một số được nhập vào từ bàn phím. Ví dụ nhập vào 5, kết quả sẽ là: 1x5=5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 10 x 5 = 50 Khi kết thúc sẽ hỏi người dùng có muốn tiếp tục không? Nếu tiếp tục thì lặp lại quá trình trên, ngược lại thì kết thúc. Bài 6: Viết một script thực hiện tạo n thư mục cho n người dùng với tên thư mục là user_i (i=1..n). n được nhập vào từ bàn phím. Ths. Phan Thượng Cang - Ths. Bùi Quốc Thái Trang 35 ...
View Full Document

This note was uploaded on 01/18/2012 for the course INFORMATIK 2011 taught by Professor Phanthuongcang during the Winter '11 term at Cornell.

Ask a homework question - tutors are online