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