You are on page 1of 27

Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Họ và tên: Đào Đặng Thanh An


Mã số sinh viên: 22520009
Lớp: IT007.O28.1

HỆ ĐIỀU HÀNH
BÁO CÁO LAB 2

CHECKLIST
2.5. BÀI TẬP THỰC HÀNH
BT 1 BT 2 BT 3 BT 4

Trình bày cách làm

Chụp hình minh chứng


Giải thích kết quả

2.6. BÀI TẬP ÔN TẬP

BT BT BT BT BT
1.a 1.b 1.c 2.a 2.b

Trình bày cách làm

Chụp hình minh chứng


Giải thích kết quả

Tự chấm điểm: 12

*Lưu ý: Xuất báo cáo theo định dạng PDF, đặt tên theo cú pháp:
<MSSV>_LAB2.pdf

1
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

2.5. BÀI TẬP THỰC HÀNH


1. Chạy tất cả các đoạn lệnh ví dụ ở phần 2.4. Chụp hình kết quả chạy các file
script và lưu vào báo cáo.
Trả lời...
a. First.sh

2
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

b. Variables.sh

c. Try_variables.sh

3
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

d. If_control.sh

4
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

e. Elif_control

5
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

f. Elif_control2.sh

g. For_loop.sh
6
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

h. For_loop2.sh

i. Password.sh

7
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

j. While_for.sh

8
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

k. Until_user.sh

9
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

l. Case1.sh

10
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

m. Case2.sh

11
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

n. Case3.sh

12
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

2. Viết chương trình cho phép nhập vào tên và MSSV. Kiểm tra nếu MSSV đó
không trùng với mình thì bắt nhập lại. In ra màn hình kết quả.
Trả lời...

13
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

- Ta dùng lệnh gedit để soạn nội dung tập tin với tên tập tin là sv.sh . Mở đầu file
bằng chỉ thị #!/bin/sh để chỉ thị sh làm shell thông dịch, dùng lệnh echo để in ra
màn hình chuỗi “Ho ten” và “MSSV” , sau mỗi câu lệnh echo ta dùng lệnh read để
đọc dữ liệu từ người dùng, dữ liệu sau khi nhập sẽ lần lượt được lưu vào biến name
và mssv. Tiếp theo, ta sử dụng lệnh test (hay [ ]) để kiểm tra kết quả so sánh giữa
mssv và chuỗi “22520009”, khi sai thì thực thi vòng lặp while: in ra màn hình chuỗi
“Sorry, try again” và yêu cầu người dùng nhập lại biến mssv bằng lệnh read và tiếp
tục vòng lặp. Khi nhập đúng, lập tức thoát vòng lặp và in ra màn hình chuỗi “$name
co mssv la $mssv” và kết thúc chương trình bằng exit 0

Hình 2.1. Đoạn lệnh của file sv.sh


- Để thực thi file script sv.sh bằng lệnh ./sv.sh (trong trường hợp câu lệnh báo lỗi ta
cần chuyển thuộc tính thực thi cho tập tin script bằng chmod), chương trình sẽ yêu
cầu ta nhập họ tên ($name) và MSSV ($mssv), nếu ta nhập MSSV = 2252999 ta
thấy rằng chương trình in ra chuỗi “Sorry, try again” đồng thời yêu cầu ta nhập lại
MSSV, vì kết quả so sánh với chuỗi 22520009 là sai. Sau khi ta nhập lại MSSV
đúng với chuỗi cần so sánh, vòng lặp kết thúc và in ra màn hình “Thanh An co mssv
la 22520009”.

14
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 2.2. Kết quả thực thi file script sv.sh


