Chương 5 giới thiệu về Linux Shell thông qua các nội dung sau: Giới thiệu về Shells, môi trường làm việc với Shell, lập trình Shell (Bash), Debugging Shell scripts, Built-in Shell commands, các tiện ích (tools) trong Shell.
ngo hoa - khmt - cntt - dhbk - hn Nội dung học Bài Linux Shell • • • • • • Giới thiệu Shells Môi trường làm việc với Shell Lập trình Shell (Bash) Debugging Shell Scripts Built-in Shell commands Các tiện ích (tools) Shell Vị trí Shells Giới thiệu Shells Vai trị Shells Vai trị Shells • Người dùng bị tách biệt với phần cứng 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 đĩa cứng, nạp vào RAM người dùng cần thực cơng việc • Tập chương trình gọi lớp vỏ hay gọi Shell ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Công việc thực với Shells Công việc thực với Shells • Hỗ trợ người dùng mơi trường xử lý dịng lệnh làm cơng việc sau: – Xử lý câu lệnh thực chúng – Hỗ trợ ngơn ngữ lập trình Shell thơng dịch chương trình viết Shell – Điều khiển môi trường thông qua biến tham số – Hỗ trợ pipe để trao đổi tiến trình – Hỗ trợ định hướng lại vào (I/O) – Làm việc với File System thông qua tên file Các loại Shells • sh Bourne Shell (Original Shell) (Steven Bourne of AT&T) • csh C-Shell (C-like Syntax)(Bill Joy of Univ of California) • ksh Korn-Shell (Bourne+some C-shell)(David Korn of AT&T) • tcsh Turbo C-Shell (More User Friendly CShell) • bash Bourne Again Shell (GNU Improved Bourne Shell) Các loại Shells Dấu nhắc đợi lệnh • Nhận diện shell làm việc: lệnh echo $echo $SHELL /bin/sh %echo $shell /bin/csh • Dấu nhắc lệnh –# –% –$ ta root, shell dấu nhắc chạy C shell dấu nhắc chạy Bash shell K shell • Khuyến khích dùng Bash Shell Login shell • Truy nhập vào hệ thống: – Local system : chạy trực tiếp máy : login – Network system: kết nối với hệ thống thông qua mạng: ssh, telnet, rlogin • Vớ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 hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo 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 Mơi trường làm việc Shell Startup Shell • Đọc file cu hỡnh ặ thit lp mụi trng: ã Ch tương tác (interactive): • • • • • • • • • Start up Shell,Shell options Command processing, command types I/O standard,Pipe Shell variables,User’s variables Command syntax Filename substitution Command substitution Quotes Math, string operators ~/.bashrc & ~/.bash_profile • Đọc nội dung file, tự viết thêm hàm alias export – Login shell (/bin/login) đọ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 hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Basic Shell options Interactive Non-login Shell • Kiểm tra kết thay đổi cách chạy lại chương trình Shell Option Description emacs Enters emacs editing mode (on by default) ignoreeof Doesn't allow use of a single CTRL-D to log off; use the exit 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 noglob Doesn't expand filename wildcards like * and ? (wildcard 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 bỏ options Basic Shell options • Tự nghĩ ví dụ thực với options này: – Kiểm tra quyền on/off option – Lấy ví dụ với ký tự *, ? Interactive Shell Các ký tự đặc biệt Shell Character ; & () | & *?[]~+-@! “‘\ ` Meaning Command separator Background execution Command grouping Pipe 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 Xử lý dịng lệnh • Các bước xử lý dòng lệnh Shell: Bật chế độ ghi nhật ký (history) Phân tích cú pháp thành cụm từ (tokens) Cập nhật lại nhật ký (history updated) Xử lý dấu nháy (quotes) Xác định aliases functions Thiết lập: redirect, background, pipe Thay giá trị cho biến (variables) Thực câu lệnh đóng vai trị tham số truyền (command substitution) Thay tên file ký tự đặc biệt (metacharacters) 10 Thực câu lệnh gốc ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Các loại câu lệnh • Khi người dùng gõ câu lệnh, Shell thực kiểm tra theo 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 khơng (executable programs)? Nu khụng tha ặ thụng bỏo li ã Thực chương trình Shell??? Cú pháp (Syntax) $ command options arguments • Có hai loại options: – Short options: viết tắt chữ : -o – Long options: viết đầy đủ tên : option_name Commands & Arguments • $ mv oldfile newfile mv arguments oldfile newfile • $ echo Smile, you are in Bridgeport City Smile, you are in Bridgeport City Smile, $ you echo arguments are in Bridgeport City Khoảng trắng dấu phân cách tham số Thực chương trình Shell Input, Output, Error INPUT shell OUTPUT ERROR ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Chuyển hướng vào/ra (Redirect) Common redirection examples • Shell hỗ trợ ký tự đặc biệt để thực chuyển hướng vào với file – Chuyển hướng vào chuẩn: < – Chuyển hướng chuẩn : > – Chuyển hướng lỗi chuẩn : 2> • Xét số ví dụ: – $ grep Tom datafile > temp – $ mail tom < memo – $ find –name filex 2> errors Kênh truyền liệu Pipe • Standard Output command Standard Input command • Có thể thực với nhiều pipes : Biến môi trường Shell Liệt kê thông qua lệnh $set $env Tên biến = Giá trị Tên Shell sử dụng mặc định BASH_VERSION = 3.1.17 Phiên Shell COLUMNS = 80 Số cột thể cửa sổ Shell LINES = 25 Số dòng hiển thị cửa sổ Shell LOGNAME = khmt Tên người dùng làm việc với Shell (login) OSTYPE = Linux Kiểu hệ điều hành HISTFILE = /home/khmt/.bash_history Tên file lưu trữ lệnh thực (nhật ký) HOSTNAME = khmt-laptop Tên máy tính 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 Shell 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 PWD = /home/khmt Thư mục làm việc mặc định PS1, PS2 Các dấu nhắc lệnh (prompt) cấp bậc SHELL = /bin/bash Tên chương trình Shell USER = khmt Tên người dùng làm việc USERNAME = khmt Ý nghĩa BASH = /bin/bash Built-in Shell variables Variable Variable $# Tổng số tham số truyền vào chương trình $_ Tham số lựa chọn (option) thực với câu lệnh (chương trình) Tên người dùng đăng nhập vào hệ thống lúc đầu $? Giá trị trả lại kết thúc thực câu lệnh UID, EUID User ID Effective user ID number $$ Chỉ số tiến trình (current process) GROUPS Liệt kê danh sách nhóm chứa người dùng $! FUNCNAME Tên hàm làm việc Chỉ số tiến trình cuối làm việc chế độ (background) ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Built-in Shell variables $0 Tên (câu lệnh) chương trình thực $n Xác định giá trị tham số thứ n truyền vào chương trình Với n >9 dùng cú pháp ${n} $*, $@ "$*" "$@" Tất tham số truyền vào chương trình ($1 $2 ) Hiển thị tham số truyền vào dạng xâu ("$1 $2 ") Phân cách tham số ký tự chứa biến IFS Hiển thị tham số phân cách riêng biệt dấu nháy kép ("$1" "$2" ) Ví dụ minh họa • Tự nghĩ ví dụ minh họa cho biến Shell – Chú ý dùng lệnh: set để truyền tham số vào chương trình – Chú ý sử dụng IFS để thấy phân biệt “$*” “$@” Biến người dùng • Cú pháp khai báo: VARIABLE_NAME=VALUE • Chú ý làm việc với bash sh: – Tên biến: bắt đầu chữ dấu _ – Không dùng ký tự đặc biệt như: ? , * / ` “ ^ % – Không đặt khoảng trắng bên cạnh dấu = – Có phân biệt viết hoa viết thường – Giá trị NULL : • Hoặc khơng ghi bên phải • Hoặc gán “” Giá trị biến • Truy cập đến giá trị biến: $variable_name • Không thiết phải định nghĩa kiểu biến: – Mọi giá trị hiểu xâu ký tự – Về bash hỗ trợ phép toán với số nguyên • Phụ thuộc vào thao tác làm việc với biến Ỉ Shell xác định kiểu giá trị cần thiết declare’s options Ví dụ minh họa • Thực ví dụ với lệnh: – Echo – Expr, let a Khai báo biến kiểu mảng f Khai báo tên hàm i Khai báo biến kiểu số nguyên p Hiển thị thuộc tính giá trị biến r Khai báo biến đọc read-only x Khai báo biến sử dụng lệnh shell • declare khai báo với biến cục (local) • Sử dụng +/- option để tắt/bật thuộc tính ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Làm việc với mảng (array) • Khai báo biến dạng mảng: declare –a array_name • Khởi tạo mảng: array_name=(val1 val2 val3 …) • Gán giá trị cho phần tử: Ví dụ minh họa • Khai báo mảng: – Khởi tạo từ đầu mảng – Thêm phần tử, truy cập đến phần tử – Lấy giá trị phần tử • Tìm hiểu readonly, declare –r, -p array_name[index]=value • Lấy giá trị phần tử: ${array_name[index]} Variable substitution Cú pháp Ý nghĩa ${var:-value} Nếu var NULL bị unset value thực thay var câu lệnh Giá trị var không đổi Nếu var NULL bị unset value gán vào var thực câu lệnh Nếu var NULL bị unset thơng báo message hiển thị standard error ${var:=value} ${var:?message} ${var:+value} • Tự nghĩ ví dụ để thực thay biến Nếu var set value thực thay var câu lệnh Giá trị var khơng đổi Filename substitution * Ví dụ minh họa ? Thay cho cụm ký tự (kể số ký tự 0) Thay cho ký tự [abc] Chứa ký tự liệt kê ngoặc [!abc] Không chứa ký tự liệt kê ngoặc { a, ile, ax } [a-z] Chứa ký tự hay cụm ký tự khai báo ngoặc Chứa ký tự miền từ a-z [!a-z] Không chứa ký tự miền từ a-z Command substitution • Ứng dụng: – Thực câu lệnh nằm câu lệnh khác – Gán kết thực câu lệnh vào biến • Có hai cách thực sau: – Cú pháp 1: `command options arguments` – Cú pháp 2: $(command options arguments) Chú ý: thực với Shell option : noglob off ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Dấu nháy (quotes) • Có loại dấu nháy sử dụng Shell sau: ‘ “ ` Dấu nháy đơn (single quote ) Dấu nháy kép (double quote ) Dấu nháy ngược (back quote) Floating operators • Sử dụng tiện ích bc: variable=$(echo “OPTIONS; OPERATIONS” | bc) • Sử dụng tiện ích dc: echo “ARGUMENTS OPTIONS OPERATIONS” | dc • bc sử dụng thơng dụng dc • Sử dụng tiện ích awk nawk: variable=`awk ARGUMENTS AWK_SCRIPT` Arithmetic Expressions • Bash hỗ trợ cách tính giá trị biểu thức sau: – Cách 1: $((expression)) – Cách 2: $[expression] – Cách 3: expr expression – Cách 4: let expression let “expression” – Cách 5: sử dụng chương trình tính : bc, dc – Cách 6: sử dụng awk script String operators Operators ${#param} ${param%word} Description Xác định độ dài xâu Xóa từ cuối param cụm từ chứa word ngắn ${param%%word} Xóa từ cuối param cụm từ chứa word dài ${param#word} Xóa từ đầu param cụm từ chứa word ngắn ${param##word} Xóa từ đầu param cụm từ chứa word dài Shell Scripts Shell programming • Shell Script file text Ỉ soạn thảo chương trình soạn thảo • Nội dung file script bao gồm: – Các lệnh Shell – Tên chương trình thực thi – Các dịng thớch ã script thc hin c ặ cn t thêm quyền thực cho script (chmod + x ) ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell ngo hoa - khmt - cntt - dhbk - hn Shell Script Shell Scripts • Gán biến, phép tố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 : function Kiểm tra điều kiện So sánh số test [ … ] • Cách xác định giá trị biểu thức logic: – [ logic_expression ] test logic_expression • Các phép tốn logic: – Làm việc với số – Làm việc với xâu ký tự – Làm việc với file • Thực với số ngun dùng: – ((logic_expression)) let “logic_expression” • Giá trị logic: – TRUE trả lại kết $? = – FALSE trả lại kết $? ≠ So sánh xâu test [ … ] Operator Returns TRUE (zero exit status) if int1 –eq int2 int1 is equal to int2 int1 –ge int2 int1 is greater than or equal to int2 int1 –gt int2 int1 is greater than int2 int1 –le int2 int1 is less than or equal int2 int1 –lt int2 int1 is less than int2 int1 –ne int2 int1 is not equal to int2 Kiểm tra file test [ … ] 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 be seen by test) -c file file is a character special file -z string string is null (and string must be seen by test) -d file file is a directory -f file file is an ordinary String1 = string2 string1 is identical to string2 -g file file has its set group id (SGID) bit set -k file file has its sticky bit set -p file file is a named pipe string1 ! = string2 string1 is not identical to string2 ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 10 ngo hoa - khmt - cntt - dhbk - hn if_ex2.sh: print a greeting • Chú ý hàm lấy thời gian: date Cú pháp vòng lặp for for var in word1 word2…wordn command command … done var nhận giá trị word1, word2, Cú pháp vòng while while condition command1 command2 … done Cú pháp case select case value in pat1) command;; command;; … command;; pat2) command command;; … command;; patn) command;; command;; … command;; esac select var in wordlist command(s) done • case dạng câu lệnh rẽ nhánh, tương tự cú pháp elif •select là cú pháp rẽ nhánh mở rộng case,có hiển thị menu Một số ví dụ với for loop for var in list=“$var $list” done echo "$list" for var in $@ args=“$var $args” done echo "$args" for var in [!ef]*.sh res="$var $res" done echo "$res" for var args=“$var $args” done echo "$args" Một số ví dụ với while loop • Minh họa công việc hàm SELECT thông qua while case Các câu lệnh command1, command2, thực điều kiện condition trả lại giá trị FASLE ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 12 ngo hoa - khmt - cntt - dhbk - hn Cú pháp vòng lặp until until condition command1 command2 … done Ví dụ với until loop • Viết chương trình minh họa cửu chương Các câu lệnh command1, command2, thực điều kiện condition trả lại giá trị TRUE Cú pháp break Cú pháp continue Debugging Shell Scripts ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 13 ngo hoa - khmt - cntt - dhbk - hn Bố cục chương trình rõ ràng Một số quy tắc viết chương trình • Xác định xác loại Shell dùng để thụng dch ặ xỏc nh cỏc cỳ phỏp lnh ã Dùng tên biến có ý nghĩa khơng bị trùng lặp: – Các biến export liệt kê lệnh: env – Các biến Shell liệt kê bởi: set • Viết thích cho 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 chương trình • Sử dụng cơng cụ bash debugger (chỉ chạy với bash version ≥ 3.0) Hỗ trợ: – Chạy câu lệnh, kiểm tra giá trị biến, – Hỗ trợ break point, nhiều tính khác… • Dị lỗi thơng qua lệnh in kết stdout file : echo, printf • Chạy chế độ debug bash để hiển thị bước làm việc Chạy chế độ debug Shell • Shell hỗ trợ chế độ làm việc sau giúp người lập trình dị tìm lỗi: set –o option bash -option noexec -n Ý nghĩa Không chạy, kiểm tra cú pháp verbose -v Hiển thị câu lệnh trước chạy xtrace -x Hiển thị câu lệnh kết sau xử lý Thông báo lỗi biến chưa đặt giá trị nounset Phân loại theo chức Shell built-in commands • • • • • Input/Output commands Working with Files Variables and expressions Working with script files Others ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 14 ngo hoa - khmt - cntt - dhbk - hn Input/Output commands echo In stdout biểu thức, xâu ký tự hay biến Kết thúc lệnh tự động xuống dòng Dùng tùy chọn –n để viết dịng Ví dụ: echo –n “hello” ; echo $A printf In hình biến với định dạng cho trước Các định dạng sử dụng hàm printf( ) ngôn ngữ C như: %d, %f, %s, Ví dụ: printf “%s %d %4.2f \n” “abc” 10 11.24 read Đọc liệu cho biến từ stdin Dùng tùy chọn –a để lấy giá trị mảng Ví dụ : read –a M => phần tử mảng M truy cập sau: ${M[ind]} Working with files Chuyển thư mục vd: cd dir_name cd Print working directory – in thư mục làm việc Cú pháp: pushd dir_name : đưa thư mục dir_name vào ngăn xếp thư mục (directory stack), chuyển pushd dir_name thành thư mục làm việc pwd popd Cú pháp: popd Loại bỏ tên thư mục nằm đỉnh ngăn xếp thư mục, đồng thời chuyển thư mục làm việc sang thư mục đỉnh ngăn xếp dirs Cú pháp: dirs Liệt kê thư mục nằm ngăn xếp thư mục Variables and Expressions let eval set unset Thực biểu thức toán học biến Các phép toán số học sử dụng biểu thức như: +, -, *, /, +=, -=, ++, , > , &&, ||, Ví dụ: let a=10 ; let a=a+10 ; Đọc giá trị biến thực yêu cầu tương ứng với giá trị Cú pháp: eval [arg …] Ví dụ: eval a=\$$i => a tham số thứ i Thay đổi tham số bên chương trình Cú pháp: unset X => Xóa giá trị biến X, (gán X rỗng NULL ) Làm việc với script files declare, typeset Xác định kiểu liệu cho biến readonly Thuộc tính khai báo biến đọc tức biến số getopts Lệnh dùng để xác định tùy chọn tham số tương ứng truyền vào chương trình shift Cú pháp: shift N Sau lần gọi lệnh, vị trí tham số dịch sang trái N vị trí, giá trị N mặc định Các câu lệnh khác true Câu lệnh trả lại giá trị TRUE (trong Unix ) Câu lệnh trả lại giá trị FALSE (trong Unix khác ) Cú pháp: exit VAL Lệnh thoát khỏi script thời điểm gọi hàm, trả lại giá trị VAL đọc kết từ Shell thông qua biến $? false exit exec Cú pháp: exec Script_file Lệnh yêu cầu thực file script thời điểm gọi type Cú pháp: source file_name Thường sử dụng để nạp liệu file_name vào script Dot command ( ) tương tự source source, Thông thường file_name chứa biến, hàm, dot (.) coi module làm việc bổ sung command Ngoài ra, file_name tập lệnh Shell, gọi thông qua hàm này, lệnh thực từ xuống Cú pháp: export list_var : cho phép tiến trình truy cập đến biến nằm list_var tiến trình cha Chiều ngược lại không thực export : enable alias Lệnh khơng thực cơng việc gì, trả lại giá trị ( TRUE ) Cú pháp: type command Xem thông tin kiểu câu lệnh, đường dẫn Liệt kê tất lệnh Built-in cho phép thực Shell Nếu khơng có tham số lệnh liệt kê câu lệnh đặt bí danh Shell Cú pháp: alias [name [ = value ] ] gán giá trị value vào biến name Ví dụ: alias la=’ls –la’ ; unalias Cú pháp: unalias name xóa bỏ bí danh cho biến name history Liệt kê lệnh thực Shell help Cú pháp: help command Xem thông tin cách sử dụng câu lệnh ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 15 ngo hoa - khmt - cntt - dhbk - hn Các chương trình tiện ích Các tiện ích Shell VI editor • VI chương trình soạn thảo tương tác với người dùng theo chế độ: – Chế độ dòng lệnh (command mode) – Chế độ soạn thảo (text mode) • • • • • • Công cụ soạn thảo văn VI Biểu thức quy (regular expression) Cơng cụ xử lý pattern matching: grep Streamlined editor – sed AWK programs Các công cụ khác Một số cách sử dụng vi • Bắt đầu chạy cách gõ: vi text_file để soạn thảo chỉnh sửa nội dung file • Chế độ comand vi hỗ trợ 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 lệnh xử lý biểu thức quy • Chế độ text : người dùng soạn thảo bình thường Dịch chuyển trỏ Nhấn phím Ý nghĩa h, l Sang trái, sang phải ký tự; k, j Lên trên, xuống dòng G, nG Chuyển đến dòng cuối file, đến dòng thứ n G$ Đến cuối dòng w, b Chuyển đến từ kế tiếp, từ đứng trước L,M,H Chuyển đến dòng đầu, giữa,cuối cửa sổ Thêm nội dung vào file Nhấn phím a A i I o O :r file :nr file :w, :q Ý nghĩa Thêm text vào sau trỏ Thêm text vào cuối dòng Thêm text vào trước trỏ Thêm text vào đầu dòng Chèn text vào dòng Chèn text vào dòng Đọc file thêm vào sau dòng Đọc file thêm vào sau dòng thứ n Ghi nội dung vào file, thoát khỏi vi editor ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 16 ngo hoa - khmt - cntt - dhbk - hn Tìm kiếm thay Xóa nội dung file Nhấn phím Ý nghĩa Cú pháp Ý nghĩa /text, ?text Tìm text từ đầu , từ cuối file n, N Tiếp tục tìm theo ,ngược hướng thực x,X Xóa ký tự đứng sau , trước vị trí trỏ nx, nX Xóa n ký tự đứng sau , trước vị trí trỏ ftext, Ftext Tìm từ đầu dịng, tìm từ cuối dịng dw, db Xóa từ đứng sau, trước vị trị trỏ :set ic, :set noic ndw, ndb Xóa n từ đứng sau, trước vị trị trỏ Không phân biệt, phân biệt viết hoa viết thường :s/oldtext/newtext/ Thay oldtext newtext dd Xóa tồn dịng :m,ns/oldtext/newtext/ dG Xóa tất từ dòng đến hết file Thay oldtext newtext từ dịng m đến dịng n :n,md Xóa từ dịng thứ n đến dịng thứ m :g/text1/s/text2/text3 Tìm dòng chứa text1, thay text2 text3 D, d$ Xóa từ vị trí trỏ đến hết file :g/text/command Chạy lệnh dòng chứa text :v/text/command Chạy lệnh dịng khơng chứa text Biểu thức quy regular expression • Là mẫu ký tự (pattern of characters) dùng để so sánh với cụm từ khác q trình tìm kiếm • Biểu diễn pattern phụ thuộc vào tools xử lý nó: c k s UNIX Tools rocks match UNIX Tools sucks – Trong sed,awk, vi: /pattern/ – Trong grep : ‘pattern’ match • Sức mạnh pattern dùng ký tự đặc biệt (metacharacters) UNIX Tools is okay no match Bảng ký tự đặc biệt Symbol vi • sed • awk • * • • • ^ • • • $ • • • \ • • • [] • • • \( \) • • grep Action • Match any character Match zero or more • preceding characters Match beginning of • line/string • Match end of line/string Escape following • character • Match one from a set Store pattern for later • replay Bảng ký tự đặc biệt Symbol vi \n • {} \{ \} \< \> sed • awk • • • + • ? • | () • • grep Action • Replay subpattern in match Match a range of instances • Match a range of instances Match word's beginning or end Match one or more preceding characters Match zero or one preceding characters Separate choices to match Group expressions to match ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 17 ngo hoa - khmt - cntt - dhbk - hn Thực ví dụ với VI /^[A–Z] $/ Ỉ trả lại dịng số /^[A–Z][a–z ]*3[0–5]/ Æ trả lại dòng số /[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ố ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 18 ngo hoa - khmt - cntt - dhbk - hn Kết sau thay :1,$s/\([0o]ccur\)ence/\1rence/ Chú ý cách lưu trữ thay tags ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 19 ngo hoa - khmt - cntt - dhbk - hn Chú ý cách lưu trữ thay tags Cơng cụ GREP • GREP - General Regular Expression Parser: công cụ xử lý biểu thức quy với mục đích: tìm in dịng text file thỏa mãn biểu thức quy • Cùng họ với grep cịn có: – egrep – extended grep: hỗ trợ nhiều metacharacters – fgrep – fixed or fast grep: coi tất ký tự ký tự văn thường Sử dụng grep • Cú pháp : grep ‘pattern’ fname1 fname2 … • Một số ý: – pattern grep nên để nháy đơn để loại bỏ ý nghĩa đặc biệt khác ký tự – Tham số thứ hai tên file text output câu lệnh khác thông qua chế pipe – Nếu tìm thấy trả lại $? = 0, ngược lại giá trị $? ≠ Ví dụ với grep: datafile grep Family • Syntax grep [-hilnv] [-e expression] [filename] egrep [-hilnv] [-e expression] [-f filename] [expression] [filename] fgrep [-hilnxv] [-e string] [-f filename] [string] [filename] – -h Do not display filenames – -i Ignore case – -l List only filenames containing matching lines – -n Precede each matching line with its line number – -v Negate matches – -x Match whole line only (fgrep only) – -e expression Specify expression as option – -f filename Take the regular expression (egrep) or a list of strings (fgrep) from filename Một số câu lệnh $grep NW datafile northwest NW Charles Main 3.0 98 34 •Tìm nhiều file $ grep NW d* datafile: northwest NW Charles Main 3.0 98 34 db: northwest NW Joel Craig 30 40 123 ngo hoa - khmt - cntt - dhbk - hn bai giang Linux Shell 20 ngo hoa - khmt - cntt - dhbk - hn Làm việc với biêu thức quy Chú ý khoảng trắng $grep '4$' datafile $ grep TB Savage datafile northwest NW Charles Main 3.0 98 34 grep: Savage: No such file or directory datafile: eastern EA TB Savage 4.4 84 20 $ grep '^n' datafile $ grep 'TB Savage' datafile northwest NW Charles Main 3.0 98 34 northeast NE AM Main Jr 5.1 94 13 north NO Margot Weber 4.5 89 Chú ý cách sử dụng dấu \ WE SO NE CT Sharon Gray Suan Chin AM Main Jr Ann Stephens Một số ví dụ khác $ grep '\