Mời các bạn cùng tham khảo Bài giảng Mã nguồn mở - Bài 6: Lập trình Shell trong Linux để nắm tổng quan về lập trình shell trong Linux; một số lệnh lập trình Shell; lập trình C trên Linux.
Trang 1v1.0015106225 1
MÃ NGUỒN MỞ
Giảng viên: ThS Phan Thanh Toàn
1
Trang 2BÀI 6 LẬP TRÌNH SHELL TRONG LINUX
Giảng viên: ThS Phan Thanh Toàn
Trang 3MỤC TIÊU BÀI HỌC
• Liệt kê được các lệnh cơ bản của shell
• Vận dụng ngôn ngữ shell vào viết một số
chương trình đơn giản
• Vận dụng được ngôn ngữ C trong môi
trường Linux
3
Trang 4CÁC KIẾN THỨC CẦN CÓ
Để hiểu rõ bài này, yêu cầu sinh viên cần có các
kiến thức cơ bản liên quan đến các môn học sau:
• Công nghệ phần mềm;
• Nguyên lí hệ điều hành
Trang 5HƯỚNG DẪN HỌC
• Đọc tài liệu và tóm tắt những nội dung chính của
từng bài
• Luôn liên hệ và lấy ví dụ thực tế khi học đến từng
vấn đề̀ và khái niệm
• Thực hành trực tiếp trên hệ điều hành Linux và
một số phần mềm mã nguồn mở như Open
office, PHP,…
• Làm bài tập và luyện thi trắc nghiệm theo yêu
cầu từng bài
5
Trang 6CẤU TRÚC NỘI DUNG
Trang 76.1 TỔNG QUAN VỀ LẬP TRÌNH SHELL TRONG LINUX
6.1.1 Khái niệm về shell
6.1.2 Sử dụng biến trong lập trình shell
7
Trang 86.1.1 KHÁI NIỆM VỀ SHELL
• Shell là chương trình thông dịch lệnh của hệ điều hành Linux
Tương tác với người dùng theo từng câu lệnh;
Shell đọc lệnh từ bàn phím hoặc tệp tin;
Nhờ nhân của hệ điều hành Linux để thực thi lệnh
• Shell script: là chương trình shell, bao gồm một tập các lệnh
User
Shell ApplicationsLow Level Utilities
KernelHardware
Trang 96.1.1 KHÁI NIỆM VỀ SHELL (tiếp theo)
9
• Soạn thảo và thực thi chương trình shell
Sử dụng trình soạn thảo văn bản để tạo chương trình shell script
Nội dung chương trình bao gồm tập các câu lệnh theo cú pháp lệnh trên Linux
Các câu lệnh trên cùng một dòng được ngăn cách bởi dấu chấm phẩy (;)
Thiết lập quyền thực thi cho tệp shell script
chmod o+x <tên tệp>
Thực thi chương trình
bash <Tên tệp>
sh <Tên tệp>
./<Tên tệp>
Trang 106.1.1 KHÁI NIỆM VỀ SHELL (tiếp theo)
• Ví dụ chương trình shell đơn giản displayInfo.sh
clear
echo “Hello: $USER”
echo “Today is: “; date
echo “Number of user login:”; who | wc –l
Trang 116.1.1 KHÁI NIỆM VỀ SHELL (tiếp theo)
11
• Trong Linux có 2 loại biến
• Xem và truy xuất giá trị của biến
$ <Tên biến>
echo $HOME
echo $USERNAME
Phải có kí hiệu $ trước tên biến
Biến hệ thống Biến do người dùng
định nghĩa
Tạo ra và quản lí bởi hệ điềuhành Linux;
Tên biến viết hoa
Tạo ra và quản lí bởingười dùng;
Tên biến viết thường
Trang 126.1.1 KHÁI NIỆM VỀ SHELL (tiếp theo)
• Một số biến của hệ thống
BASH_VERSION: Tên version của shell;
HOME: Tên thư mục home của người sử dụng;
LOGNAME: Tên đăng nhập của người sử dụng;
OSTYPE: Tiểu hệ điều hành;
PATH: Thiết lập đường dẫn cho hệ thống;
PWD: Thư mục hiện hành của người sử dụng
• Định nghĩa biến của người dùng
Cú pháp: <Tên biến> = <giá trị>
Chú ý:
Không cần khai báo biến trong shell;
Tên biến phân biệt chữ hoa và chữ thường;
Tên biến phải bắt đầu bằng kí tự;
Không sử dụng kí tự đặc biệt trong tên biến
Trang 13 Hiển thị giá trị của biến
Cú pháp: echo $<Tên biến>
Ví dụ:
echo $maxecho $nhiet_do
Chú ý: không được để khoảng trắng ở hai bên toán tử gán (=)
Trang 146.2 MỘT SỐ LỆNH LẬP TRÌNH SHELL
6.2.1 Các lệnh cơ bản
6.2.2 Cấu trúc lập trình
trong shell
Trang 156.2.1 CÁC LỆNH CƠ BẢN
• Lệnh echo
Cú pháp: echo [tùy chọn] [string, variable]
Lệnh echo hiển thị thông tin ra thiết bị chuẩn, thông tin hiển thị có thể là một hằngxâu kí tự, giá trị một biến hoặc một biểu thức
Ví dụ: echo “Hello”, $myname
Trang 166.2.1 CÁC LỆNH CƠ BẢN (tiếp theo)
• Các dấu ngoặc
Dấu nháy kép “”:
Các hằng xâu kí tự được đặt trong cặp ngoặc kép;
Ví dụ: echo “Hello $myname”
Lệnh này sẽ hiển thị lời chào với tên được lưu trong biến myname
Dấu nháy đơn ‘’: Các biến đặt trong cặp nháy đơn sẽ bị vô hiệu hóa
Ví dụ: echo “Hello $myname”
Lệnh này sẽ hiển thị dòng thông báo: Hello myname
Trang 176.2.1 CÁC LỆNH CƠ BẢN (tiếp theo)
17
• Lệnh đọc dữ liệu từ bàn phím
Cú pháp: read <Tên biến>
Lệnh đọc dữ liệu từ bàn phím và lưu vào biến được chỉ định bởi tên biến
Trang 186.2.2 CẤU TRÚC LẬP TRÌNH TRONG SHELL
Khối lệnh được thực hiện nếu điều kiện có giá trị đúng (giá trị khác 0)
Ví dụ
if cat $1then
echo “\n Tệp tin $1 đã tồn tại trên hệ thống”
fi
Trang 19Khối lệnh 2fi
Trang 206.2.2 CẤU TRÚC LẬP TRÌNH TRONG SHELL (tiếp theo)
• Lệnh lặp for: Trong Linux lệnh for có thể thực hiện theo một số dạng sau
Cú pháp:
for {tên biến} in {danh sách giá trị}
do
Khối lệnhdone
for (expr1; expr2; expr3)
do
Khối lệnhdone
Trong đó: expr1, expr2, expr3 là các biểu thức
Trang 21Thực thi chương trình: / sumofinteger.sh sh
Kết quả hiển thị: Gia tri cua tong la: 55
Trang 226.2.2 CẤU TRÚC LẬP TRÌNH TRONG SHELL (tiếp theo)
Lệnh lặp while sẽ thực hiện khối lệnh cho đến khi điều kiện sai thì kết thúc lặp
Ví dụ: Chương trình shell hiển thị các giá trị từ 1*1 đến 1*n, chương trình kết hợpvới lệnh if để kiểm tra số lượng đối số của chương trình
Trang 23echo “Error: Number missing from command line argument”
echo “Syntax: $0 number”
Trang 246.3 LẬP TRÌNH C TRÊN LINUX
6.3.1 Trình biên dịch gcc 6.3.2 Công cụ GNU make
6.3.3 Làm việc với tệp tin
Trang 25• Gcc hỗ trợ biên dịch các chương trình C như: C chuẩn, ANSI C, C++.
• Cấu trúc chương trình C đơn gian gồm các phần:
Tệp tiêu đề;
Hàm main()
25
Trang 266.3.1 TRÌNH BIÊN DỊCH GCC tiếp theo)
• Ví dụ cách sử dụng gcc với chương trình C đơn giản
Dịch chương trình C gõ lệnh như sau: gcc hello.c –o hello
Chạy chương trình: /hello
Lệnh gcc hello.c –o hello có tác dụng sử dụng trình biên dịch gcc để biên dịch vàliên kết tệp nguồn hello.c thành tệp thực thi hello
Trang 276.3.2 CÔNG CỤ GNU MAKE
• Khi xây dựng chương trình lớn cấu thành từ nhiều tệp tin viết lệnh biên dịch bằnggcc rất dài và khó
• GNU make hỗ trợ biên dịch các chương trình C phức tạp cấu thành từ nhiều tệp tin
• GNU make cho phép tổ chức các lệnh biên dịch chương trình thành một tệp tin
• GNU make tối ưu quá trình biên dịch
• Một tệp makefile tạo ra bằng GNU make gồm các thành phần:
Đích;
Một danh sách các thành phần phụ thuộc cần để tạo ra đích;
Một danh sách các câu lệnh để thực thi các thành phần phụ thuộc khi được gọi;
Cú pháp các luật trong file GNUmake như sau:
target: dependency1, dependency1,……
commandcommand
27
Trang 286.3.2 CÔNG CỤ GNU MAKE (tiếp theo)
• Ví dụ tệp makefile tạo ra chương trình khả thi tên là editor, chương trình được tạo ra
từ các tệp nguồn: editor.c, editor.h, keyboard.h, screen.h, screen.c, keyboard.c
1 editor : editor.o screen.o keyboard.o
2 gcc -o editor.o screen.o keyboard.o
3 editor.o : editor.c editor.h keyboard.h screen.h
Trang 296.3.3 LÀM VIỆC VỚI TỆP TIN
• Trong Linux để làm việc với tệp tin ta sử dụng một mô tả file, mỗi mô tả file thực chất
là một số nguyên sử dụng như một chỉ mục (index) để trỏ vào các tệp tin
• Các thiết bị vào/ra đều có dòng dữ liệu tương ứng, giá trị 0 tương ứng với dòng vàostdin, giá trị 1 tương ứng với stderr, giá trị 2 tương ứng với dòng ra chuẩn stdout
Một số hàm thao tác với tệp tin
• Hàm open():
Cú pháp: Có 2 dạng như sau
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
Hàm open() cho phép mở tệp tin trên đĩa
Chú ý: Cần khai báo sử dụng các tệp tiêu đề
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
29
Trang 306.3.3 LÀM VIỆC VỚI TỆP TIN (tiếp theo)
Đối số pathname: là một xâu kí tự xác định đường dẫn của tệp cần mở
Đối số mode: Chỉ ra chế độ mở tệp tin
Đối số flag nhận một trong các giá trị O_RDONLY, O_WRONLY hoac O_RDWR(cho biết tệp tin đã mở ở chế độ nào)
Ý nghĩa cờ
O_RDONLY Mở file để đọcO_WRONLY Mở file để ghiO_RDWR Mở file để đọc và ghiO_CREAT Tạo file nếu chưa tồn tạiO_EXCL Thất bại nếu file đã tồn tạiO_APPEND Mở file để thêm dữ liệu vào cuối tệp tin
Trang 31TÓM LƯỢC CUỐI BÀI
Trong bài học này, chúng ta đã tìm hiểu những nội dungchính sau:
• Tổng quan về lập trình shell trong Linux;
• Một số lệnh lập trình Shell;
• Lập trình C trên Linux
31