3. Viết chương trình cho phép nhập vào một số n. Kiểm tra nếu n < 10 thì yêu cầu
nhập lại. Tính tổng các số từ 1 đến n. In kết quả ra màn hình.
Trả lời...
- Ta dùng lệnh gedit để soạn nội dung tập tin với tên tập tin là tongN.sh . Mở đầu file
bằng chỉ thị #!/bin/sh để chỉ thị sh làm shell thông dịch, dùng lệnh echo để in ra
màn hình chuỗi “Nhap N: ” , sau câu lệnh echo ta dùng lệnh read để đọc dữ liệu từ
người dùng, dữ liệu sau khi nhập sẽ được lưu vào biến n. Tiếp theo, ta sử dụng lệnh
test (hay [ ]) để kiểm tra liệu biến $n có nhỏ hơn 10 (-lt) , nếu sai thì thực thi vòng
lặp while: in ra màn hình chuỗi “So nhap phai tu 10” và yêu cầu người dùng nhập
lại $n bằng lệnh read và tiếp tục vòng lặp cho đến khi đạt điều kiện. Khi nhập đúng,
lập tức thoát vòng lặp , tạo biến chỉ số cho vòng lặp (i=1) và biến lưu tổng các số
(sum=0).
- Tạo vòng lặp while với điều kiện $i nhỏ hơn hoặc bằng $n (-le), khi $i nhỏ hơn hoặc
bằng $n, ta cộng biến sum với biến I với nhau, kết quả lưu vào biến sum. Đồng thời,
ta tăng biến $i lên 1 đơn vị và tiếp tục thực hiện vòng lặp cho đến khi $i lớn hơn $n
thì thoát vòng lặp. Ta sử dụng lệnh echo để in ra màn hình chuỗi “Tong $n so la
$sum” với $sum là tổng số từ 1 đến $n.

15
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 3.1. File script tongN.sh


- Để thực thi file script sv.sh bằng lệnh ./sv.sh (trong trường hợp câu lệnh báo lỗi ta
cần chuyển thuộc tính thực thi cho tập tin script bằng chmod), chương trình sẽ in
chuỗi “Nhap N: “ và yêu cầu ta nhập 1 số N bất kỳ, ở đây ta nhập 7, số 7 sẽ được
lưu vào biến $n. Ta kiểm tra $n thấy nhỏ hơn 10 nên sẽ thực hiện vòng lặp while
yêu cầu nhập lại $n, khi nhập đúng thì tiến hành cộng dồn vào biến $sum ở vòng
lặp while. Mỗi lần lặp sẽ in ra màn hình chuỗi “Add $i”, sau khi kết thúc vòng lặp
, in ra màn hình chuỗi “Tong 10 so la 55”.

16
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 3.2. Kết quả thực thi tongN.sh


4. Viết trình cho phép nhập vào một chuỗi. Kiểm tra chuỗi đó có tồn tại trong một
file text (ví dụ test.txt) cùng thư mục hay không?
Trả lời...
- Đầu tiên, ta cần tạo 1 file .txt, sử dụng lệnh gedit với tên file là huhu.txt, sau khi tạo
nội dung trong huhu.txt ta lưu lại thay đổi và kiểm tra lại với lệnh cat để in ra màn
hình nội dung của huhu.txt. Ở đây ta thấy nội dung của file huhu.txt.

Hình 4.1. Nội dung của huhu.txt

- Ta dùng lệnh gedit để soạn nội dung tập tin với tên tập tin là exist.sh . Mở đầu file
bằng chỉ thị #!/bin/sh để chỉ thị sh làm shell thông dịch, dùng lệnh echo để in ra
màn hình chuỗi “Enter a string: ” , sau câu lệnh echo ta dùng lệnh read để đọc dữ
liệu từ người dùng, dữ liệu sau khi nhập sẽ được lưu vào biến str. Tiếp theo, ta sử
dụng lệnh if để kiểm tra liệu chuỗi lưu trong $str có tồn lại trong huhu.txt , nếu tồn
17
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

tại thì ra màn hình chuỗi “$str exists in huhu.txt” và thoát lệnh if, nếu không tồn tại
thì nhảy tới dòng else in chuỗi “$str does not exist in huhu.txt’ và thoát lệnh, để kết
thúc lệnh if ta đóng lệnh bằng fi

Hình 4.2. File script exist.sh

- Để thực thi file script sv.sh bằng lệnh ./exist.sh (trong trường hợp câu lệnh báo lỗi
ta cần chuyển thuộc tính thực thi cho tập tin script bằng chmod), chương trình in ra
chuỗi “Enter a string: “ và yêu cầu ta nhập 1 chuỗi bất kỳ, kết quả sẽ được lưu vào
biến $str, trong trường hợp $str=Long ta thấy dòng có tồn tại trong chuỗi “Long
time no see” ở file huhu.txt nên chương trình in ra dòng “Long exists in huhu.txt”.
Ngược lại, khi ta nhập ddta thì trong huhu.txt không tồn tại bất kỳ chuỗi nào chứa
“ddta” nên chương trình in ra màn hình “ddta does not exist in huhu.txt”.

