Khi bắt đầu lập trình trên UNIX hay Linux bằng C hay bằng những ngôn ngữ khácchúng ta phải tiến hành tiếp cận và tìm hiểu khái niệm SHELL.có nội dung trình bày đặc trưng của sell scripts, các biến của script, các lệnh nội trú, các cấu trúc điều khiển, các hàm, gỡ rối và một số nội dung liên quan khác.
Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh Chương 8: Lập trình SHELL Linux Shell Khi bắt đầu lập trình UNIX hay Linux C hay ngôn ngữ khác phải tiến hành tiếp cận tìm hiểu khái niệm SHELL Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh • Một số Shell thơng dụng sau: •Chuẩn thường sử dụng Bash Shell Thông thường cài đặt, trình cài đặt đặt bash shell khởi động •Tên shell có tên bash đặt thư mục /bin Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh Sử dụng Shell ngơn ngữ lập trình • Có hai cách để viết chương trình điều khiển shell – Gõ chương trình trực tiếp dòng lệnh (kể lệnh điều khiển if, for, case, v.v…) – Gộp câu lệnh vào tập tin yêu cầu shell thực thi tập tin chương trình (Ghi nhớ phải đặt quyền execute cho tập tin thực thi được) 2.1 Điều khiển Shell từ dòng lệnh • Thực ví dụ: Giả sử ổ cứng có nhiều file nguồn c Cơng việc đặt tìm hiển thị tất file nguồn chứa chuỗi main() Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh • Mã nguồn thực thi cơng việc sau: # for file in * >do > if grep –l ‘main()’ $file > then > more $file > fi >done • Trong ví dụ trên, lệnh for…do kết thúc lệnh done HĐH nhận biết bắt đầu thực thi tất ta gõ vào lệnh for (Khi lệnh chưa hồn chỉnh shell chuyển thành “>”) • Như trên, file biến shell, * tập hợp đại diện cho tên tập tin tìm thấy thư mục hành • Một cách khác để thực thi lệnh là: #for file in *; do; if grep –l ‘main()’ $file; then; more $file; fi; done Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh 2.2 Điều khiển Shell tập tin kịch (Script file) • Tiến hành tạo tập tin lệnh cat sau: #cat > first.sh #!/bin/sh #Vi du ve Script file for file in * if grep –l ‘main()’ $file then more $file fi done exit • Lưu tập tin lại tiến hành thiết lập quyền thực thi cho tập tin • #chmod +x first.sh Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh • Như ví dụ bên ta thấy dấu “#” có hai chức (Trong đoạn thân chương trình) – # Chức khai báo dòng thích (comment) – #! Chức thị yêu cầu shell triệu gọi shell sh nằm thư mục /bin • Dòng lệnh exit có chức u cầu Script sau thực thi trả mã lỗi Điều nên thể trình lập trình • Trong UNIX/Linux, khơng u cầu phải đặt phần mở rộng cho tên tập tin chương trình Tuy nhiên, sử dụng phần mở rộng sh để dễ nhận diện dạng tập tin script shell (tương tự tập tin bat MS-DOS) • Để biết tập tin có phải Script định dạng khác, ta sử dụng lệnh file • Ví dụ: #file first.sh Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh 2.3 Thực thi Script file • Thơng thường chương trình thực thi shell thường đặt /bin Do đó, để thực thi Shell Script ta triệu gọi trình Shell với tên tập tin Script làm đối số #/bin/sh first.sh • Tuy nhiên, để thực lệnh cách ngắn ta sử dụng theo phương cách sau: #first.sh • Cũng lệnh không thực thành công ta nhận câu thông báo lỗi “Command Not Found” Nguyên nhân biến môi trường PATH thường không chứa đường dẫn tới vị trí thư mục hành #PATH=$PATH: • Hoặc thực tự động (mỗi lần login) cách đưa dòng PATH=$PATH: vào cuối tập tin bash_profile người dùng Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh Cú pháp ngơn ngữ Shell 3.1 Sử dụng biến • Thơng thường, biến không cần phải khai báo trước sử dụng biến tự động tạo khai báo lần tên biến xuất (biến lúc chứa giá trị kiểu chuỗi) • Chú ý phân biệt chữ HOA/thường Ví dụ: foo, Foo, FOO ba biến khác • Để lấy nội dung tên biến sử dụng dấu “$” • Ví dụ: #xinchao=Hello #echo $xinchao Hello #xinchao=“I am here” #echo $xinchao I am here #xinchao=12+1 #echo $xinchao 12+1 Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh • Sử dụng lệnh read để đọc giá trị nhập liệu người dùng nhập vào (như hàm readln() ngơn ngữ Pascal scanf() ngơn ngữ C++) • Ví dụ: #read yourname Nguyen Van An #echo $yourname Nguyen Van An #read yourname Nguyen Van Ba #echo “Hello” $yourname Hello Nguyen Van Ba Bài giảng môn học Nhập Môn Hệ Điều Hành Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh 3.1.1 Dấu bọc chuỗi (quoting) • Dấu nháy kép dùng trường hợp chuỗi người dùng nhập vào có khoảng trắng Tuy nhiên, bên dấu nháy kép, ký hiệu “$” có hiệu lực • Dấu nháy đơn có hiệu lực mạnh Nếu tên biến có ký tự “$” đặt chuỗi có dấu nháy đơn bị vơ hiệu hóa Nếu muốn hiển thị dấu “$” sử dụng dấu “\” chuỗi Bài giảng môn học Nhập Môn Hệ Điều Hành 10 Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh • Ví dụ sau cho thấy khác hai biến $* $@ #IFS=“^” #set foo bar bam #echo “$@” foo bar bam #echo “$*” foo^bar^bam #unset IFS #echo “$*” foo bar bam • Lệnh set thiết lập tham số dòng lệnh foo bar bam Những tham số ảnh hưởng đến biến mơi trường $* $@ • Biến $# chứa số tham số dòng lệnh: #echo “$#” Bài giảng môn học Nhập Môn Hệ Điều Hành 16 Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh • Ví dụ: try_variables.sh #!/bin/sh salutation=“Hello” echo $salutation echo “The program $0 is now running” echo “The first parameter was $1” echo “The second parameter was $2” echo “The parameter list was $*” echo “The user’s home directory is $HOME” echo “Please enter a new greeting” read salutation echo $salutation echo “The script is now complete” exit Bài giảng môn học Nhập Môn Hệ Điều Hành 17 Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh • Chạy try_variables.sh từ dòng lệnh với tham số sau: #./try_variables.sh one two three Hello The program /try_variables.sh is now running The first parameter was one The second parameter was two The list parameter was one two three The user’s home directory is /root Please enter a new greeting Hello World Hello World The script is now complete Bài giảng môn học Nhập Môn Hệ Điều Hành 18 Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh 3.2 Điều kiện Khả kiểm tra điều kiện đưa định rẽ nhánh thích hợp tùy theo điều kiện luận lý hay sai tảng tất ngơn ngữ lập trình 3.2.1 Lệnh test [] • Sử dụng lệnh [] test để kiểm tra điều kiện boolean (True or False) • Lệnh [] trông đơn giản dễ hiểu, thường dùng nhiều rộng rãi lệnh test • Cách sử dụng hai lệnh tương đương if test –f hello.c if [ -f hello.c ] then then … … fi fi Chú ý phải đặt khoảng trắng lệnh [] biểu thức kiểm tra Bài giảng môn học Nhập Môn Hệ Điều Hành 19 Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh • Lệnh test có điều kiện cho phép kiểm tra kiểu sau: • So sánh chuỗi Bài giảng mơn học Nhập Môn Hệ Điều Hành 20 Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh •So sánh tốn học •So sánh điều kiện tập tin Bài giảng môn học Nhập Môn Hệ Điều Hành 21 Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh 3.3.2 Lệnh elif • Chức năng: Cũng tương tự if kiểm tra điều kiện hay sai để thực thi biểu thức thích hợp • Ví dụ: xét if_control.sh elif_control.sh sau #!/bin/sh echo “Is it morning? Please anwser yes or no” read timeofday if [ $timeofday = “yes” ]; then echo “Good morning” else echo “Good Aftenoon” fi exit Bài giảng môn học Nhập Môn Hệ Điều Hành 22 Khoa Công nghệ Thơng tin Trường Đại học Nơng lâm TP Hồ Chí Minh #!/bin/sh echo “Is it morning? Please anwser yes or no” read timeofday if [ $timeofday = “yes” ]; then echo “Good morning” elif [ $timeofday = “no” ]; then echo “Good afternoon” else echo “Sorry, $timeofday not recognized” exit fi exit Bài giảng môn học Nhập Môn Hệ Điều Hành 23 Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh 3.3.4 Lệnh for • Chức năng: Để thực việc lặp lại số lần công việc với giá trị xác định • Cấu trúc: for in done Bài giảng môn học Nhập Môn Hệ Điều Hành 24 Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh Ví dụ 1: In giá trị tập hợp cat > for_loop.sh #!/bin/sh for i in echo $i done exit Bài giảng môn học Nhập Môn Hệ Điều Hành 25 Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh 3.3.5 Ước lượng tóan học • Lệnh expr: Dùng để ước lượng giá trị đối số biểu thức, dùng việc đổi giá trị từ chuỗi sang số • Ví dụ x= 12 x=`expr $x + 1` =>Kết x= 13 • Chú ý cặp dấu `expr $x + 1` dấu với phím ~ bàn phím Bài giảng mơn học Nhập Mơn Hệ Điều Hành 26 Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh • Các shell cung cấp cú pháp $(( )) nhanh hiệu expr việc ước lượng biểu thức bên ( ) • Ví dụ cat > evaluate.sh #!/bin/sh for x in x=$(($x+1)) done exit Bài giảng môn học Nhập Môn Hệ Điều Hành 27 Khoa Công nghệ Thông tin Trường Đại học Nông lâm TP Hồ Chí Minh 3.3.5 Lệnh while • Chức năng: Có chức lệnh for nhằm đáp ứng việc lặp tập hợp lớn số lần lặp khơng biết trước • Cấu trúc: while done Bài giảng môn học Nhập Môn Hệ Điều Hành 28 Khoa Công nghệ Thông tin Trường Đại học Nơng lâm TP Hồ Chí Minh • Ví dụ 1: cat > password.sh !#/bin/sh echo “Enter passwrod” read pw while [ “$pw” != “secret” ] echo “sorry, try again” read pw done exit Bài giảng môn học Nhập Môn Hệ Điều Hành 29 Khoa Công nghệ Thơng tin Trường Đại học Nơng lâm TP Hồ Chí Minh • Ví dụ 2: cat > while_test.sh !#/bin/sh f=1 while [ “$f” -le 10 ] echo “Here $f” f=$(($f+1)) done exit Bài giảng môn học Nhập Môn Hệ Điều Hành 30 ... Chí Minh • Một số Shell thơng dụng sau: •Chuẩn thường sử dụng Bash Shell Thơng thường cài đặt, trình cài đặt đặt bash shell khởi động •Tên shell có tên bash đặt thư mục /bin Bài giảng môn học Nhập... tin Trường Đại học Nông lâm TP Hồ Chí Minh Sử dụng Shell ngơn ngữ lập trình • Có hai cách để viết chương trình điều khiển shell – Gõ chương trình trực tiếp dòng lệnh (kể lệnh điều khiển if, for,... nên thể q trình lập trình • Trong UNIX/Linux, không yêu cầu phải đặt phần mở rộng cho tên tập tin chương trình Tuy nhiên, sử dụng phần mở rộng sh để dễ nhận diện dạng tập tin script shell (tương