intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Hệ điều hành Unix: Chương 5 - Ngô Duy Hòa

Chia sẻ: Năm Tháng Tĩnh Lặng | Ngày: | Loại File: PDF | Số trang:26

76
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Hệ điều hành Unix: Chương 5 - 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 • sh Bourne 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 • csh C-Shell (C-like Syntax)(Bill Joy of Univ. of /bin/sh /bin/csh California) • Dấu nhắc lệnh • ksh Korn-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 • tcsh Turbo 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 newfile • Có hai loại options: – Short options: viết tắt bởi các chữ cái : -o • $ echo Smile, you are in Bridgeport City – Long options: viết đầy đủ tên : --option_name Smile, you are in Bridgeport City 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 ra chuẩn : > – Chuyển hướng lỗi chuẩn : 2> • Xét một số ví dụ: – $ grep Tom datafile > temp – $ mail tom < memo – $ find . –name filex 2> errors Biến môi trường trong Shell Kênh truyền dữ liệu Pipe 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 BASH = /bin/bash Tên Shell sử dụng mặc định. Standard Input của command kế tiếp. 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. SHELL = /bin/bash Tên chương trình Shell. Tham số hoặc lựa chọn (option) đang thực hiện với $_ 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 – Chú ý dùng các lệnh: set để truyền tham số $n 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 “” declare’s options Ví dụ minh họa 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ử – Lấy giá trị phần tử array_name=(val1 val2 val3 …) • 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) ? Thay thế cho một ký tự bất kỳ • Ứng dụng: – 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. int1 –gt int2 int1 is greater than int2 • Thực hiện với các số nguyên có thể dùng: – ((logic_expression)) hoặc let “logic_expression” int1 –le int2 int1 is less than or equal int2 • Giá trị logic: – TRUE nếu trả lại kết quả $? = 0 int1 –lt int2 int1 is less than int2 – 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 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 string1 ! = string2 string1 is not identical to string2 -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 trên Shell đều được thực hiện. command1 then command1 • Sử dụng &&: cmd1 && cmd2 command2 … 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 condition là giá trị trả lại – Câu lệnh cmd2 chỉ thực hiện khi cmd1 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 command • Chú ý các hàm: command … command … – Who else elif condition2 if condition2 then – Grep then command command command – Giá trị trả lại $? … … else … if condition3 elif coditionn then then command command … command else … command else … command fi command fi … 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 case value in • Chú ý hàm lấy thời gian: date pat1) command;; select var in wordlist 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ú patn) command;; pháp elif 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 word1 word2…wordn 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 cd ƒ 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 thúc mỗi lệnh sẽ tự động xuống dòng. Dùng tùy chọn echo –n để viết trên cùng một dòng. ƒ Print working directory – in thư mục làm việc hiện 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 vào ngăn xếp thư mục (directory stack), và chuyển pushd đị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ư: +, -, *, /, +=, -=, ++, --, > , &&, ||,.. declare, ƒ Xác định kiểu dữ liệu cho các biến. ƒ Ví dụ: let a=10 ; let a=a+10 ; typeset ƒ Đọc giá trị của biến rồ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 chỉ là hằng số. ƒ Cú pháp: eval [arg …] .Ví dụ: eval a=\$$i => a là tham số thứ i. ƒ Lệnh này dùng để xác định các tùy chọn và các ƒ Thay đổi các tham số bên trong chương trình. getopts tham số tương ứng được truyền vào chương trình. set ƒ 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 shift tham số sẽ dịch sang trái N vị trí, giá trị N mặc định bằng rỗng NULL ). 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: exec Script_file . Lệnh này yêu cầu thực ƒ Cú pháp: type command . Xem thông tin về kiểu câu lệnh, và 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 ƒ Cú pháp: alias [name [ = value ]..] gán giá trị value vào các source, ƒ 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. unalias ƒ Cú pháp: unalias name. xóa bỏ bí danh cho biến name. command ƒ 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 Tìm kiếm và thay thế Xóa nội dung trong file 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. grep Family Sử dụng grep • Syntax grep [-hilnv] [-e expression] [filename] • Cú pháp : grep ‘pattern’ fname1 fname2 … 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2