Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Họ và tên: Phạm Đình Bảo Hoàng


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

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: 9

*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: Thân Thế Tùng

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.
Phần 2.4.1.1

2
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Phần 2.4.2.1

Phần 2.4.2.2

3
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Ví dụ 2-1: variables.sh

Phần 2.4.2.4

4
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Ví dụ 2-2: try_variables.sh

Ví dụ 2-3: if_control.sh

5
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Ví dụ 2-4: elif_control.sh

Ví dụ 2-5: elif_control2.sh

Ví dụ 2-6: for_loop.sh

Ví dụ 2-7: for_loop2.sh

6
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Phần 2.4.4.5

Ví dụ 2-8: password.sh

Ví dụ 2-9: while_for.sh

7
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Ví dụ 2-10: until_user.sh

Ví dụ 2-11: case1.sh

Ví dụ 2-12: case2.sh

8
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Ví dụ 2-13 case3.sh

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ả.
- Đầu tiên, tạo file “name_id.sh” bằng cách sử dụng lệnh touch name_id.sh
Sử dụng trình soạn thảo nano hoặc VS Code để nhập đoạn lệnh sau vào file
echo "Enter name: "
read name
while true; do
echo "Enter ID: "
read id
if [ $id = "22520473" ] #hàm if kiểm tra id
then
break
else
echo "Invalid ID. Please re-enter"
fi
done

echo "Name: $name" #xuất tên


echo "ID: $id" #xuất id

exit 0

Tiến hành thêm quyền thực thi cho file bằng lệnh chmod +x name_id.sh và chạy chương
trình trên với lệnh ./name_id.sh, ta được kết quả sau

9
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

Hoặc có thể sử dụng hàm main và hàm kiểm tra MSSV để check lại MSSV như sau

check_id() {
# You can implement your ID validation logic here
# For this example, let's assume that the ID must be numeric
if [ "$1" = "22520473" ]; then #if kiểm tra id với $1 là
#giá trị đã nhập vào
return 0
else
return 1
fi
}

# Main function
main() {
echo "Enter your name:"
read name

while true; do
echo "Enter your ID:"
read id

if check_id "$id"; then


break
else
echo "Invalid ID. Please enter a numeric ID."
fi
done

echo "Name: $name"


echo "ID: $id"
}
10
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

# Call the main function


main

Kết quả sẽ tương tự


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.
Tương tự với cách tạo file và nhập vào với câu 2. Ta nhập vào chương trình sau
while true; do
echo "Enter N: "
read n
if (($n < 10))
then
echo "Invalid N. Please re-enter"
else
break
fi
done

sum=0
for ((i=1; i<=n; i++)); do #vòng lặp for để tính tổng
sum=$((sum+i))
done

echo "Sum: $sum"

exit

Hoặc sử dụng hàm sau


calculate_sum() {
local n=$1
local sum=0
for ((i = 1; i <= n; i++)); do
sum=$((sum + i))
done
echo $sum
}
main() {

11
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

while true; do
echo "Enter a number:"
read n

if ((n < 10)); then


echo "Number must be greater than or equal to 10.
Please re-enter."
else
break
fi
done

# Calculate the sum


result=$(calculate_sum $n)

echo "Sum of numbers from 1 to $n is: $result"


}
main

- Kết quả khi chạy chương trình

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?
Tạo file check_string.sh với nội dung sau
#!/bin/bash

# Nhập vào chuỗi cần kiểm tra


echo "Nhập vào chuỗi cần kiểm tra:"
read input_string

# Kiểm tra xem chuỗi có tồn tại trong tệp văn bản không
if grep -q "$input_string" test.txt; then #tìm kiếm “something”
trong file test.txt
echo "Chuỗi '$input_string' tồn tại trong tệp văn bản."
else
echo "Chuỗi '$input_string' không tồn tại trong tệp văn bản."
fi
12
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

và tạo 1 file test.txt với giá trị bất kì trong file. Ở đây là “something”
Kết quả sau khi thực thi chương trình

13
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

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


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.
Để có thể tải thư mục ảnh từ URL thông qua git, ta sử dụng git clone với các thao tác sau
+ Tiến hành cài git (tìm hiểu google do ở đây đã tải sẵn)

+ Mở git bash và sử dụng lệnh git clone https://github.com/locth/OS_LAB2_IMG.git


và chờ cho clone hoàn thành như kết quả sau

14
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

+ Tạo file script.sh và nhập các dòng script sau


#!/bin/bash

# Kiểm tra và tạo thư mục PNG và JPG nếu chưa tồn tại
if [ ! -d ~/PNG ]; then
mkdir ~/PNG
echo "Thư mục PNG đã được tạo."
fi

if [ ! -d ~/JPG ]; then
mkdir ~/JPG
echo "Thư mục JPG đã được tạo."
fi

# Di chuyển tất cả các file PNG vào thư mục PNG và đếm số lượng
png_count=$(find ~/OS_LAB2_IMG -type f -name "*.png" -exec mv {}
~/PNG \; -print | wc -l)
echo "Đã di chuyển $png_count file PNG vào thư mục PNG."

# Di chuyển tất cả các file JPG vào thư mục JPG và đếm số lượng
jpg_count=$(find ~/OS_LAB2_IMG -type f -name "*.jpg" -exec mv {}
~/JPG \; -print | wc -l)
echo "Đã di chuyển $jpg_count file JPG vào thư mục JPG."

+ Thêm quyền thực thi, chạy script.sh và nhận được kết quả sau

Và thực mục người dùng xuất hiện 2 folder như sau

15
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

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 đó.
- Giả sử trong file monhoc.txt có các thông tin sau “CE103 SS010 SS003 IT007 CE121”
với mỗi thông tin thuộc 1 dòng
- Tạo file name_MH.sh với nội dung như sau
#!/bin/bash

# Yêu cầu người dùng nhập họ và tên


echo "Nhập họ và tên của bạn (không dấu):"
read ho_ten

# Tạo thư mục mới dựa trên họ và tên của người dùng
thu_muc="$ho_ten"
mkdir "$thu_muc"
echo "Đã tạo thư mục '$thu_muc'"

# Đọc file monhoc.txt và tạo thư mục cho mỗi mã môn học
while IFS= read -r line; do
ma_mon_hoc=$(echo $line | tr -d '\r')
if [ -n "$ma_mon_hoc" ]; then
mkdir "$thu_muc/$ma_mon_hoc"
echo "Đã tạo thư mục '$ma_mon_hoc' trong thư mục
'$thu_muc'"
fi
done < monhoc.txt

16
Báo cáo thực hành môn Hệ điều hành - Giảng viên: Thân Thế Tùng

- Sau khi thực hiện script ta được kết quả sau

Và trong thư mục LAB2 xuất hiện thư mục với tên cá nhân, trong thư mục cá nhân sẽ
chứa các folder tên môn học

17

You might also like