Nội dung giáo trình được chia thành 2 phần: Phần 1. Unix cơ sở gồm 12 bài học (bài 4. Sao, chuyển, liên kết và tìm kiếm file, bài 5. Thông tin giữa những người sử dụng, bài 6. Sử dụng chương trình soạn thảo vi, bài 7. Shell script, bài 8. Đổi hướng), phần 2. Lập trình C dưới unix (gồm: Bài 1. Giới thiệu chung, bài 2. Quản lý tiến trình, bài 3. Quản lý file)
Copyright(c) by Galaxy CD – http://www.galaxycd.com Mục lục: PHẦN 1: UNIX CƠ SỞ Bài Khởi động UNIX 1.1 Bắt đầu phiên làm việc 1.2 Kết thúc phiên làm việc 1.3 Cách dùng lệnh UNIX Bài Làm việc với file 2.1 Tổ chức file 2.2 Di chuyển thư mục 2.3 Các thao tác sở với thư mục 2.4 Các thao tác sở với file thường Bài Bảo vệ file người sử dụng 3.1 Mô tả người sử dụng 3.2 Mô tả nhóm người sử dụng 3.3 Bảo vệ file thư mục Bài Sao, chuyển, liên kết tìm kiếm file 4.1 Sao chép file 4.2 Chuyển đổi tên file 4.3 Tạo liên kết với file 4.4 Tìm kiếm file Bài Thông tin người sử dụng 5.1 Thông tin lệnh mail 5.2 Thông tin lệnh write Bài Sử dụng chương trình soạn thảo vi 6.1 Khởi động vi 6.2 Soạn thảo văn Bài Shell script 7.1 Quản lý tiến trình 7.2 Lập cách thức cho shell script 7.3 Các shell UNIX Bài Đổi hướng (redirection) 8.1 Vào/ra chuan 8.2 Chuyển đổi liệu tiến trình Copyright(c) by Galaxy CD – http://www.galaxycd.com 8.3 Đổi hướng kép đầu chuẩn Bài Cơ chế thay Shell 9.1 Truyền tham số 9.2 Các biến Shell 9.3 Các kí tự đặc biệt 9.4 Lấy kết lệnh 9.5 Các qui tắc thay Shell Bài 10 Môi trường Shell 10.1 Môi trường 10.2 Các biến đònh nghóa trước 10.3 Các biến chung Bài 11 Lập trình mức sở UNIX 11.1 Các phép thử Shell 11.2 Lập trình cấu trúc có điều kiện 11.3 Lập trình chu trình Bài 12 Tín hiệu đồng 12.1 Quản lý tín hiệu 12.2 Quản lý tiến trình 12.3 Đệ qui PHẦN LẬP TRÌNH C DƯỚI UNIX Bài Giới thiệu chung 1.1 Các lời gọi hệ thống 1.2 Chủ thực chủ thực quyền tiến trình 1.3 Đònh nghóa tham biến chương trình 1.4 Một số đònh nghóa khác Bài Quản lý tiến trình 2.1 Nhận biết tiến trình 2.2 Nhận biết chủ tiến trình 2.3 Thay đổi chủ nhóm chủ 2.4 Tạo tiến trình 2.5 Các hàm gọi tiến trình thay 2.6 Đồng tiến trình 2.7 Mức ưu tiên tiến trình 2.8 Nhóm tiến trình Copyright(c) by Galaxy CD – http://www.galaxycd.com Bài Quản lý file 3.1 Mở file 3.2 Tạo file 3.3 Đóng file 3.4 Đặt mặt nạ quyền thâm nhập file 3.5 Đọc file 3.6 Ghi file 3.7 Di chuyển trỏ file 3.8 Cấu trúc inode 3.9 Tạo inode 3.10 Thay đổi quyền thâm nhập 3.11 Thay đổi chủ sở hữu nhóm 3.12 Thay đổi thư mục làm việc Copyright(c) by Galaxy CD – http://www.galaxycd.com PHẦN 1: UNIX CƠ SỞ Bài Khởi động UNIX Nội dung: Làm quen với hệ điều hành UNIX Bắt đầu, kết thúc phiên làm việc, chạy số lệnh đặc trưng 1.1 Bắt đầu phiên làm việc: Bật công tắc nguồn terminal (trong hệ thống NLC Xterm sau dùng Exceed kết nối với UNIX server), khoảng giây sau hình dòng thông báo: Login: Hãy nhập vào tên (user name) kết thúc phím Enter Nếu người sử dụng có dùng mật (passwor), hình dòng: Password: Hãy vào mật kết thúc phím Enter Nếu tên (và mật có) vào đúng, terminal nối với máy chủ hình ký tự: $ dấu nhắc Shell Mật đảm bảo an toàn cho phiên làm việc Ta thay đổi mật lệnh passwd Mật phải dài ký tự, phải có ký tự alphabet, phải khác với tên (user name) ký tự, dài tối đa 13 ký tự 1.2 Kết thúc phiên làm việc: Ấn CTRL + D (giữ phím CTRL gõ phím D) gõ lệnh $exit để kết thúc phiên làm việc 1.4 Cách dùng lệnh UNIX: - Cú pháp để chạy lệnh UNIX sau: $tênlệnh [-tuỳ chọn][đối số 1]…[đối số n] Thí dụ: wc lệnh đếm hiển thò số dòng, từ ký tự file Ta chạy lệnh wc sau $wc /etc/passwd 32 37 1139 etc/passwd $wc 32 -l /etc/passwd etc/passwd Copyright(c) by Galaxy CD – http://www.galaxycd.com $wc 32 15 47 -ld /etc/passwd /etc/group 1139 etc/passwd 337 etc/group 1476 total - Các thông báo lỗi gọi lệnh: Nếu lệnh không tồn không tìm thấy: $data data not found Nếu cú pháp lệnh bò gõ sai: $wc -m /etc/group usage: wc [-clw][name…] Bài tập: Chú ý: Ký hiệu tượng trưng cho việc gõ phím Enter Hãy bắt đầu phiên làm việc với tên (username) bạn Đợi dấu nhắc hệ thống xuất (dấu $), gõ vào date Gán mật cho tên: passwd Liệt kê tên người sử dụng hệ who Xem người làm việc terminal: who am I whoami Xem tên terminal mà ta làm việc đó: tty Hiển thò thông báo lên hình: echo “Xin chao” echo “Chao” echo “Dau nhac ket thuc boi $ xuat hien sau Chao” echo “Hom la ngay:”;date echo “Hai lenh tren dong cach boi dau ;” Dùng lệnh cal (lòch): cal 01 1900 cal 01 cal 1900 cal 1900 | more Một vài lệnh khác: logname Copyright(c) by Galaxy CD – http://www.galaxycd.com 10 uname who | wc Kết thúc phiên làm việc: Ctrl D (giữ phím Ctrl gõ D) exit Copyright(c) by Galaxy CD – http://www.galaxycd.com Bài Làm việc với file Nội dung: Các khái niệm file UNIX, tổ chức file đóa, thao tác với file 2.1 Tổ chức file: 2.1.1 Các kiểu file UNIX có kiểu file: -File bình thường (ordinary file): tập hợp thông tin (ASCII text binary) -File thư mục (directory file): chứa danh sách têncó thể truy nhập tới thí dụ file bình thường, file đặc biệt thư mục -File đặc biệt (special file): file liên quan tới thiết bò ngoại vi cứng và/hoặc chế truyền tin Thí dụ: Bàn phím file đầu vào(input file) Màn hình file đầu (output file) Máy in file đầu 2.1.2 Tổ chức file Các file UNIX tổ chức theo dạng (tree) Thư mục gốc (root) biểu diễn ký tự / Cấu trúc sở hệ UNIX bố trí sau: Ký hiệu file bình thường Ký hiệu file thư mục Ký hiệu file đặc biệt / unix bin etc dev users user1 usr user2 Hình 1: Cấu trúc sở UNIX 2.2 Di chuyển thư mục: Để di chuyển thư mục UNIX, ta dùng lệnh sau đây: Copyright(c) by Galaxy CD – http://www.galaxycd.com cd chuyển đến thư mục cần đến (change directory) pwd hiển thò tên thư mục làm việc (print working directory) Tại thời điểm bắt đầu phiên làm việc, ta thư mục tiếp nhận (HOME directory) Muốn xem tên thư mục tiếp nhận này, ta dùng lệnh pwd Thí dụ: user1 có thư mục tiếp nhận /users/user1 $pwd /users/user1 Để di chuyển thư mục ta dùng lệnh cd với tên thư mục cần chuyển đến $cd /usr/bin $pwd /usr/bin $cd $pwd /usr Để thư mục tiếp nhận ta đâu, gõ: $cd $pwd /users/user1 2.3 Các thao tác sở với thư mục: 2.3.1 Xem nội dung thư mục: - Xem nội dung thư mục làm việc: $ls - Xem nội dung thư mục khác, chẳng hạn thư mục /bin: $ls /bin - Xem thêm thông tin file thư mục: $ls -l $ll - Xem tên file thư mục theo cột: $lc Khi dùng lệnh ls –l ta phân biệt kiểu file cách xem ký tự đầu dòng hiển thò, là: d : file thư mục : file bình thường c b : file đặc biệt 2.3.2 Tạo thư mục: Để tạo thư mục mới, ta dùng lệnh mkdir (make directory): $mkdir index $cd index Copyright(c) by Galaxy CD – http://www.galaxycd.com $ls -a Lệnh mkdir tạo thư mục với đầu vào (entry) - thân thư mục có tên cho - thư mục liên hệ với thư mục tạo - thư mục liên hệ vơí thư mục cha 2.3.3 Xóa thư mục: Để xoá thư mục ta dùng lệnh rmdir (remove directory): $rmdir index Nếu muốn xoá thư mục không rỗng, phải dùng lệnh rm với tuỳ chọn r $rm -ri thumuc 2.4 Các thao tác sở với file thường: 2.4.1 Nhận biết file thường: Lệnh file phân tích nột dung file hiển thò tính chất thông tin chứa file: $file /etc/passwd /etc/passwd: ascii text $file /bin/ls /bin/ls: 680x0 executable 32 bits page aligned striped 2.4.2 Xem noäi dung moät file thường ASCII: Có thể dùng lệnh sau: cat dùng để xem nội dung file nhỏ pg more xem nội dung file lớn theo trang $cat teân file $pg teân file $more teân file 2.4.3 Tạo file thường ASCII Tại Shell UNIX ta dễ dàng tạo file thường ASCII text cách dùng lệnh cat $cat >text_file abcdef 123456 $ Copyright(c) by Galaxy CD – http://www.galaxycd.com 10.3.2 Thực shell_script shell cha: Thực shell_script shell cha cho phép thừa kế sử dụng toàn môi trường shell cha: Thí dụ: $cat proc echo $var $VAR= ok đònh nghóa biến var shell $proc shell tạo không hiểu biến VAR $.proc shell tự thực lệnh mà không tạo shell con, biến VAR có môi trường 50 Copyright(c) by Galaxy CD – http://www.galaxycd.com Bài 11 Lập trình mức sở UNIX Nội dung: phép thử, so sánh, phép tính số học Shell, lập trình cấu trúc có điều kiện, lập trình vòng lặp 11.1 Các phép thử (test) Shell 11.1.1 Giá trò trả lệnh Sau lệnh thực xong, có giá trò trả (return code) Giá trò chứa biến $? Nếu lệnh thực tốt, giá trò trả (true : đúng) Nếu lệnh không thực tốt, giá trò trả khác (false: sai) Thí dụ: $cat fac cat: cannot open fac $echo $? $cat file I am a file $echo $? Chú thích: lệnh exit[n] cho phép khỏi shell_script với giá trò trả lại n 11.1.2 Sử dụng lệnh test: + Lệnh test dùng để lập trình điều kiện cấu trúc vòng lặp: Có trường hợp dùng lệnh test: - kiểm tra tính chát file - so sánh số - kiểm tra xâu ký tự + Cú pháp lệnh test: test expression [expression] Trong thí dụ sau đây, hai cách dùng sử dụng +Kiểm tra tính chất file: Sau test, giá trò trả (true) khác (false) test -f filename file tồn file thường [-d filename] file tồn file thư mục [-r filename] file tồn đọc 51 Copyright(c) by Galaxy CD – http://www.galaxycd.com test test test [file1 [file1 [file1 -w -x -s -ef -nt -ot filename filename filename file2] file2] file2] [-b [-c filename] filename] 0 0 0 file tồn ghi file tồn chạy file tồn không rỗng (not empty) file1 file2 liên kết với file1 file2 file1 cũ file2 0 file tồn đọc ghi theo block file tồn đọc ghi theo ký tự +So sánh số: Cú pháp sau: test value1 operator value2 Các toán tử so sánh (operator) dùng: -eq (equal to) -ne không (not equal to) -gt lớn (greater than) -ge lớn (greater or equal to) -lt nhỏ (less than) -le nhỏ (less or equal to) Thí dụ: $test “$A” -eq “$B” true giá trò biến A giá trò biến B +Kiểm tra xâu ký tự: [“str1” = “str2”] test “str1” != “str2” test -z “$A” test -n “$A” Thí dụ: $test “$LOGNAME” str1 str2 str1 khác str2 xâu $A rỗng xâu $A không rỗng != “user1” +Kết hợp điều kiện: Các toán tử so sánh kết hợp với: -a (and) -o (or) ! đảo (negation) \(…\) gộp (grouping) Thí dụ: $test \(-r file1 -o -r file2 \) -a -w file3 nếu: 52 Copyright(c) by Galaxy CD – http://www.galaxycd.com - file1 file2 tồn đọc - file tồn ghi 11.2 Lập trình cấu trúc có điều kiện: 11.2.1 Cấu trúc có điều kiện : a) if then else fi if command1 then command2 else command3 fi Giải thích: Nếu giá trò trả sau thực command1 (đúng) thực command2, không thực command3 kết thúc Thí dụ: if test -f file1 then echo “file exists” else echo “file does not exist” fi Chú thích: không bắt buộc phải dùng else if [-w file1] then echo “message” >> file1 fi b) Cấu trúc lồng (nested) Ta lồng cấu trúc điều kiện với Khi đó: else if thành elif Thí dụ: if test -f file1 then echo “file exists” elif test -d file1 then echo “file is a directory” fi trường hợp fi chung Chú ý: cú pháp sau dùng được: if then else if then 53 Copyright(c) by Galaxy CD – http://www.galaxycd.com else fi c) Các toán tử | | && Trong trường hợp điều kiện đơn giản, dùng toán tử logic | |, toán tử logic && để lập trình cấu trúc command1 && command2 Nếu command1 thực tốt, thực command2, không command1 | | command2 Nếu command1 thực tốt, ra, không, thực command2 Chú ý: dùng dấu ngoặc đơn để gộp lệnh Thí dụ: test -d demo && echo “demo is a directory” test -d demo | | echo “demo is not a directory” (test -d demo && ls -l demo) | | echo “demo not ok” 11.2.2 Rẽ nhánh phép chọn nhiều giá trò: Dùng cấu trúc: case in esac Cấu trúc cho phép chọn nhiều xâu ký tự thực lệnh liên quan đến xâu case $variable in string1) cmd1 cmd2 …………… ;; string2) cmd1 cmd2 …………… ;; string3 | string4) commands ;; esac Chú ý: dùng metacharacter shell để biểu diễn xâu ký tự, | có nghóa 11.3 Lập trình vòng lặp 11.3.1 Vòng lặp for a) Cấu trúc: for in done Cấu trúc for cho phép thực chuỗi lệnh với giá trò danh sách cho Số vòng lặp số giá trò danh sách for variable in val1 val2 val3 … 54 Copyright(c) by Galaxy CD – http://www.galaxycd.com command1 command2 command3 ………………… done Với variable gán giá trò val1, val2… thực lệnh command1, command2, … Thí dụ: WRITE shell_script gởi thông báo tới người dùng user1, user2, user3: $cat WRITE for i in user1 user2 user3 write $I < message_file done b) Cấu trúc : for done Cấu trúc cho phép thực chuỗi lệnh với đối ($1 $2 …) shell_script gọi for variable command1 command2 command3 ………………… done Với variable gán đối shell_scipt thực lệnh command1, command2, … Thí dụ: Shell_script copy chép file danh sách đối vào danh mục /users/user8 đổi nhóm thành nhóm student, đổi người sở hữu thành user8 $cat copy for i if [-f $i] then cp $i /users/user8 chgrp student /users/user8/$i chown user8 /users/user8/$i fi done $ls -l total 10 -rw -rw - phil phil $copy file1 file2 animator 56 animator 22 toto 55 May 31 14:14:22 May 31 15:14:22 file1 file2 Copyright(c) by Galaxy CD – http://www.galaxycd.com toto is not a file $ls -l /users/user8 total -rw phil animator 56 May 31 14:14:22 file1 -rw phil animator 22 May 31 15:14:22 file2 11.3.2 Vòng lặp while until a ) while done Vòng lặp while thực chuỗi lệnh điều kiện thoả mãn while command1 command2 command3 command4 ………………… done Khi giaù trò trả việc thực command1 thoả mãn điều kiện (true), shell thực tiếp chuỗi lệnh … done Hai lệnh thường dùng vòng lặp while: true : cho giá trò true(0) sleep[n] đợi n giây Thí dụ: - shell_script param hiển thò tất đối lệnh $cat param while test $# -ne echo $1 shift done - shell_script disp_time hiển thò số liệu ngày tháng theo khoảng thời gian 30 giây $cat disp_time while true while : date sleep 30 done b) until done Voøng lặp until hoạt động ngược lại với vòng lặp while until command1 command2 command3 command4 ………………… 56 Copyright(c) by Galaxy CD – http://www.galaxycd.com done Khi giá trò trả việc thực command1 không thoả mãn điều kiện (false), shell thực chuỗi lệnh do…done Lệnh false thường hay dùng vòng lặp giá trò false Thí dụ: vòng lặp until: - ta viết lại shell_script param trên: $cat param until test $# -eq echo $1 shift done c) phép tính số học Lệnh let dùng đẻ thực phép tính số học: Các toán tử dùng gồm: + * / % Thí dụ: $integer i=10 j=2 k l let “k=i+j” $echo $k 12 Chú ý: cú pháp let “k=i+j” tương đương với ((k=i+j)) k=i+j $((l=k*j)); echo $l 24 Lệnh let dùng với toán tử so sánh, kết chứa biến $? Các toán tử so sánh dùng là: = < > == != Thí dụ: $((ifile$count count=expr $count+1 $cat create_file2 integer count=1 while let “count file$count count=count+1 done 11.3.3 Ra khỏi vòng lặp: Lệnh break cho phép khỏi vòng lặp for, while, until Thí dụ: shell_script stock ghi dòng ký tự vào từ bàn phím lên file lines ta gõ từ “END”: $cat stock while true echo “Enter your line:” read answer if test “$answer” = “END” then break else echo $answer >> lines fi done Chú ý: break[n] cho phép khỏi n mức vòng lặp lồng 11.3.4 Bỏ qua phần vòng lặp: Lệnh continue cho phép bỏ qua lệnh lại, quay đầu vòng lặp Thí dụ: shell_script supprim xoá tất file có danh sách đối, trừ file save source: $cat supprim set -x for i if test “$i” = “save” -o “$i” = “source” then continue fi echo $i rm $i done $cd $lc titi appli save source toto 58 Copyright(c) by Galaxy CD – http://www.galaxycd.com $supprim * + test titi = save + echo titi titi + rm titi + test save = save + continue + test source = save + continue + test toto = save + echo toto toto + rm toto -o titi = source -o save = source -o source = source -o toto = source $lc save source Bài tập: Dùng cấu trúc rẽ nhánh viết shell_script sau: a) writemail message userX Chức năng: - gởi thông báo trực tiếp cho userX - người không phiên làm việc, gởi vào hộp thư Gợi ý: dùng lệnh write, mail, | | b) fileread filename Chức năng: - kiểm tra đối có phải file hay không - đúng, kiểm tra có phải file đọc (readonly) không - thông báo tương ứng kết c) filesort file1 file2 Chức năng: - đọc dòng từ bàn phím ghi lên file theo cách sau: + vào cuối file1 dòng chứa chữ (letter) + vào cuối file2 dòng chứa số (number) không chứa chữ + vào file không (null) khác hai loại - kiểm tra số đối, khác 2, hiển thò thông báo: “command: filesort file1 file2” Gợi ý: dùng lệnh case, read metacharacter Sử dụng vòng lặp học, viết shell_script sau: a) testdir Chức năng: hiển thò danh sách thư mục thư mục làm việc 59 Copyright(c) by Galaxy CD – http://www.galaxycd.com Gợi ý: dùng lệnh pwd, for, test b) mkfiles prefix n Chức năng: -tạo n file rỗng (ngầm đònh 5) với tên prefix.n (thí dụ: file.1, file.2, file.3 với prefix=file n=3) - dòng khẳng đònh tạo file “prefix.n” hay không vòng lặp Gợi ý: dùng if, while, test, read, expr 60 Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 12 Tín hiệu đồng Nội dung: Các tín hiệu hệ thống, cách dùng tín hiệu để điều khiển đồng tiến trình 12.1 Quản lý tín hiệu: 12.1.1 Các tín hiệu: Trong thực shell_script, tín hiệu sau phát sinh: signal khoûi shell (exit of the shell) signal cắt liên lạc với terminal (disconnection) signal Ngắt (thí dụ phím DEL) signal Quit (Ctrl |) signal Diệt tiến trình (Kill process) signal 10 Kết thúc logic tiến trình Trong chương trình ứng dụng, cách dùng lệnh trap, ta đònh nghóa việc cần xử lý tín hiệu phát sinh Lệnh cho phép gán công việc xử lý cho tín hiệu 12.1.2 Lập trình phím DEL Lệnh trap không đối liệt kê danh sách tính hiệu việc xử lý tương ứng $trap Cú pháp gán công việc xử lý cho phím DEL: $trap ‘các lệnh’ Xóa bỏ tác dụng phím DEL: $trap ‘’ Gán chức ngầm đònh (default) cho phím DEL: $trap Thí dụ: shell_script uncount hiển thò khoảng thời gian giây, ta gõ phím DEL, hiển thò chữ số tiếp $/Icat/ i uncount trap ‘continue’ for i in echo $i sleep done 12.2 Quản lý tiến trình 12.2.1 Chạy ngầm (background) tiến trình Một tiến trình chạy ngầm ta thêm ký tự & vào sau tên gọi Số tiến trình (PID) hiển thò hình Thí dụ: chạy shell_script uncount ngầm: 61 Copyright(c) by Galaxy CD – http://www.galaxycd.com $uncount& [1] 467 Chú ý: - sau cho tiến trình chạy ngầm, ta lại dùng terminal làm việc khác - thông báo tiến trình ngầm kết thúc, chạy shell_script ta cho thêm thông báo kết thúc: $(command; echo “END”)& - số PID tiến trình ngầm biến $! - Có thể đổi hướng vào/ra (i/o) tiến trình ngầm, tránh nhiễu hình ta làm việc khác 12.2.2 Quản lý tiến trình ngầm (job control) Lệnh: $set -m cho phép quản lý tiến trình chạy ngầm Thí dụ: $proc1 >> file1 & [1] 478 $proc2 & [2] 481 $proc3 & [3] 490 Hiển thò trạng thái tiến trình ngầm : $jobs -l [3] +490 running proc3 & [2] -481 done proc2 [1] 478 running proc1 >> file1 & đó: [n] số thứ tự tiến trình + tiến trình chạy cuối tiến trình trước tiến trình cuối 490 số PID tiến trình running tiến trình thực done tiến trình kết thúc proc3 & tên lệnh gọi 12.2.3 Tiếp tục tiến trình sau kết thúc phiên làm việc: Ta cho tiếp tục thực tiến trình ngầm sau cắt liên lạc với terminal cách dùng lệnh nohup Các số liệu tiến trình đưa stdout stderr ghi lên file nohup.out Thí dụ: $nohup uncount& 62 Copyright(c) by Galaxy CD – http://www.galaxycd.com [1] 478 sending output to nohup.out $exit 12.2.4 Đợi kết thúc tiến trình Bằng cách dùng lệnh wait với đối số PID tiến trình: $wait 467 12.2.5 Diệt tiến trình Dùng lệnh kill với đối số PID tiến trình: $kill 467 phát sinh tín hiệu 15 (ngầm đònh) $kill -9 467 phát sinh tín hiệu diệt tiến trình Ta diệt tiến trình theo số thứ tự danh sách tiến trình chạy ngầm : kill %n Thí dụ: $kill %1 $jobs [1] + done(143) proc >> file1 & [3] + running uncount & $kill [3] -9 + %+ killed uncount & 12.3 Đệ quy Tất shell_script có tính đệ quy (recursivity) Thí dụ: shell_script dir_tree hiển thò thư mục thư mục đối $cat dir_tree if test -d $1 then echo $1 is a directory for j in $1/* $0 $j #$0 teân shell_script done fi $dir_tree /usr /usr is a directory /usr/adm is a directory /usr/adm/acct is a directory /usr/adm/acct/fiscal is a directory /usr/adm/acct/nite is a directory /usr/adm/sa is a directory 63 Copyright(c) by Galaxy CD – http://www.galaxycd.com /usr/bin is a directory ………… Bài tập: Hãy viết shell_script: LisFileDel file1 file2 Chức năng: - hiển thò nội dung file có tên danh sách đối - tiếp tục gõ phím DEL, bỏ qua file hiển thò, bắt đầu file tiếp - khôi phục chức ngầm đònh phím DEL kết thúc Gợi ý: Dùng trap, continue, signal 2 Hãy viết shell_script: trap2 Chức năng: - thực vòng lặp hiển thò thông báo: “Shutdown in n minutes” n có giá trò từ đến - gõ phím DEL, hiển thò thông báo - xoá bỏ tác dụng phím DEL phút cuối - khôi phục chức ngầm đònh phím DEL kết thúc Gợi ý: dùng trap, continue, for 64 ... Dùng lệnh cal (lòch): cal 01 1900 cal 01 cal 1900 cal 1900 | more Một vài lệnh kh c: logname Copyright (c) by Galaxy CD – http://www.galaxycd.com 10 uname who | wc... Lập trình c u tr c có điều kiện 11.3 Lập trình chu trình Bài 12 Tín hiệu đồng 12.1 Quản lý tín hiệu 12.2 Quản lý tiến trình 12.3 Đệ qui PHẦN LẬP TRÌNH C DƯỚI UNIX Bài Giới thiệu chung 1.1 C c. .. tty Hiển thò thông báo lên hình: echo “Xin chao” echo “Chao” echo “Dau nhac ket thuc boi $ xuat hien sau Chao” echo “Hom la ngay:”;date echo “Hai lenh tren dong cach boi