Hình 4.3. Kết quả thực thi exist.sh


2.6. BÀI TẬP ÔN TẬP

18
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

1. Tìm hiểu trên Google về việc cài đặt lệnh git, sử dụng git để tải thư mục ảnh
tại đây: https://github.com/locth/OS_LAB2_IMG.git
Viết một file kịch bản để làm những công việc sau:
a. Kiểm tra trong thư mục người dùng, nếu thấy thư mục PNG và JPG chưa tồn
tại thì tạo 02 thư mục này.
b. Di chuyển tất cả file PNG trong thư mục ảnh ở trên vào thư mục PNG. Xuất
ra màn hình số lượng ảnh PNG.
c. Di chuyển tất cả file JPG trong thư mục ảnh ở trên vào thư mục JPG. Xuất ra
màn hình số lượng ảnh JPG.
Trả lời...
- Để có thể tải ảnh từ trên Github trên hệ điều hành LINUX, ta cần cài đặt lệnh
git. Đầu tiên, ta nhập câu lệnh $sudo apt update để cập nhật phiên bản LINUX
mới nhất, sau đó ta nhập câu lệnh $ sudo apt install git để tiến hành tải xuống và
cài đặt git.

Hình 1.1. Thực thi việc cập nhật

19
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 1.2. Thực hiện tải xuống và cài đặt git

- Tiếp theo, ta sử dụng cú pháp git clone để tải xuống ảnh từ git với đường dẫn
tới thư mục ảnh trên github. Ta thực hiện cú pháp git clone khi đang ở trong thư
mục LAB2 nên sau khi tải xuống từ git, trong thư mục LAB2 sẽ tồn tại 1 thư
mục tên OS_LAB2_IMG, thư mục này sẽ lưu toàn bộ ảnh tải xuống.

Hình 1.3. Thực hiện tải thư mục OS_LAB2_IMG và lưu trong LAB2
- Để kiểm tra vị trí thư mục OS_LAB2_IMG trong LAB2 ta thực hiện lệnh ls để
liệt kê toàn bộ thông tin file tồn tại trong thư mục LAB2, ở đây ta thấy tồn tại
thư mục OS_LAB2_IMG mà ta đã tải xuống.

Hình 1.4. Vị trí thư mục đã tải xuống.

20
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

- Ta dùng lệnh gedit để soạn nội dung tập tin với tên tập tin là picutre.sh . Mở đầu
file bằng chỉ thị #!/bin/sh để chỉ thị sh làm shell thông dịch, dùng cú pháp if để
kiểm tra liệu có tồn tại thư mục (-d) PNG ở trong thư mục chủ hay không. Nếu
không tồn tại thì dùng câu lệnh mkdir để tạo 1 thư mục tên PNG, kết thúc if với
fi. Lặp lại tương tự với thư mục JPG. Tiếp tục ta dùng cú pháp find để tìm trong
thư mục OS_LAB2_IMG trong LAB2 các file có đuôi .png. Nếu tìm được thì
dùng cú pháp -exec mv {} để di chuyển các file đã tìm vào thư mục PNG nằm ở
thư mục chủ. Sau đó dùng -print để tiến hành in thông tin tổng số file đếm được
khi di chuyển bằng cú pháp wc -l. Kết quả được lưu trong biến png_count. Sau
đó in ra màn hình số lượng hình đếm được lưu trong biến $png_count bằng lệnh
echo. Lặp lại các câu lệnh tương tự với tìm và di chuyển các file có đuôi .jpg và
lưu số lượng đếm được trong jpg_count.

Hình 1.5. File script picture.sh


- Để thực thi file script sv.sh bằng lệnh ./picture.sh (trong trường hợp câu lệnh báo
lỗi ta cần chuyển thuộc tính thực thi cho tập tin script bằng chmod), chương trình in
ra chuỗi “PNG: 18 “ và chuỗi “JPG: 60 “, tức sau khi thực hiện tìm và chuyển các
file có đuôi .png và .jpg thì tổng số lượng file đếm được của từng loại lần lượt là
18 và 16.

Hình 1.6. Kết quả thực thi picture.sh


