Nội dung• Đặc trưng của Shell scripts • Các biến của script • Các lệnh nội trú built-in • Các cấu trúc điều khiển • Các hàm • Gỡ rối debug... Cấu trúc của shell-script– Có thể xen commen
Trang 1Shell Programming in Unix
Trang 2Nội dung
• Đặc trưng của Shell scripts
• Các biến của script
• Các lệnh nội trú (built-in)
• Các cấu trúc điều khiển
• Các hàm
• Gỡ rối (debug)
Trang 4Đặc trưng của shell script
• Các shell khác nhau không tương thích hoàn
• #chmod u+x <tên chương trình>
• #<tên chương trình> [tham_số …]
Trang 5Cấu trúc của shell-script
– Có thể xen comment vào bất cứ đâu
– Chỉ thị shell là 1 comment đặc biệt
• Code
– Lệnh shell với cùng syntax như khi gõ trực
Trang 6Các biến trong file script
• Truy xuất biến
– $<tên_biến>
– ${<tên_biên>}
Trang 7Các biến trong file script
• Biến môi trường
– Gồm các chữ cái hoa
– Được liệt kê trong file profile trong thư mục riêng
Trang 8Biến môi trường
• HOME Thư mục riêng của người dùng,
• MAIL Thư mục chứa hộp thư người dùng,
• SHELL Đường dẫn của shell (/bin/sh hoặc /bin/ksh)
• TERM Số hiệu gán cho trạm cuối,
• USER Tên người dùng đã vào hệ thống
• PATH
• PS1
• PS2
• PWD
Trang 9Biến tự động
• Cho phép gọi script với các tham số trên
dòng lệnh
– $0 Tên của script
– $1-$9 9 tham số đầu tiên
Trang 11Giá trị ngầm định cho tham số
• ${var:-value}
– Nếu var không được định nghĩa thì gán cho nó giá trị value
– Qui định giá trị ngầm định cho tham số vắng mặt
Trang 12Lệnh shift
• Trượt các tham số 1 bậc sang trái
– Lấy các tham số >9 vào các $i
Trang 14$* vs $@
• % /foo "arg1" "two words" "arg3"
– $@ : danh sách gồm 4 từ : "arg1", "two",
"words", "arg3"
– $* : danh sách gồm 3 từ : "arg1", "two
words", "arg3"
Trang 15Sử dụng biến trong bash
• Các phép toán trên biến
Trang 16Sử dụng biến …(tiếp)
• Toán tử nhận dạng mẫu trong
Trang 17Lệnh nội trú của shell
• Không cần tạo process con khi chạy (nằm
trong mã của shell)
– cd, set,
• Nhận biết lệnh nội trú hay không
– type <command>
Trang 19Lệnh nội trú – echo (tiếp)
• Hai script sau đây là tương đương
Trang 20Lệnh nội trú - read
• Đọc từ bàn phím vào các biến
– read variable-list
• Từ đầu tiên được đọc vào biến đầu tiên
• Số biến không đủ: tất cả vào biến cuối cùng
• Ví dụ
% cat foo
#!/bin/sh
read var1 var2
echo "First word : $var1"
echo "The rest : $var2"
% /foo
Unix MS-DOS Windows 95 Windows NT MacOS
First word : Unix
Trang 21Lệnh nội trú - set
• set `<lệnh>`
– Không hiện lên màn hình kết quả thực hiện `<lệnh>`– Kết quả được gán tương ứng cho các biến tự động (từ $1 trở đi)
Trang 23– command [options] parameters
• «then», «else», «fi»: commands
Trang 25• command1 || command2
if ! command1
then
command2 fi
Trang 26Lệnh test
• Kiểm tra một điều kiện
– Sử dụng trong nhiều cấu trúc của shell
• Kiểm tra nhiều điều kiện
– Kiểm tra tệp
– Biểu thức số
– Biểu thức logic
Trang 27Lệnh test (tiếp)
• Kiểm tra tệp
Trang 28Lệnh test (tiếp)
• Biểu thức số
Trang 29Lệnh test (tiếp)
• Biểu thức logic
Trang 30Lệnh test Cách sử dụng
echo hello world fi
Trang 32Cấu trúc điều khiển
read answer case "$answer" in
Y* | y* ) ANSWER="YES" ;; N* | n* ) ANSWER="NO" ;;
b?? ) ANSWER="BOF" ;;
* ) ANSWER="MAYBE" ;; esac
echo $ANSWER
Trang 33Cấu trúc lặp while, for, until
• While
while condition
do
commands1 done
• until
until condition do
commands1 done
• For
for variable in list
do
commands1
Trang 34Ví dụ vòng lặp while
Trang 35Ví dụ vòng lặp For
Trang 36Ví dụ vòng lặp Until
Trang 37break command
• break hoặc break n
– Thoát khỏi 1 hoặc n vòng lặp (lồng nhau)
Trang 38continue command
• continue hoặc continue n
– Tiếp tục vòng lặp sau (hoặc vòng ở tầng n)
done
Trang 39Định nghĩa hàm
• 2 cách định nghĩa hàm
– Tường minh
function foo {
commands
}
– Thông thường
foo() { commands }
Trang 40Sử dụng hàm định nghĩa
• <Tên_hàm> [tham_số]
– Các biến $1…$9 được gán bằng giá trị tham số
– $*, $@ được gán cho danh sách các tham số
– Không có khái niệm biến local