Đại học Bách Khoa TP HCM, Khoa KH & KTMT Bài thực hành Môn: Hệ điều hành Phương-Duy Nguyễn Email: duynguyen@cse.hcmut.edu.vn Ngày tháng năm 2015 Lập trình Bash Shell Điều khiển rẽ nhánh Trong mơi trường Bash, điều khiển rẽ nhánh cho phép người lập trình định thao tác thực thi hay không, định phụ thuộc vào kết đánh giá biểu thức Trong phần này, xem xét sử dụng hai lệnh rẽ nhánh có điều kiện if case Lưu ý việc sử dụng khoảng trắng cần thiết dấu đóng mở ngoặc biểu thức • Cú pháp rẽ nhánh if if [ conditional expression ] then statement1 statement2 else statement3 statement4 fi SinhVienZone.com https://fb.com/sinhvienzonevn • Ví dụ với if sử dụng biến #! / b i n / b a s h T1=" f o o " T2=" bar " i f [ "$T1" = "$T2" ] ; then echo e x p r e s s i o n e v a l u a t e d a s true else echo e x p r e s s i o n e v a l u a t e d a s f a l s e fi • Cú pháp rẽ nhánh case case e x p r e s s i o n in pattern1 ) statements ; ; pattern2 ) statements ; ; esac Vòng lặp for, while until Các cấu trúc lặp cho phép thực thi khối câu lệnh lặp lặp lại điều kiện dừng thỏa mãn Có nhiều lệnh lặp khác tương ứng với điều kiện dừng khác Để dễ hình dung phần này, lệnh lặp tiếp cận thông qua minh họa ví dụ thay định nghĩa cú pháp cứng nhắc • Vòng lặp for #! / b i n / b a s h f o r i in ‘ s e q 1 ‘ ; echo $ i done • Vòng lặp while #! / b i n / b a s h COUNTER=0 while [ $COUNTER − l t 10 ] ; echo The c o u n t e r i s $COUNTER l e t COUNTER=COUNTER+1 done SinhVienZone.com https://fb.com/sinhvienzonevn • Vòng lặp until #! / b i n / b a s h COUNTER=20 u n t i l [ $COUNTER − l t 10 ] ; echo COUNTER $COUNTER l e t COUNTER−=1 done Hàm Giống ngơn ngữ khác, hàm dùng để gom nhóm đoạn mã nguồn function name ( ) { commands } Ví dụ việc khai báo gọi thực thi hàm #! / b i n / b a s h # F i l e name : s c r i p t sh main ( ) { echo H e l l o World ! } Có thể kiểm tra hoạt động thủ tục main() script cách gõ lệnh sau: source script.sh && main Áp dụng tương tự cho hàm khác script Lưu ý: Chỉ cần gọi "source script.sh" lần chạy • Tham số: hàm gán tham số truyền vào theo thứ tự vị trí giá trị $1, $2, tiếp tục • Kết trả về: không giống hàm ngôn ngữ khác, hàm bash script trả giá trị biểu diễn trạng thái thực thi thành cơng hay bị lỗi Để trả giá trị cho hàm thực lời gọi, biến tồn cỏa thể • Mặc dù hàm bash script có lệnh return giá trị trả số nguyên giống lệnh exit Giá trị trả lưu biến $? Biến toàn cục sử dụng để truyền giá trị từ hàm bash script: – – Gán giá trị biến toàn cục #! / b i n / b a s h # F i l e name : s c r i p t sh function myfunc ( ) { m y r e s u l t =’some v alue ’ SinhVienZone.com https://fb.com/sinhvienzonevn } myfunc echo $ m y r e s u l t Thực hành lệnh học: ls, cat, find, grep, file, echo, export Các lệnh cài đặt sau: • Debian: sudo apt-get install ls cat find grep file echo export • Centos/Red Hat: su root; yum install ls cat find grep file echo export Tìm hiểu lệnh awk Đây lệnh dùng phổ biến, với khả rút trích thơng tin Xem ví dụ sau: echo ab mn i j | awk ’ { p r i n t $1 } ’ echo ab mn i j | awk ’ { p r i n t $3 } ’ ## Output i s " ab " ## Output i s " i j " Sinh viên tự tìm hiểu thêm cách dùng awk qua lệnh man Tìm hiểu lệnh ifconfig Đây lệnh dùng phổ biến để xem thơng tin cấu hình thiết bị mạng hệ thống Xem ví dụ sau: 10 11 12 13 14 15 16 17 18 ifconfig eth0 lo Link encap : E t h e r n e t HWaddr 0 : 0D: : 0C: 8D: i n e t addr : Bcast : 5 Mask : 5 5 5 i n e t addr : f e : : d : f f : f e c : d10 /64 Scope : Link UP BROADCAST RUNNING MULTICAST MTU: 0 M e t r i c : RX p a c k e t s : 3 e r r o r s : dropped : o v e r r u n s : frame : TX p a c k e t s : e r r o r s : dropped : o v e r r u n s : c a r r i e r : c o l l i s i o n s :0 txqueuelen :1000 RX b y t e s : 0 ( MiB) TX b y t e s : 9 ( MiB) Base a d d r e s s : x e c c Memory : f e e 0 0 −f e 0 0 Link encap : L o c a l Loopback i n e t addr : Mask : 5 i n e t addr : : : / Scope : Host UP LOOPBACK RUNNING MTU: 6 M e t r i c : RX p a c k e t s : 9 e r r o r s : dropped : o v e r r u n s : frame : TX p a c k e t s : 9 e r r o r s : dropped : o v e r r u n s : c a r r i e r : c o l l i s i o n s :0 txqueuelen :0 RX b y t e s : ( 1 MiB) TX b y t e s : ( 1 MiB) Sinh viên tự tìm hiểu thêm cách dùng ifconfig qua lệnh man SinhVienZone.com https://fb.com/sinhvienzonevn Bài tập BT1 Dùng kỹ thuật học, thực script sysinfo.sh trích xuất thơng tin hệ thống CPU, nhớ, thiết bị mạng Yêu cầu: • Chương trình thực thi mơi trường máy ảo MT13-tinyLinux • Chương trình thực gọi thực thi file sysinfo.sh • Chương trình xuất kết file output.txt thư mục với file chương trình File kết tuân theo định dạng sau – CPU core(s): xx – Total mem: xxxxxx – IP: xxx.xxx.xxx.xxx – NETMASK: xxx.xxx.xxx.xxx – MTU: xxxx SinhVienZone.com https://fb.com/sinhvienzonevn Revision History Revision Date Author(s) Description 1.0 06.02.15 PD Nguyen created SinhVienZone.com https://fb.com/sinhvienzonevn ... lệnh man SinhVienZone .com https://fb .com/ sinhvienzonevn Bài tập BT1 Dùng kỹ thuật học, thực script sysinfo.sh trích xuất thông tin hệ thống CPU, nhớ, thiết bị mạng u cầu: • Chương trình thực thi... MTU: xxxx SinhVienZone .com https://fb .com/ sinhvienzonevn Revision History Revision Date Author(s) Description 1.0 06.02.15 PD Nguyen created SinhVienZone .com https://fb .com/ sinhvienzonevn ... thực thi mơi trường máy ảo MT13-tinyLinux • Chương trình thực gọi thực thi file sysinfo.sh • Chương trình xuất kết file output.txt thư mục với file chương trình File kết tuân theo định dạng sau