unix shell
Trang 1CHƯƠNG II
UNIX SHELL
GV : Nguyễn Thành Long Mail : ntlong@fit.hcmus.edu.vn
Trang 2NÔÔI DUNG
Giới thiệu về shell
Biến trong shell
Tạo shell script
Trang 3SHELL LÀ GÌ ?
Shell là một chương trình giao tiếp giữa người sử dụng và hệ thống Linux bằng lệnh
Một số shell thông dụng: bash, ash, bsh, csh, ksh, tcsh và nologin
Xem shell đang sử dụng: echo $SHELL
Tham số shell mặc định của một user thể hiện trong file /etc/passwd
Trang 4CÁC FILE SHELL
/etc/profile – file khởi động cho tất cả user, thực thi đối với login shell (tự động thực thi khi
login vào máy)
~/.bash_profile – file khởi động cho từng user, thực thi đối với login shell
~/.bashrc – file khởi động cho từng interactive shell không phải là login shell
~/.bash_logout – file dọn dẹp khi thoát khỏi login shell
Trang 5KHAI BÁO BIẾN
Dùng trong lập trình shell và điều khiển môi
trường thực thi (environment)
Gán giá trị cho biến: var_name=value
Truy xuất giá trị của biến: $var_name
$ foo=”xin chao”
$ echo $foo
Trang 6KHAI BÁO BIẾN
set – liệt kê các biến shell đã được định nghĩa
unset – hủy biến shell
export – export biến trở thành biến môi trường (có giá trị trong các shell và
process khác)
Trang 7BIẾN MÔI TRƯỜNG
Ðiều khiển môi trường thực thi lệnh
Một số biến môi trường thông dụng:
HOME thư mục home
SHELL chương trình shell hiện tại
PATH đường dẫn để tìm các file thực thi
USER tên user login
TERM kiểu terminal hiện tại
DISPLAY khai báo hiển thị cho X-Window
PS1 dấu nhắc dòng lệnh
LANG ngôn ngữ hiện tại
Trang 8BIẾN MÔI TRƯỜNG
Mô ôt số biến đă ôc biê ôt
$0 tên của shell script / chương trình
$$ PID của shell hiện tại
$? mã trả về (exit code) của lệnh foreground ngay trước đó
$! mã trả về của lệnh background ngay trước đó
Trang 9SHELL SCRIPT
File văn bản (thường có phần mở rộng sh) chứa các lệnh (lệnh shell và chương trình)
Ðược thông dịch bởi shell
Có thể được gọi trong chính shell script khác
Tham số được truyền trên dòng lệnh
Dòng đầu thường có dạng #!/bin/bash
Ghi chú: Dùng dấu #
Trang 10VÍ DỤ “HELLO.SH”
$ cat > hello.sh
#!/bin/bash
# This is a comment: simple hello shell script
echo "Enter your name:"
Trang 11VÍ DỤ “HELLO.SH”
Sửa lỗi : Permission denied
Trang 12THAM SỐ VỊ TRÍ
Tham số được truy xuất thông qua vị trí của nó
Tham số vị trí có thể được gán lại bằng lệnh “set”
Các biến nội thao tác với tham số vị trí:
$# số tham số được truyền
$* tất cả các tham số
$n tham số thứ n
Trang 13THAM SỐ VỊ TRÍ
Trang 14THAY THẾ LÊÔNH
Thưc thi lệnh và lấy kết quả xuất của lệnh đặt tại vị trí hiện tại
Dùng nháy ngược (back-stick “` `”) hoặc $( )
Trang 15BIỂU THỨC SỐ HỌC
Dùng let, expr hoặc $(( )) để gán
Phép toán số học: ++, , +, -, *, /, %, ==, !=, >,<, &&, ||,
let “a = 1 + 1” (a = 2)
a=`expr $a “*” 6` (a = 12)
a=$(($a “/” 4)) (a = 3)
let “area = $len * $width”
let “percent = $num / 100”
let “remain = $n % $d”
Trang 16BIỂU THỨC ĐIỀU KIÊÔN
[ expression ]
test expression
So sánh chuỗi: =, !=, -n, -z
So sánh số: -eq (=), -ne(not =), -lt (<), -le (<=), -gt (>), -ge (>=)
Kiểm tra file: -d, -f, -x, -e
Toán tử luận lý: !, -o, -a
Trang 17BIỂU THỨC ĐIỀU KIÊÔN (tt)
[ string1 = string2 ]
[ $num -lt 10 ]
test ! -d mydir && mkdir mydir
[ -f myfile -a -x myfile ] && /myfile
Trang 18read num else
let “num = $1”
fi
Trang 19BIỂU THỨC CASE
echo “Mot”;;
2) echo “Hai”;;
*) echo “So khac”;;
esac
Trang 20VÒNG LĂÔP FOR
Dạng 1: for var [in list]; do
Trang 21VÒNG LĂÔP WHILE
let “num = $num + 2”
done
Trang 22CÁC ĐIỀU KIÊÔN KHÁC
BREAK – thoát khỏi vòng lặp
CONTINUE – bỏ qua phần còn lại của vòng lặp
EXIT – thoát khỏi shell script
RETURN – trở về từ hàm hoặc shell script
Trang 23func_name param1 param2
Truy xuất các tham số: $1, $2,
Kiểm tra cú pháp: $ sh -n myscript
Hiển thị tên lệnh và các tham số khi thực thi
$ sh -x myscript
Trang 24VÍ DỤ HÀM
Trang 25CÁC LÊÔNH NÂNG CAO
Xử lí chuỗi & màu sắc
Trang 26XỬ LÝ MẢNG
Khai báo: array[xx] hoặc
declare –a array
Truy xuất ${array[i]}
${array[@]} hoăăc ${array[*]}: lấy tất cả phần tử của mảng
${#array[@]} hoặc ${#array[*]}: tổng số phần tử của mảng
Xóa mảng: unset array[1]
Cách khác: Array=( [xx]=XXX [yy]=YYY )
Trang 27XỬ LÝ CHUỖI
Chiều dài chuỗi : ${#string}
expr length $string
Trang 28XỬ LÝ CHUỖI (tt)
Xóa chuỗi con: ${string#substring}
${string##substring}
Thay thế chuỗi
${string/substring/replacement}
${string//substring/replacement}
Trang 29ĐỌC NHIỀU DÒNG
Trang 30DEBUG SHELL
Dùng lệnh sh -x <tên file>,
ví dụ:
sh -x SoNT.sh
Trang 31CẮT CHUỖI - CUT
Trang 32CẮT CHUỖI - AWK
Cú pháp: in ra trường thứ n
awk -F<ký tự ngăn cách> ‘{ print $n}’
Mặc định ký tự ngăn cách là các khoảng trắng
Ví dụ: lấy danh sách các user trong group “root”
cat /etc/group | grep ^root | awk -F”;” ‘{ print $4 }’ | tr “,” “ “
Trang 33BÀI TÂÔP SHELL
1. Viết chương trình shell đơn giản cho phép tạo 1 thư mục ngoài “Desktop”
2. Viết chương trình nhâăp vào 1 số nguyên n, kiểm tra xem n có phải là số nguyên tố hay không ?
3. Viết chương trình nhâăp vào số nguyên n, xuất ra tất cả các số chính phương bé hơn n.
4. Viết chương trình giải phương trình bâăc 2.
5. Viết chương trình giải hêă phương trình bâăc 1
Ax + b y = 0
Cx + dy = 0
BÀI TÂôP LÀM TẠI LỚP
Trang 34Hỏi và Đáp
Q & A