21
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

- Để kiểm tra thư mục PNG và JPG, ta chuyển tới thư mục chủ và sử dụng lệnh
ls để liệt kê các thư mục hiện hành. Ở đây ta thấy thư mục PNG và JPG.

Hình 1.6. Thư mục PNG và JPG

- Để kiểm tra các file có đuôi .png trong thư mục PNG, ta di chuyển tới thư mục
PNG và sử dụng ls để liệt kê toàn bộ file.

Hình 1.7. Liệt kê các file trong PNG


- Để kiểm tra các file có đuôi .jpg trong thư mục PNG, ta di chuyển tới thư mục
JPG và sử dụng ls để liệt kê toàn bộ file.

22
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 1.8. Liệt kê các file trong JPG,

23
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 1.9. Liệt kê các file trong JPG

2. Tạo ra một file text tên monhoc.txt chứa danh sách mã môn học của sinh viên
trong học kỳ này, mỗi mã nằm trên một dòng. Viết một file kịch bản thực hiện
các việc sau:
a. Yêu cầu người dùng nhập vào họ và tên (không dấu), tạo ra thư mục có tên
tương ứng với thông tin người dùng vừa nhập
b. Đọc file text monhoc.txt ở trên, ở trong thư mục vừa tạo ở câu a, với mỗi
môn học, tạo ra một thư mục có tên tương ứng với mã môn đó.
Trả lời
- Đầu tiên, ta cần tạo 1 file .txt, sử dụng lệnh gedit với tên file là monhoc.txt, sau khi
tạo nội dung trong huhu.txt ta lưu lại thay đổi và sử dụng lệnh ls để kiểm tra vị trí
thư mục, ở đây ta thấy file được lưu ở thư mục LAB2. Sử dụng lệnh gedit hoặc cat
để xem nội dung file monhoc.txt.

24
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 2.1. Danh sách mã môn học được lưu trong monhoc.txt

Hình 2.2. Kiểm tra vị trí file monhoc.txt


- Ta dùng lệnh gedit để soạn nội dung tập tin với tên tập tin là maMon.sh . Mở
đầu file bằng chỉ thị #!/bin/sh để chỉ thị sh làm shell thông dịch, dùng lệnh echo
để in ra man hình chuỗi “Username: “, sau đó dùng lệnh read để lấy dữ liệu
người dùng nhập lưu vào biến name. Ta tiến hành tạo 1 thư mục có tên là biến
$name ta nhập vào và in ra màn hình chuỗi thông báo tạo thư mục $name thành
công.
- Sau khi tạo thư mục $name thành công, ta thực hiện vòng lặp while với cú pháp
IFS=read -r line để tiến hành đọc từng thông tin trên từng dòng, thông tin trên
từng dòng sẽ được lưu trong biến $line. Trong mỗi vòng lặp, ta lấy thông tin
từng dòng và tạo thư mục với tên là biến $line đồng thời in ra dòng “Create
directory: $line” để thông báo tạo thư mục thành công.

25
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 2.3. File script maMon.sh


- Để thực thi file script sv.sh bằng lệnh ./maMon.sh (trong trường hợp câu lệnh báo
lỗi ta cần chuyển thuộc tính thực thi cho tập tin script bằng chmod), chương trình
in ra chuỗi “Username: “ và yêu cầu người dùng nhập thông tin bằng lệnh read
sau đó lưu vào biến name, ở đây ta nhập “Thanh An” nên $name=”Thanh An”,
sau đó ta tiến hành tạo thư mục có tên là ‘Thanh An’ trong thư mục LAB2, sau đó
tiến hành đọc file monhoc.txt và thực hiện tạo các thư mục IT007, CE103, SS010,
CE121, PE102. Với mỗi vòng lặp đọc nội dung trong monhoc.txt, ta in ra màn
hình “Create directory …. “ để thông báo tạo thư mục thành công. Sau khi kết
thúc chương trình, để kiểm tra vị trí các thư mục đã tạo, ta sử dụng lệnh ls để kiểm
tra. Ở trong LAB2 hiện thông tin đầy đủ các thư mục môn học mà ta đã tạo.

26
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Trần Hoàng Lộc.

Hình 2.4. Kết quả sau khi chạy chương trình và vị trí các thư mục đã tạo

27

You might also like