Shell lu«n g¾n liÒn víi hÖ ®iÒu hµnh Unix, nh−ng ®Ó hiÓu vµ häc shell kh«ng nhÊt thiÕt b¹n cÇn hiÓu s©u vÒ hÖ thèng còng nh− c¸c lÖnh cña Unix.. Chó ý: Chóng t«i chØ nh¾c ®Õn hÖ ®iÒu hµ[r]
(1)(2)Cơ Shell A Giíi thiƯu chung
1 Giíi thiƯu vÒ shell
Khi muốn thực lệnh hệ điều hành Unix cần phải lệnh để Unix hiểu đ−ợc muốn làm Việc lệnh đ−ợc thực qua shell Nh− hiểu cách đơn giản shell giao diện để giao tiếp ng−ời sử dụng Unix Shell nhận lệnh từ ng−ời sử dụng sau dịch chuyển đến hệ thống hoạt động cần thực để đáp ứng yêu cầu
Hiện có số loại shell hệ thống Unix, số tr−ờng hợp hệ thống có nhiều shell tồn Một số loại phổ biến tồn nh−: Bourne shell, Korn shell, C shell, Mỗi loại có khác nh−ng tất cung cấp đầy đủ công cụ để thiết lập môi tr−ờng giao tiếp ng−ời sử dụng Unix
2 Mục đích shell
Shell có mục đích nh sau:
- Tơng tác (interactive use)
- Đặt biến môi tr−ờng ng−ời sử dụng
- Lập trình
Tơng tác
Tr−ờng hợp đ−ợc coi đơn giản sử dụng shell, shell đợi ng−ời sử dụng gõ lệnh dấu nhắc, sau gửi tới hệ thống yêu cầu từ lệnh nhận đ−ợc
Đặt biến môi tr−ờng ng−ời sử dụng
Unix shell xác định biến để điều khiển môi tr−ờng ng−ời sử dụng phiên sử dụng Việc đặt biến xác định với hệ thống tham số nh− th− mục đ−ợc sử dụng làm th− mục chính, nơi đặt mail, th− mục đ−ợc sử dụng mặc định bạn gọi đến lệnh Unix, Một số biến hệ thống đ−ợc đặt tệp khởi động (start-up file) đ−ợc đọc bạn login (đăng nhập) Trong tệp khởi động bạn đặt lệnh Unix, nh−ng ý lệnh đ−ợc thực bạn login
LËp tr×nh
Shell cung cấp tập hợp lệnh đặc biệt mà từ tạo nên ch−ơng trình, đ−ợc gọi shell script Trong thực tế hầu hết lệnh sử dụng sổ lệnh Unix ng−ợc lại, lệnh Unix viết shell script Shell script tiện lợi việc gộp nhiều lệnh độc lập vào thực nhiều lần
(3)Một tệp ch−ơng trình shell không quan trọng đến tên đuôi, không cần dịch nh− khơng có mơi tr−ờng phát triển Việc soạn thảo tệp shell sử dụng công cụ soạn thảo nào, cần ghi tệp với dạng text, sau đổi thành dạng tệp chạy đ−ợc Xem ví dụ phần sau để hiểu thêm chi tiết
Shell gắn liền với hệ điều hành Unix, nh−ng để hiểu học shell không thiết bạn cần hiểu sâu hệ thống nh− lệnh Unix Tuy nhiên thơng qua ví dụ chúng tơi nêu bạn hiểu thêm cách sử dụng lệnh biến hệ thống
Chú ý: Chúng nhắc đến hệ điều hành Unix giới thiệu nh− h−ớng dẫn sử dụng, nh−ng thực tế Linux hệ điều hành kế thừa Unix Linux có shell t−ơng tự bạn sử dụng giới thiệu shell với hệ thống Linux 3 Những loại shell thời
Hiện có nhiều loại shell đ−ợc sử dụng hệ thống Unix, nh−ng đề cập đến loại phổ biến, là:
- Bourne shell, đ−ợc coi shell chuẩn, cô đọng loại đơn giản
- Korn shell, cao cấp Bourne shell cho phép soạn dòng lệnh
- C shell, sử dụng cú pháp ngôn ngữ lập trình C có thêm nhiều chức tiện lợi Thơng th−ờng hệ thống có loại shell thông th−ờng Bourne shell đ−ợc sử dụng để viết shell script, sử dụng loại khác cho việc t−ơng tác
Tệp /etc/passwd xác định loại shell đ−ợc sử dụng mặc định hệ thống cho phiên làm việc bạn Trong phần cuối dòng chứa tên bạn, bạn tìm thấy thơng tin loại shell đ−ợc sử dụng Mỗi bạn login, hệ thống đọc tệp để lấy thông tin khởi tạo cho shell
Th«ng tin cã thĨ gåm dạng sau: /bin/sh Bourne shell
/bin/jsh Bourne shell, có thêm phần điều khiển tác vụ (job control) /bin/ksh Korn shell
/bin/csh C shell
Bạn thay đổi shell mặc định sang loại khác cách sử dụng lệnh: Ví dụ chuyển từ Bourne shell sang C shell:
exec csh
hoặc đổi shell lệnh:
chsh [<tªn shell>]
CÊu tróc lƯnh chsh nh− sau:
chsh [-s <tªn shell>] [ -l ] [<tên ngời>]
chsh -l liệt kê loại shell hiƯn cã (th«ng tin chøa tƯp /ect/shells)
(4)B Bourne shell
1 In dòng chữ hình
Vớ d 1: Bạn tạo tệp với tên vidu1, sau gõ vào dịng sau: #!/bin/sh
#vi du dau tien
echo “Vi du dau tien voi shell.”
Bạn sử dụng vi, emacs, để soạn thảo tệp Sau dùng lệnh chmod để chuyển tệp vidu1 thành tệp chạy đ−ợc, lệnh nh sau:
chmod +x thidu1
Để chạy thư b¹n chØ viƯc gâ: vidu1 <enter>
Việc tạo dùng chmod cần thực tệp sau tạo cần chuyển thành tệp chạy đ−ợc, không nhắc lại sau Nh−ng đối tệp đ∙ đ−ợc chuyển mod lần khơng cần làm lại thay đổi nội dung hay đổi tên
Gi¶i thÝch:
- Dịng dòng đặc biệt, dùng để xác định loại shell đ−ợc sử dụng gọi ch−ơng trình thơng dịch shell t−ơng ứng
- Dòng thứ hai bắt đầu dấu # để dịng thích
- Lệnh echo dùng để in hình xâu ký tự hay biến, echo có cấu trúc nh− sau:
echo [-n] [x©u ký tù]
NÕu có chức -n, trỏ không bị ngắt xuống dòng sau in xâu ký tự
Ngoài ra, bên xâu xâu ký tự bạn sử dụng số chức khác nh: \b lùi lại ký tự (backspace)
\c không xuông dòng (nh -n) \n xuống dòng
\t in ký tù tab \\ in ký tù \
\0n in ký tù cã sè n (sè thập phân) bảng m ASCII
Cỏc bn in ký tự đặc biệt cách đặt sau ký tự \, ví dụ: \” để in ký tự nháy kép (”) hình
VÝ dô:
echo “\”Thong bao co loi! \”, \c \007”
2 Thùc hiƯn c¸c lƯnh hƯ thèng
(5)echo “Danh sach cac thu muc va tep:” ls –l
echo
echo “Vi tri hien thoi: ”`pwd`
Trong lệnh ls -l lệnh hệ thống đ−ợc thực mà khơng cần gõ từ dấu nhắc Ngồi tất lệnh tham số khác hệ thống đ−ợc thực cách t−ơng tự, ví dụ nh−: cd, cp, mkdir, chmod, cat,
3 BiÕn vµ tham sè hƯ thèng
Cũng nh− ngơn ngữ lập trình, shell sử dụng biến nh−ng không cần khai báo định nghĩa kiểu Các tham số môi tr−ờng hệ thống sử dụng trực tiếp tên Tên tham số th−ờng tên, ký tự, số hay ký hiệu *, @, #, ?, -, $, !\^
VÝ dô 3: VÝ dơ vỊ dư sơng tham sè hƯ thèng #!/bin/sh
#Vi du
echo "Ten tep [$0]"
echo "Bien vao thu nhat [$1]" echo "Bien vao thu hai [$2]" echo "Chi so cua process [$$]" echo "So bien dau vao [$#]" echo "Tat ca cac bien dau vao [$@]" echo "Co cua process [$-]"
Các bạn có thĨ hiĨu thªm thùc hiƯn lƯnh: vidu3 vi du
Gi¶i thÝch:
- Trong đó, $0 biến chứa tên tệp vừa chạy
- $n, n=1, tham số dòng lệnh đợc đa chạy
- $$ số tệp vừa chạy (ID process)
- $# số tham số dòng lệnh đ đơc đa vào
- $@ liệt kê tất tham số dòng lƯnh
- @- cê cđa process
T−¬ng tự nh ngôn ngữ lập trình khác, shell script cung cấp phép gán lấy giá trị biến Ví dụ có biến với tên var, việc gán lấy giá trị đợc hiểu nh sau:
(6)Có tham số nh sau: Điều kiện với tệp, th mục:
-f <tên> tồn tệp thông thờng -d <tên> tồn cđa th− mơc
-c <tên> tồn tệp dạng ký tự -r <tên> tồn có th c c
-s <tên> tồn có kích thớc lớn -w <tên> tồn ghi đợc
-x <tên> tồn chạy đợc Điều kiện với xâu ký tự:
-n s1 xõu s1 cú độ dài lớn -z s1 xâu s1 có độ dài s1 = s2 hai xâu s1 s2 giống s1 != s2 hai xâu s1 s2 không giống
s1 < s2 xâu s1 đứng tr−ớc xâu s2 theo thứ tự bảng m∙ ASCII s1 > s2 xâu s1 đứng sau xâu s2 theo thứ tự bảng m∙ ASCII string biến string khơng rỗng (not null)
§iỊu kiƯn víi c¸c sè:
n1 -eq n2 so s¸nh b»ng
n1 -ge n2 so sánh lớn n1 -gt n2 so sánh lớn
n1 -le n2 so sánh nhỏ n1 -lt n2 so sánh nhỏ
n1 -ne n2 so sánh không b»ng VÝ dô:
if test $# -gt nÕu cã tham sè
if [ -n “$1” ] nÕu tham sè kh¸c trèng
if [ $count -lt ] giá trị biến count nhá h¬n
Phơ lơc
Danh sách phép toán, lệnh tham số mô trờng $0 tên tệp đợc thực
$1 tham sè thø nhÊt $2 tham sè thø hai
(7)$- cê (flag) + phÐp céng - phÐp trõ * phÐp nh©n / phÐp chia % phÐp lấy phần d == so sánh != so sánh không < so sánh nhỏ > so sánh lớn
>= so sánh lớn <= so sánh nhỏ | |
&&
$USER tên ngời sử dụng echo in hình
read c t bàn phím
$HOME/$home th− mơc chÝnh cđa ng−êi dïng hiƯn t¹i $dir