Giáo trình Bài mở đầu - Bài 5: Linux Shell - Ngô Duy Hòa

pdf 26 trang huongle 2600
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Bài mở đầu - Bài 5: Linux Shell - Ngô Duy Hòa", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_bai_mo_dau_bai_5_linux_shell_ngo_duy_hoa.pdf

Nội dung text: Giáo trình Bài mở đầu - Bài 5: Linux Shell - Ngô Duy Hòa

  1. ngo duy hoa - khmt - cntt - dhbk - hn Nội dung bài học •Giới thiệu về Shells • Môi trường làm việc với Shell Bài 5. Linux Shell •Lập trình Shell (Bash) • Debugging Shell Scripts • Built-in Shell commands • Các tiện ích (tools) trong Shell Vị trí của Shells 1. Giới thiệu về Shells Vai trò của Shells Vai trò của Shells •Người dùng bị tách biệt với phần cứng bởi lớp nhân (kernel). •Người dùng tương tác với lớp nhân thông qua: –Các lời gọi hệ thống. –Các chương trình tiện ích hệ thống. •Các chương trình tiện ích hệ thống nằm trong đĩa cứng, được nạp vào RAM khi người dùng cần thực hiện công việc. •Tập các chương trình này được gọi là lớp vỏ hay còn gọi là Shell. ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 1
  2. ngo duy hoa - khmt - cntt - dhbk - hn Công việc thực hiện với Shells Công việc thực hiện với Shells •Hỗ trợ người dùng môi trường xử lý dòng lệnh làm các công việc sau: –Xử lý các câu lệnh và thực hiện chúng. –Hỗ trợ ngôn ngữ lập trình Shell và thông dịch các chương trình viết trên Shell. – Điều khiển môi trường thông qua các biến và tham số. –Hỗ trợ pipe để trao đổi giữa các tiến trình. –Hỗ trợ định hướng lại vào ra (I/O). – Làm việc với File System thông qua tên file. Các loại Shells Dấu nhắc đợi lệnh •shBourne Shell (Original Shell) (Steven Bourne • Nhận diện shell đang làm việc: lệnh echo of AT&T) $echo $SHELL hoặc %echo $shell •cshC-Shell (C-like Syntax)(Bill Joy of Univ. of /bin/sh /bin/csh California) • Dấu nhắc lệnh •kshKorn-Shell (Bourne+some C-shell)(David – # khi ta là root, ở bất kỳ shell nào Korn of AT&T) –% dấu nhắc khi chạy C shell •tcshTurbo C-Shell (More User Friendly C- –$ dấu nhắc khi chạy Bash shell hoặc K shell Shell). • bash Bourne Again Shell (GNU Improved • Khuyến khích dùng Bash Shell Bourne Shell) Các loại Shells Login shell •Truy nhập vào hệ thống: – Local system : chạy trực tiếp trên máy : login. – Network system: kết nối với hệ thống thông qua mạng: ssh, telnet, rlogin. •Với mỗi kết nối Æ hệ thống gọi chương trình getty kích hoạt làm việc. • Getty gọi chương trình login xử lý thông tin đăng nhập Æ bật chương trình Shell tương ứng cho người dùng. ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 2
  3. ngo duy hoa - khmt - cntt - dhbk - hn Login Shell Xác định Shell •Xác định Shell thông qua: – $SHELL – /etc/passwd • Đổi loại Shell: chsh Nội dung cần biết • Start up Shell,Shell options. • Command processing, command types. • I/O standard,Pipe. 2. Môi trường làm việc Shell • Shell variables,User’s variables. • Command syntax. • Filename substitution. • Command substitution. • Quotes. • Math, string operators. Startup Shell ~/.bashrc & ~/.bash_profile • Đọc file cấu hình Æ thiết lập môi trường: • Đọc nội dung các file, tự viết thêm các •Chế độ tương tác (interactive): hàm hoặc các alias hoặc export của mình – Login shell (/bin/login) đọc các file: • /etc/profile. • ~/.bash_profile. – Non-login shell (/bin/bash, icon, ) đọc file: •Kế thừa từ Shell cha (parent enviroment). • ~/.bashrc. •Chế độ không tương tác (non-interactive): –Kế thừa môi trường từ Shell cha. ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 3
  4. ngo duy hoa - khmt - cntt - dhbk - hn Interactive Non-login Shell Basic Shell options Option Description •Kiểm tra kết quả của sự thay đổi trên bằng emacs Enters emacs editing mode (on by default) cách chạy lại chương trình Shell Doesn't allow use of a single CTRL-D to log off; use the exit ignoreeof command to log off immediately (this has the same effect as setting the shell variable IGNOREEOF=10) noclobber Doesn't allow output redirection (>) to overwrite an existing file Doesn't expand filename wildcards like * and ? (wildcard noglob expansion is sometimes called globbing) nounset Indicates an error when trying to use a variable that is undefined history Save entered commands in history file $ set +/-o Æ liệt kê, đặt hoặc bỏ options Các ký tự đặc biệt trong Shell Basic Shell options Character Meaning ; Command separator •Tự nghĩ các ví dụ thực hiện với các & Background execution options này: ( ) Command grouping –Kiểm tra quyền on/off của option | Pipe –Lấy các ví dụ với ký tự *, ? & Redirection symbols * ? [ ] ~ + - @ ! Metacharacters for filename and pattern “‘\ Used in quoting other characters ` Command substitution Variable substitution (or command or $ arithmetic substitution) space tab newline Word separators Interactive Shell Xử lý các dòng lệnh •Các bước xử lý dòng lệnh trong Shell: 1. Bật chế độ ghi nhật ký (history). 2. Phân tích cú pháp thành các cụm từ (tokens) 3. Cập nhật lại nhật ký (history updated). 4. Xử lý các dấu nháy (quotes). 5. Xác định các aliases và functions. 6. Thiết lập: redirect, background, pipe. 7. Thay thế giá trị cho các biến (variables). 8. Thực hiện các câu lệnh đóng vai trò như tham số truyền (command substitution) 9. Thay thế tên file bởi các ký tự đặc biệt (metacharacters). 10. Thực hiện câu lệnh gốc. ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 4
  5. ngo duy hoa - khmt - cntt - dhbk - hn Các loại câu lệnh •Khi người dùng gõ 1 câu lệnh, Shell sẽ thực hiện kiểm tra theo các bước sau: –Kiểm tra xem có phải alias không? –Kiểm tra xem có phải functions không? –Kiểm tra xem có phải built-in command không? –Kiểm tra xem có phải chương trình thực hiện không (executable programs)? –Nếu không thỏa mãn Æ thông báo lỗi. •Thực hiện chương trình trong Shell??? Cú pháp (Syntax) Commands & Arguments $ command options arguments • $ mv oldfile newfile arguments oldfile mv •Cóhai loại options: newfile – Short options: viết tắt bởi các chữ cái : -o • $ echo Smile, you are in Bridgeport City Smile, you are in Bridgeport City – Long options: viết đầy đủ tên : option_name Smile, $ you are arguments in echo Bridgeport City Khoảng trắng là dấu phân cách giữa các tham số Thực hiện chương trình trong Shell Input, Output, Error INPUT shell OUTPUT ERROR ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 5
  6. ngo duy hoa - khmt - cntt - dhbk - hn Common redirection examples Chuyển hướng vào/ra (Redirect) • Shell hỗ trợ các ký tự đặc biệt để thực hiện chuyển hướng vào ra với file. – Chuyển hướng vào chuẩn: – Chuyển hướng lỗi chuẩn : 2> •Xét một số ví dụ: – $ grep Tom datafile > temp – $ mail tom errors Kênh truyền dữ liệu Pipe Biến môi trường trong Shell Liệt kê thông qua lệnh $set hoặc $env • Standard Output của command này sẽ là Tên biến = Giá trị Ý nghĩa Standard Input của command kế tiếp. BASH = /bin/bash Tên Shell sử dụng mặc định. BASH_VERSION = 3.1.17 Phiên bản Shell COLUMNS = 80 Số cột thể hiện trong cửa sổ Shell. LINES = 25 Số dòng hiển thị trong cửa sổ Shell. LOGNAME = khmt Tên người dùng đang làm việc với Shell •Cóthể thực hiện với nhiều pipes : (login). OSTYPE = Linux Kiểu hệ điều hành HISTFILE = Tên file lưu trữ các lệnh đã thực hiện (nhật /home/khmt/.bash_history ký) HOSTNAME = khmt-laptop Tên máy tính trong mạng. HOME = /home/khmt Tên thư mục gốc dành cho người dùng đăng nhập. Biến môi trường trong Shell Built-in Shell variables IFS = $’ \t\n’ Giá trị ký tự phân cách. PATH = /usr/bin:/usr/sbin:/bin Các đường dẫn mặc định. Variable Variable PWD = /home/khmt Thư mục làm việc hiện tại mặc định. PS1, PS2 Các dấu nhắc lệnh (prompt) cấp bậc 1 và $# Tổng số tham số truyền vào chương trình 2. Tham số hoặc lựa chọn (option) đang thực hiện với SHELL = /bin/bash Tên chương trình Shell. $_ câu lệnh (chương trình) USER = khmt Tên người dùng đang làm việc hiện tại. USERNAME = khmt Tên người dùng đăng nhập vào hệ thống $? Giá trị trả lại khi kết thúc thực hiện câu lệnh. lúc đầu. UID, EUID User ID và Effective user ID number $$ Chỉ số của tiến trình hiện tại (current process) GROUPS Liệt kê danh sách các nhóm chứa người Chỉ số của tiến trình cuối cùng làm việc ở chế độ dùng. $! nền (background). FUNCNAME Tên của hàm đang làm việc hiện tại. ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 6
  7. ngo duy hoa - khmt - cntt - dhbk - hn Built-in Shell variables Ví dụ minh họa $0 Tên của (câu lệnh) chương trình đang thực hiện. •Tự nghĩ các ví dụ minh họa cho các biến trong Shell Xác định giá trị của tham số thứ n truyền vào chương $n – Chú ý dùng các lệnh: set để truyền tham số trình. Với n >9 thì dùng cú pháp ${n} vào chương trình. $*, $@ Tất cả các tham số truyền vào chương trình ($1 $2 ). –Chúý sử dụng IFS để thấy sự phân biệt “$*” Hiển thị các tham số truyền vào dưới dạng xâu ("$1 và “$@” "$*" $2 "). Phân cách các tham số bởi ký tự chứa trong biến IFS. Hiển thị các tham số phân cách riêng biệt bởi dấu nháy "$@" kép ("$1" "$2" ). Biến của người dùng Giá trị của biến • Cú pháp khai báo: • Truy cập đến giá trị biến: $variable_name VARIABLE_NAME=VALUE • Không nhất thiết phải định nghĩa kiểu của • Chú ý khi làm việc với bash hoặc sh: biến: – Tên biến: bắt đầu bằng 1 chữ cái hoặc dấu _ –Mọi giá trị đều hiểu là xâu ký tự. – Không dùng ký tự đặc biệt như: ? , * / ` “ ^ % –Về cơ bản bash chỉ hỗ trợ phép toán với số – Không đặt khoảng trắng giữa bên cạnh dấu = nguyên. –Cósự phân biệt viết hoa và viết thường •Phụ thuộc vào thao tác làm việc với biến –Giátrị NULL : Æ Shell xác định kiểu giá trị cần thiết. •Hoặc không ghi gì ở bên phải •Hoặc gán bằng “” Ví dụ minh họa declare’s options a Khai báo biến kiểu mảng •Thực hiện ví dụ với các lệnh: f Khai báo tên hàm –Echo i Khai báo biến kiểu số nguyên – Expr, let p Hiển thị các thuộc tính và giá trị của biến r Khai báo biến chỉ đọc read-only x Khai báo biến có thể sử dụng trong các lệnh shell kế tiếp • declare khai báo với các biến cục bộ (local). •Sử dụng +/- option để tắt/bật các thuộc tính ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 7
  8. ngo duy hoa - khmt - cntt - dhbk - hn Làm việc với mảng (array) Ví dụ minh họa • Khai báo biến dạng mảng: • Khai báo mảng: declare –a array_name –Khởi tạo từ đầu 1 mảng •Khởi tạo mảng: – Thêm phần tử, truy cập đến phần tử array_name=(val1 val2 val3 ) –Lấy giá trị phần tử • Tìm hiểu readonly, declare –r, -p • Gán giá trị cho các phần tử: array_name[index]=value •Lấy giá trị của phần tử: ${array_name[index]} Variable substitution Ví dụ minh họa Cú pháp Ý nghĩa ${var:-value} Nếu var bằng NULL hoặc bị unset thì value •Tự nghĩ các ví dụ để thực hiện các sự sẽ được thực hiện thay thế var trong các thay thế biến này. câu lệnh. Giá trị var không đổi ${var:=value} Nếu var bằng NULL hoặc bị unset thì value sẽ được gán vào var và thực hiện trong các câu lệnh. ${var:?message} Nếu var bằng NULL hoặc bị unset thì thông báo message hiển thịởstandard error ${var:+value} Nếu var được set thì value sẽ được thực hiện thay thế var trong các câu lệnh. Giá trị var không đổi Filename substitution Command substitution * Thay thế cho mọi cụm ký tự bất kỳ (kể cả số ký tự là 0) • Ứng dụng: ? Thay thế cho một ký tự bất kỳ –Thực hiện 1 câu lệnh nằm trong 1 câu lệnh [abc] Chứa 1 trong các ký tự liệt kê trong ngoặc. khác. [!abc] Không chứa ký tự nào liệt kê trong ngoặc. – Gán kết quả thực hiện 1 câu lệnh vào 1 biến { a, ile, ax } Chứa các ký tự hay cụm các ký tự khai báo trong • Có hai cách thực hiện như sau: ngoặc. [a-z] Chứa 1 ký tự trong miền từ a-z. – Cú pháp 1: `command options arguments` – Cú pháp 2: $(command options arguments) [!a-z] Không chứa ký tự nào trong miền từ a-z. Chú ý: chỉ thực hiện với Shell option : noglob off ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 8
  9. ngo duy hoa - khmt - cntt - dhbk - hn Dấu nháy (quotes) Arithmetic Expressions •Có3 loại dấu nháy được sử dụng trong •Bash hỗ trợ các cách tính giá trị biểu thức Shell như sau: như sau: – Cách 1: $((expression)) ‘ Dấu nháy đơn (single quote ) – Cách 2: $[expression] “ Dấu nháy kép (double quote ) – Cách 3: expr expression – Cách 4: let expression hoặc let “expression” ` Dấu nháy ngược (back quote) – Cách 5: sử dụng chương trình tính : bc, dc – Cách 6: sử dụng awk script Floating operators String operators Operators Description •Sử dụng tiện ích bc: ${#param} Xác định độ dài của xâu variable=$(echo “OPTIONS; OPERATIONS” | bc) ${param%word} Xóa từ cuối param cụm từ chứa word ngắn •Sử dụng tiện ích dc: nhất ${param%%word} Xóa từ cuối param cụm từ chứa word echo “ARGUMENTS OPTIONS OPERATIONS” | dc dài nhất •bc được sử dụng thông dụng hơn dc . ${param#word} Xóa từ đầu param cụm từ chứa word ngắn nhất •Sử dụng tiện ích awk hoặc nawk: ${param##word} Xóa từ đầu param cụm từ chứa word variable=`awk ARGUMENTS AWK_SCRIPT` dài nhất Shell Scripts • Shell Script chỉ là 1 file text Æ soạn thảo bằng bất cứ chương trình soạn thảo nào. 3. Shell programming •Nội dung của file script bao gồm: –Các lệnh trong Shell. – Tên các chương trình thực thi. – Các dòng chú thích. • Để script thực hiện được Æ cần đặt thêm quyền thực hiện cho script (chmod + x ). ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 9
  10. ngo duy hoa - khmt - cntt - dhbk - hn Shell Script Shell Scripts • Gán biến, các phép toán số học, logic. • Câu lệnh điều khiển: –Kiểm tra điều kiện. – Cú pháp rẽ nhánh: if then else fi. • Câu lệnh lựa chọn : – Cú pháp: case. – Cú pháp: select • Các vòng lặp: – Vòng lặp for. – Vòng lặp while. – Vòng lặp until •Chương trình con : function Kiểm tra điều kiện. So sánh số trong test hoặc [ ] • Cách xác định giá trị biểu thức logic: –[ logic_expression ] hoặc test logic_expression Operator Returns TRUE (zero exit status) if • Các phép toán logic: int1 –eq int2 int1 is equal to int2 – Làm việc với số – Làm việc với xâu ký tự. int1 –ge int2 int1 is greater than or equal to int2 – Làm việc với file. int –gt int int is greater than int •Thực hiện với các số nguyên có thể dùng: 1 2 1 2 –((logic_expression)) hoặc let “logic_expression” int1 –le int2 int1 is less than or equal int2 •Giátrị logic: int –lt int int is less than int – TRUE nếu trả lại kết quả $? = 0 1 2 1 2 – FALSE nếu trả lại kết quả $? ≠ 0 int1 –ne int2 int1 is not equal to int2 So sánh xâu trong test và [ ] Kiểm tra file bằng test hoặc [ ] Operator Returns TRUE (zero exit status) if Operator Returns TRUE (zero exit status) if string string is not null -b file file is a block special file -n string string is not null (and string must -c file file is a character special file be seen by test) -d file file is a directory -z string string is null (and string must be seen by test) -f file file is an ordinary -g file file has its set group id (SGID) bit set String1 = string2 string1 is identical to string2 -k file file has its sticky bit set string != string string is not identical to string 1 2 1 2 -p file file is a named pipe ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 10
  11. ngo duy hoa - khmt - cntt - dhbk - hn Kiểm tra file bằng test hoặc [ ] Kiểm tra nhiều biểu thức logic •Sử dụng test hoặc [ ] Operator Returns TRUE (zero exit status) if Operator Returns TRUE (zero exit status) if -r file file is readable by the process ! expr expr is FALSE; otherwise returns -s file file has nonzero length TRUE -t file file is open file descriptor associated with a terminal (1 is default) expr1 –a expr2 expr1 is TRUE and expr2 is TRUE -u file file has its set user id (SUID) bit set expr1 –o expr2 expr1 is TRUE or expr2 is TRUE -w file file is writable by the process •Uses: [[(expr1) && (expr2)]] or [[(expr1) || (expr2)]] -x file file is executable •Nên dùng [[( )]] thay cho [ ] ??? Ý nghĩa của && và || Cú pháp rẽ nhánh if else fi • Thông thường mọi câu lệnh nào được gõ if condition if condition then then trên Shell đều được thực hiện. command1 •Sử dụng &&: cmd1 && cmd2 command2 command1 command2 – Câu lệnh cmd2 chỉ thực hiện khi cmd1 trả lại fi kết quả $? = 0 else •Sử dụng ||: cmd1 || cmd2 command3 – Câu lệnh cmd2 chỉ thực hiện khi cmd1 trả lại condition là giá trị trả lại command4 của biểu thức logic kết quả $? ≠ 0 fi if_ex1.sh: kiểm tra login user Cú pháp elif if condition1 if codition1 then then • Chú ý các hàm: command command command –Who else if condition2 elif condition2 –Grep then then command command –Giátrị trả lại $? command else if condition3 then elif coditionn command then command else command command else fi command fi command fi fi ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 11
  12. ngo duy hoa - khmt - cntt - dhbk - hn if_ex2.sh: print a greeting Cú pháp case và select • Chú ý hàm lấy thời gian: date case value in select var in wordlist pat1) command;; do command;; command(s) done command;; pat2) command command;; • case là 1 dạng câu lệnh rẽ command;; nhánh, tương tự như cú pháp elif patn) command;; command;; •select là cũng là cú pháp rẽ command;; nhánh mở rộng hơn case,có esac hiển thị menu Cú pháp vòng lặp for Một số ví dụ với for loop for var in 1 2 3 4 5 for var in $@ for var in word word word 1 2 n do do do list=“$var $list” args=“$var $args” command done done echo "$list" echo "$args" command for var in [!ef]*.sh for var done do do res="$var $res" args=“$var $args” done done var lần lượt nhận các giá trị word1, word2, echo "$res" echo "$args" Cú pháp vòng while Một số ví dụ với while loop • Minh họa công việc của hàm SELECT while condition thông qua while và case do command1 command2 done Các câu lệnh command1, command2, thực hiện cho đến khi điều kiện condition trả lại giá trị FASLE ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 12
  13. ngo duy hoa - khmt - cntt - dhbk - hn Ví dụ với until loop Cú pháp vòng lặp until •Viết chương trình minh họa bản cửu until condition chương do command1 command2 done Các câu lệnh command1, command2, thực hiện cho đến khi điều kiện condition trả lại giá trị TRUE Cú pháp break Cú pháp continue 4. Debugging Shell Scripts ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 13
  14. ngo duy hoa - khmt - cntt - dhbk - hn Một số quy tắc viết chương trình Bố cục chương trình rõ ràng •Xác định chính xác loại Shell dùng để thông dịch Æ xác định các cú pháp lệnh • Dùng tên biến có ý nghĩa và không bị trùng lặp: –Các biến export liệt kê bởi lệnh: env –Các biến của Shell liệt kê bởi: set •Viết chú thích cho các dòng, hay khối lệnh quan trọng. •Bố cục chương trình hợp lý, dễ nhìn. Sửa lỗi các chương trình Chạy ở chế độ debug của Shell •Sử dụng công cụ bash debugger (chỉ chạy • Shell hỗ trợ các chế độ làm việc sau giúp với bash version ≥ 3.0). Hỗ trợ: người lập trình dò tìm lỗi: –Chạy từng câu lệnh, kiểm tra giá trị biến, set –o option bash -option Ý nghĩa –Hỗ trợ break point, và nhiều tính năng khác noexec -n Không chạy, chỉ kiểm tra cú pháp •Dò lỗi thông qua các lệnh in kết quả ra verbose -v Hiển thị câu lệnh trước khi chạy stdout hoặc file : echo, printf. xtrace -x Hiển thị câu lệnh và kết quả sau khi •Chạy ở chế độ debug của bash để hiển thị xử lý các bước làm việc. nounset Thông báo lỗi nếu như biến chưa được đặt giá trị Phân loại theo chức năng • Input/Output commands. • Working with Files. 5. Shell built-in commands • Variables and expressions. • Working with script files. • Others ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 14
  15. ngo duy hoa - khmt - cntt - dhbk - hn Input/Output commands Working with files ƒ Chuyển thư mục. vd: cd dir_name. ƒ In ra stdout các biểu thức, xâu ký tự hay các biến. Kết cd thúc mỗi lệnh sẽ tự động xuống dòng. Dùng tùy chọn echo ƒ Print working directory – in thư mục làm việc hiện –n để viết trên cùng một dòng. pwd ƒ Ví dụ: echo –n “hello” ; echo $A. tại. ƒ Cú pháp: pushd dir_name : đưa thư mục dir_name ƒ In ra màn hình các biến với định dạng cho trước. Các pushd vào ngăn xếp thư mục (directory stack), và chuyển định dạng sử dụng như trong hàm printf( ) trong ngôn dir_name thành thư mục làm việc hiện tại. printf ngữ C như: %d, %f, %s, ƒ Ví dụ: printf “%s %d %4.2f \n” “abc” 10 11.24 ƒ Cú pháp: popd . Loại bỏ tên thư mục nằm ở đỉnh popd ngăn xếp thư mục, đồng thời chuyển thư mục làm ƒ Đọc dữ liệu cho các biến từ stdin. Dùng tùy chọn –a việc hiện tại sang thư mục ở đỉnh ngăn xếp. để lấy giá trị của mảng. read ƒ Cú pháp: dirs . Liệt kê các thư mục nằm trong ngăn ƒ Ví dụ : read –a M => các phần tử mảng M truy cập dirs như sau: ${M[ind]} xếp thư mục. Variables and Expressions ƒ Cú pháp: export list_var : cho phép các tiến trình ƒ Thực hiện một biểu thức toán học đối với các biến. export con truy cập đến các biến nằm trong list_var của Các phép toán số học được sử dụng trong biểu thức tiến trình cha. Chiều ngược lại không thực hiện. let như: +, -, *, /, +=, -=, ++, , > , &&, ||, ƒ Xác định kiểu dữ liệu cho các biến. ƒ Ví dụ: let a=10 ; let a=a+10 ; declare, typeset ƒ Đọc giá trị của biếnrồi thực hiện yêu cầu tương ứng với giá trị đó. ƒ Thuộc tính khai báo biến chỉ được đọc tức là biến eval readonly ƒ Cú pháp: eval [arg ] .Ví dụ: eval a=\$$i => a là chỉ là hằng số. tham số thứ i. ƒ Lệnh này dùng để xác định các tùy chọn và các getopts set ƒ Thay đổi các tham số bên trong chương trình. tham số tương ứng được truyền vào chương trình. ƒ Cú pháp: unset X => Xóa giá trị của biến X, (gán X ƒ Cú pháp: shift N .Sau mỗi lần gọi lệnh, vị trí các unset bằng rỗng NULL ). shift tham số sẽ dịch sang trái N vị trí, giá trị N mặc định là 1. Các câu lệnh khác Làm việc với script files true ƒ Câu lệnh trả lại giá trị TRUE (trong Unix là 0 ). ƒ Cú pháp: exit VAL . Lệnh thoát khỏi script tại thời false ƒ Câu lệnh trả lại giá trị FALSE (trong Unix là khác 0 ). exit điểm gọi hàm, và trả lại giá trị là VAL khi đọc kết ƒ Lệnh này không thực hiện công việc gì, trả lại giá trị là 0 ( : quả từ Shell thông qua biến $?. TRUE ) ƒ Cú pháp: type command . Xem thông tin về kiểu câu lệnh, và ƒ Cú pháp: exec Script_file . Lệnh này yêu cầu thực type exec hiện một file script tại thời điểm gọi. đường dẫn. enable ƒ Liệt kê tất cả các lệnh Built-in cho phép thực hiện trong Shell. ƒ Cú pháp: source file_name . Thường được sử dụng ƒ Nếu không có tham số thì lệnh này sẽ liệt kê các câu lệnh để nạp dữ liệu file_name vào script hiện tại. Dot được đặt bí danh trong Shell. command ( . ) tương tự như source. alias source, ƒ Cú pháp: alias [name [ = value ] ] gán giá trị value vào các ƒ Thông thường file_name chứa các biến, các hàm, biến name. Ví dụ: alias la=’ls –la’ ; dot (.) và nó được coi như một module làm việc bổ sung. command unalias ƒ Cú pháp: unalias name. xóa bỏ bí danh cho biến name. ƒ Ngoài ra, nếu file_name là 1 tập các lệnh Shell, khi history ƒ Liệt kê các lệnh đã thực hiện trong Shell. gọi thông qua các hàm này, các lệnh đósẽ được thực ƒ Cú pháp: help command. Xem thông tin về cách sử dụng câu hiện tuần tự từ trên xuống. help lệnh. ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 15
  16. ngo duy hoa - khmt - cntt - dhbk - hn Các chương trình tiện ích • Công cụ soạn thảo văn bản VI •Biểu thức chính quy (regular expression) 6. Các tiện ích trong Shell • Công cụ xử lý pattern matching: grep • Streamlined editor – sed • AWK programs • Các công cụ khác VI editor Một số cách sử dụng vi •VI là 1 chương trình soạn thảo tương tác với người dùng theo 2 chế độ: •Bắt đầu chạy bằng cách gõ: vi text_file để –Chế độ dòng lệnh (command mode) soạn thảo hoặc chỉnh sửa nội dung file. –Chế độ soạn thảo (text mode) •Chế độ comand được vi hỗ trợ như sau: – Thêm, chèn text vào file. – Xóa, chỉnh sửa nội dung file. –Ghi nội dung vào file – Làm việc với các lệnh xử lý biểu thức chính quy. •Chế độ text : người dùng soạn thảo như bình thường. Dịch chuyển con trỏ Thêm nội dung vào file Nhấn phím Ý nghĩa Nhấn phím Ý nghĩa a Thêm text vào sau con trỏ h, l Sang trái, sang phải 1 ký tự; A Thêm text vào cuối dòng hiện tại k, j Lên trên, xuống dưới 1 dòng i Thêm text vào trước con trỏ G, nG Chuyển đến dòng cuối file, đến dòng thứ n I Thêm text vào đầu dòng hiện tại o Chèn text vào dưới dòng hiện tại G$ Đến cuối dòng hiện tại O Chèn text vào trên dòng hiện tại w, b Chuyển đến từ kế tiếp, từ đứng trước. :r file Đọc file và thêm vào sau dòng hiện tại :nr file Đọc file và thêm vào sau dòng thứ n L,M,H Chuyển đến dòng đầu, giữa,cuối cửa sổ :w, :q Ghi nội dung vào file, thoát khỏi vi editor ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 16
  17. ngo duy hoa - khmt - cntt - dhbk - hn Xóa nội dung trong file Tìm kiếm và thay thế Cú pháp Ý nghĩa /text, ?text Tìm text từ đầu , từ cuối file. Nhấn phím Ý nghĩa n, N Tiếp tục tìm theo cùng ,ngược hướng đang x , X Xóa 1 ký tự đứng sau , trước vị trí con trỏ thực hiện nx, nX Xóa n ký tự đứng sau , trước vị trí con trỏ ftext, Ftext Tìm từ đầu dòng, tìm từ cuối dòng hiện tại dw, db Xóa 1 từ đứng sau, trước vị trị con trỏ :set ic, :set noic Không phân biệt, phân biệt viết hoa viết thường ndw, ndb Xóa n từ đứng sau, trước vị trị con trỏ :s/oldtext/newtext/ Thay thế oldtext bởi newtext dd Xóa toàn bộ dòng :m,ns/oldtext/newtext/ Thay thế oldtext bởi newtext từ dòng m đến dG Xóa tất cả từ dòng hiện tại đến hết file dòng n :g/text1/s/text2/text3 Tìm dòng chứa text1, thay thế text2 bởi text3 :n,md Xóa từ dòng thứ n đến dòng thứ m :g/text/command Chạy lệnh trên các dòng chứa text D, d$ Xóa từ vị trí con trỏ đến hết file :v/text/command Chạy lệnh trên các dòng không chứa text Biểu thức chính quy regular expression c k s •Làmột mẫu các ký tự (pattern of characters) được dùng để so sánh với các UNIX Tools rocks. cụm từ khác trong quá trình tìm kiếm. •Biểu diễn pattern phụ thuộc vào tools xử lý match nó: – Trong sed,awk, vi: /pattern/ UNIX Tools sucks. – Trong grep : ‘pattern’ match •Sức mạnh của pattern là dùng các ký tự đặc biệt (metacharacters). UNIX Tools is okay. no match Bảng các ký tự đặc biệt Bảng các ký tự đặc biệt Symbol vi sed awk grep Action Symbol vi sed awk grep Action . • • • • Match any character. \n • • • Replay subpattern in match. Match zero or more { } • Match a range of instances. * • • • • preceding characters. \{ \} • • Match a range of instances. Match beginning of Match word's beginning or ^ • • • • \ • line/string. end. $ • • • • Match end of line/string. Match one or more preceding + • Escape following characters. \ • • • • character. Match zero or one preceding ? • [ ] • • • • Match one from a set. characters. Store pattern for later | • Separate choices to match. \( \) • • • replay. ( ) • Group expressions to match ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 17
  18. ngo duy hoa - khmt - cntt - dhbk - hn Thực hiện ví dụ với VI /^[A–Z] $/ Æ trả lại dòng số 5 /^[A–Z][a–z ]*3[0–5]/ Æ trả lại dòng số 2 /[a–z]*\./ Æ trả lại dòng số 1,2,7,8 /^ *[A–Z][a–z][a–z]$/ Æ 4: Tom 5:Dan /^[A–Za–z]*[^,][A–Za–z]*$/ Æ dòng số 5 ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 18
  19. ngo duy hoa - khmt - cntt - dhbk - hn Kết quả sau thay thế :1,$s/\([0o]ccur\)ence/\1rence/ Chú ý cách lưu trữ và thay thế tags ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 19
  20. ngo duy hoa - khmt - cntt - dhbk - hn Chú ý cách lưu trữ và thay thế tags Công cụ GREP • GREP - General Regular Expression Parser: là công cụ xử lý các biểu thức chính quy với mục đích: tìm và in các dòng text trong file thỏa mãn biểu thức chính quy. • Cùng họ với grep còn có: – egrep – extended grep: hỗ trợ nhiều metacharacters hơn. – fgrep – fixed or fast grep: coi tất cả mọi ký tự đều là các ký tự văn bản thường. Sử dụng grep grep Family •Syntax • Cú pháp : grep ‘pattern’ fname1 fname2 grep [-hilnv] [-e expression] [filename] egrep [-hilnv] [-e expression] [-f filename] [expression] •Một số chú ý: [filename] fgrep [-hilnxv] [-e string] [-f filename] [string] [filename] – pattern trong grep nên để trong nháy đơn để – -h Do not display filenames loại bỏ các ý nghĩa đặc biệt khác của ký tự. – -i Ignore case – Tham số thứ hai có thể là tên file text hoặc có – -l List only filenames containing matching lines – -n Precede each matching line with its line thể là output của 1 câu lệnh khác thông qua number cơ chế pipe. – -v Negate matches – -x Match whole line only (fgrep only) –Nếu tìm thấy thì trả lại $? = 0, ngược lại thì – -e expression Specify expression as option giá trị $? ≠ 0. – -f filename Take the regular expression (egrep) or a list of strings (fgrep) from filename Ví dụ với grep: datafile Một số câu lệnh cơ bản $grep NW datafile northwest NW Charles Main 3.0 .98 3 34 •Tìm trên nhiều file $ grep NW d* datafile: northwest NW Charles Main 3.0 .98 3 34 db: northwest NW Joel Craig 30 40 5 123 ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 20
  21. ngo duy hoa - khmt - cntt - dhbk - hn Làm việc với biêu thức chính quy Chú ý khoảng trắng $grep '4$' datafile $ grep TB Savage datafile northwest NW Charles Main 3.0 .98 3 34 grep: Savage: No such file or directory datafile: eastern EA TB Savage 4.4 .84 5 20 $ grep '^n' datafile $ grep 'TB Savage' datafile northwest NW Charles Main 3.0 .98 3 34 northeast NE AM Main Jr. 5.1 .94 3 13 eastern EA TB Savage 4.4 .84 5 20 north NO Margot Weber 4.5 .89 5 9 Chú ý cách sử dụng dấu \ Một số ví dụ khác $ grep '\<north' datafile $ grep '5\ ' datafile northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 northeast NE AM Main Jr. 5.1 .94 3 13 southern SO Suan Chin 5.1 .95 4 15 north NO Margot Weber 4.5 .89 5 9 northeast NE AM Main Jr. 5.1 .94 3 13 central CT Ann Stephens 5.7 .94 5 13 $ grep '[a-z]\{9\}' datafile northwest NW Charles Main 3.0 .98 3 34 $ grep '\.5' datafile southwest SW Lewis Dalsass 2.7 .8 2 18 southeast SE Patricia Hemenway 4.0 .7 4 17 north NO Margot Weber 4.5 .89 5 9 northeast NE AM Main Jr. 5.1 .94 3 13 Streamlined editor - SED Nhiệm vụ của SED • SED: non-interactive editor: –Hỗ trợ các chức năng giống như vi –Người dùng thực hiện các lệnh thay vì trực tiếp chỉnh sửa nội dung trên màn hình. – Không thay đổi nội dung của file, trừ khi lưu •Nhận dữ liệu đầu vào là file text trữ output thông qua shell redirection. • Đưa từng dòng (line) của file vào buffer và xử lý –Hỗ trợ SED-script: là 1 tập các câu lệnh được bởi các lệnh yêu cầu của người dùng. sed hỗ trợ. •In kết quả sau xử lý ra màn hình. • Xóa dòng vừa xử lý trong buffer và thực hiện tương tự với dòng kế tiếp. ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 21
  22. ngo duy hoa - khmt - cntt - dhbk - hn sed Syntax Sử dụng SED •Syntax: sed [-n] [-e] [‘request’] [file ] • Cú pháp một yêu cầu: sed [-n] [-f scriptfile] [file ] – [address[, address]][!]command [arguments] – -n - only print lines specified with the print •Một số chú ý: command (or the ‘p’ flag of the substitute (‘s’) command) – Địa chỉ (address) có thể là – -f scriptfile - next argument is a filename •Chỉ số dòng văn bản trong file text containing editing commands • Dòng văn bản hỏa mãn điều kiện của 1 biểu thức – -e command - the next argument is an editing chính quy /pattern/. command rather than a filename, useful if multiple – Câu lệnh (command) là các ký tự commands are specified – Thông thường yêu cầu thực hiện được đặt – If the first line of a scriptfile is “#n”, sed acts as though -n had been specified trong dấu nháy đơn: sed ‘user_request’ Sử dụng SED Sed Commands •Một số chú ý (tiếp): •Một số lệnh cơ bản trong SED (được sử –Một yêu cầu có tối đa là 2 địa chỉ: dụng thường xuyên): •Nếu chỉ có 1 địa chỉ thì câu lệnh sẽ thực hiện với 1 dòng văn bản tương ứng địa chỉ đó. •Nếu có 2 địa chỉ thì câu lệnh thực hiện với tất cả • s - substitute • d - delete các dòng văn bản từ địa chỉ thứ nhất đến địa chỉ thứ hai. • a -append •p -print –Dấu ! có nghĩa là phủ định. Ví dụ: addr!cmd • i - insert • y - transform nghĩa là thực hiện câu lệnh cmd với các dòng • c - change • q - quit mà không có địa chỉ là addr. Address and Command Một số ví dụ minh họa Examples • d deletes the all lines • 6d deletes line 6 • /^$/d deletes all blank lines • 1,10d deletes lines 1 through 10 • 1,/^$/d deletes from line 1 through the first blank line • /^$/,$d deletes from the first blank line through the last line of the file • /^$/,10d deletes from the first blank line through line 10 • /^ya*y/,/[0-9]$/d deletes from the first line that begins with yay, yaay, yaaay, etc. through the first line that ends with a digit ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 22
  23. ngo duy hoa - khmt - cntt - dhbk - hn Substitute •Syntax: [address(es)]s/pattern/replacement/[flags] – pattern - search pattern – replacement - replacement string for pattern – flags - optionally any of the following • n a number from 1 to 512 indicating which occurrence of pattern should be replaced • g global, replace all occurrences of pattern in pattern space • p print contents of pattern space ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 23
  24. ngo duy hoa - khmt - cntt - dhbk - hn Giới thiệu về AWK • Là công cụ xử lý văn bản rất mạnh: –Hỗ trợ bộ lọc (filter) với biểu thức chính quy (pattern matching) –Hỗ trợ làm việc với số (numerical) –Hỗ trợ khả năng phân chia các trường (field) trên các dòng văn bản. –Hỗ trợ cú pháp lập trình như ngôn ngữ C. –Lấy input từ : file, redirect, pipe,stdin, •Mạnh hơn nhiều so với SED. Một số ví dụ minh họa Mặc định dấu phân cách là: •Một hoặc nhiều khoảng trắng •Tab ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 24
  25. ngo duy hoa - khmt - cntt - dhbk - hn Thực hiện chương trình AWK • Các cách chạy 1 chương trình AWK: – awk 'program' input_file(s) • program và input_files được lấy từ các tham số truyền vào awk – awk 'program' • program được truyền vào dưới dạng tham số, dữ liệu lấy từ stdin (bàn phím) – awk -f program_file input_files •Chương trình program được đọc từ file Cấu trúc chương trình AWK Cấu trúc Pattern-Action •Chương trình awk chứa các •Mỗi 1 chương trình đều có ít nhất một thành phần sau: BEGIN {action} pattern hoặcmột action hoặc cả hai –Khối BEGIN: pattern {action} •Thực hiện trước khi đọc dữ liệu • pattern mặc định sẽ tương thích với mọi input pattern {action} dòng – pattern - action pairs . •Lấy dữ liệu đầu vào • action là in kết quả hiện tại ra màn hình •Thực hiện các lệnh với các dữ liệu . thỏa mãn biểu thức chính quy • patterns được viết trong cú pháp biểu thức –Khối END . chính quy; •Thực hiện sau khi đã đọc hết dữ pattern { action} liệu input. • actions được đặt trong ngoặc { } END {action} Actions Các biến builtin trong awk • action có thể thực hiện các các câu lệnh NF Number of fields in current record NR Number of records so far kiểu ngôn ngữ C như: OFMT Output format for numbers –Các biểu thức với xâu ký tự hoặc với số. OFS Output field separator – Các hàm in/out dữ liệu. ORS Output record separator • action thực hiện trên các dòng được đọc RLENGTH Length of string matched by match function trong buffer thỏa mãn điều kiện pattern. RS Input record separator –Nếu pattern không thiết lập, action sẽ thực RSTART Offset of string matched by match function hiện với mọi dòng. RT The record terminator; gawk sets it to the input text that –Nếu action không thiết lập, tất cả các dòng sẽ matched the character or regex specified by RS được hiển thị SUBSEP Subscript separator ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 25
  26. ngo duy hoa - khmt - cntt - dhbk - hn Các biến builtin trong awk NF Number of fields in current record NR Number of records so far OFMT Output format for numbers OFS Output field separator Thank you! ORS Output record separator RLENGTH Length of string matched by match function RS Input record separator RSTART Offset of string matched by match function RT The record terminator; gawk sets it to the input text that matched the character or regex specified by RS SUBSEP Subscript separator ngo duy hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 26