1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình Shell (2017)

32 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 670,45 KB

Nội dung

Bài giảng Lập trình Shell trình bày các nội dung sau: Giới thiệu, soạn thảo, cấp quyền, thực thi, cú pháp ngôn ngữ Shell, làm việc với chuỗi và văn bản, mảng, hàm, các lệnh nội tại của shell. Mời các bạn cùng tham khảo!

03/ 24/ 2017 L P TRÌNH SHELL NỘI DUNG Giới thiệu Soạn thảo, cấp quyền, thực thi Cú pháp ngôn ngữ Shell Làm việc với chuỗi văn Mảng Hàm Các lệnh nội Shell 03/ 24/ 2017 Giới thiệu HĐH cung cấp khả giao tiếp với kernel thơng qua trình diễn dịch trung gian Shell Chức giống “command.com” (DOS) Các lệnh lệnh Kết hợp nhiều tiến trình : $ls –al | more Giới thiệu (tt) Các loại Shell Linux Trình ứng dụng csh Kernel bash X w in dow 03/ 24/ 2017 Giới thiệu (tt) Các loại Shell Linux ◦Bourne shell: gọi sh, Steve Bourne tạo ◦C-shell: gọi csh, kèm với BSD UNIX ◦Korn shell: gọi ksh, David Korn tạo ◦Bash (Bourne Again Shell): shell mặc định Linux ◦Người dùng chuyển đổi shell ◦Ví dụ: chuyển từ bash sang csh, gõ lệnh: ◦$ csh Giới thiệu (tt) Sử dụng Shell ngôn ngữ lập trình: có hai cách để viết chương trình điều khiển shell ◦Cách 1: Gõ chương trình trực tiếp dòng lệnh (kể lệnh điều khiển if, for, case, …) ◦Ví dụ: $for file in * >do > if grep –l ‘main()’ $file > then > more $file > fi >done ◦Hoặc viết liên tục lệnh phân cách dấu “;”) $for file in *;do;if grep –l ‘main()’ $file; then; more $file;fi;done 03/ 24/ 2017 Giới thiệu (tt) ◦Cách 2: viết câu lệnh vào tập tin yêu cầu shell thực thi tập tin file chương trình (cần cấp quyền thực thi cho tập tin thực thi được) # script tìm th m!c hi#n hành # chu&i ch)a chu&i “main()” for file in * if grep –l ‘main()’ $file then more $file fi Done exit Soạn thảo, cấp quyền, thực thi Tạo tập tin shell script trình soạn thảo văn (thơng thường, tập tin shell nên có phần mở rộng sh) Cấp quyền thực thi cho tập tin Thực thi tập tin 03/ 24/ 2017 Cú pháp ngôn ngữ Shell Biến Chuyển hướng vào/ra Lệnh kiểm tra Biểu thức tính tốn expr Cấu trúc điều khiển Danh sách Lấy kết lệnh Sử dụng biến Biến không cần phải khai báo trước sử dụng Có phân biệt chữ hoa, chữ thường Biến shell ln có dạng chuỗi Gán trị cho biến: ◦Tenbien=giatri (khơng có khoảng trắng hai bên dấu =) ◦name=“hung” ◦number=100 03/ 24/ 2017 Sử dụng biến Lấy giá trị biến: sử dụng $ trước tên biến ◦Ví dụ: tp=‘HaNoi’ echo $tp HaNoi Hiển thị giá trị biến hình: sử dụng lệnh echo ◦echo ‘noi dung’ ◦echo “noi dung” Sử dụng biến ◦Phân biệt cặp nháy đơn nháy đôi ◦Nội dung nằm cặp nháy đơn xem chuỗi ◦ Ví dụ: ◦Nội dung nằm cặp nháy đơi chuỗi giá trị biến Muốn hiển thị ký tự đặc biệt, phải thêm vào trước ký tự \ 03/ 24/ 2017 Sử dụng biến Nhập giá trị cho biến từ bàn phím ◦Cú pháp: read tenbien Biến môi trường: ◦Là biến định nghĩa trước mang giá trị mặc định shell khởi động ◦Tên biến môi trường thường chữ hoa Sử dụng biến Biến môi trường: HOME PATH PS1 PS2 IFS Chứa thư mục home người dùng Danh sách thư mục tìm kiếm thực lệnh Dấu nhắc lệnh (root: #, người dùng bình thường: $) Dấu nhắc thứ cấp, thường > Dấu phân cách trường danh sách chuỗi, thường dấu khoảng trắng, tab xuống hàng PPID Số ID tiến trình cha SHELL RANDOM Số ngẫu nhiên SECONDS Thời gian làm việc tính theo giây 03/ 24/ 2017 Sử dụng biến Biến tham số: ◦Dùng để tiếp nhận tham số dòng lệnh cho việc xử lý ◦Sau lệnh gọi thường có tham số, giá trị biến tham số chương trình Chuyển hướng vào Tiến trình linux ln gắn liền với đầu xử lý dòng (stream) liệu như: ◦Đầu vào chuẩn: stdin (0) ◦Đầu chuẩn: stdout (1) ◦Cơ sở liệu lỗi: stderr (2) Các hướng vào thay đổi thơng báo đặc biệt như: 03/ 24/ 2017 Chuyển hướng vào (tt) Ví dụ: ◦date > file1.txt: lấy kết lệnh date ghi vào file1.txt ◦ls ◦cat < file1 > file2: lệnh cat nhận nội dung file1 ghi vào file2 Lệnh kiểm tra Sử dụng lệnh test [ ], cho phép kiểm tra kiểu sau: ◦Kiểm tra chuỗi: 03/ 24/ 2017 Lệnh kiểm tra ◦So sánh toán học: Lệnh kiểm tra ◦Kiểm tra tập tin: 10 03/ 24/ 2017 Vịng lặp while Cú pháp: Ví dụ: while condition statements done echo "Enter password" read trythis while [ "$trythis" != "secret" ]; echo "Sorry, try again" read trythis done foo=1 while [ "$foo" −le 20 ] echo "Here we go again" foo=$(($foo+1)) done Vòng lặp until Cú pháp: until condition ◦condition vịng lặp statements Ví dụ: done echo ‘Please enter a number’ read n until [ $n –lt 10 ] echo $n n=‘expr $n – 1` done 18 03/ 24/ 2017 Lệnh break, continue, exit break: khỏi vịng lặp exit: khỏi chương trình, trở dấu nhắc lệnh continue: khơng thực lệnh lại vòng lặp mà quay lên thực vòng lặp Xử lý chuỗi, văn Sử dụng Regular expressions Xử lý chuỗi 19 03/ 24/ 2017 Regular expressions Là dạng biểu thức dùng để so khớp văn bản, dùng tìm kiếm chuỗi biểu thức ^ $ [] [^] Ýnghĩa Ví dụ bắt đầu dịng Kết thúc dòng Đại diện cho ký tự ^tux đầu dòng chuỗi tux tux$ cuối dòng chuỗi tux Hack sau Hack ký tự (Hack1, Hacki) So khớp với ký tự coo[kl] cook cool [] Ngoại trừ ký tự [ ] 9[^01] 92, 93,…ngoại trừ 91 90 Regular expressions (tt) biểu thức [mn] ? + * () Ýnghĩa Ví dụ So khớp với ký tựtừ m đến n Ký tự trước ? Chỉ xuất 0-1 lần [1-5] ký tự số từ đến colou?r color colour, colouur Ký tự trước + phải xuất Rollno-9+ Rollno-99 lần Rollno-9,…nhưng khơng thể RollnoKý tự trước * xuất co* l cl, col, cool,… từ đến nhiều lần Nhóm ký tự ( ) ma(tri)?x max matrix xử lý thực thể 20 03/ 24/ 2017 Regular expressions (tt) biểu thức {n} Ýnghĩa Ví dụ Phần tử đứng trước phải xuất n lần [0-9]{3} liên tục ba ký tự số từ 0-9 Phần tử đứng trước phải xuất n lần [0-9]{2,} số từ 0-9 tối thiểu hai ký tự {n, m} Phần tử đứng trước phải xuất từ n đến m lần [0-9]{2,5} liên tục từ đến ký tự số | Hoặc \ Chỉ định ký tự đặc biệt $, ^, , * , + Oct (1st | 2nd) Oct 1st Oct 2nd a\ b a.b (bắt buộc có ký tự dấu chấm (.) a b) {n,} Regular expressions (tt) Ví dụ: ◦( ?[a-zA-Z]+ ?) ◦[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ◦Hoặc [[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3} 21 03/ 24/ 2017 Xử lý chuỗi substring: Trả chuỗi chuỗi ◦Cú pháp: ◦${string:position}: trả chuỗi chuỗi string bắt đầu vị trí position ◦${string:position:length}: trả length ký tự chuỗi string bắt đầu vị trí $position ◦Ví dụ: ◦string=”this is a substring test” substring=${string:10:9} echo $substring substring ◦var="Welcome to the geekstuff" ◦echo ${var:15} geekstuff Xử lý chuỗi (tt) Toán tử # ## ◦${string#substring}: trả chuỗi loại bỏ chuỗi ngắn match với $substring từ đầu chuỗi $string ◦${string##substring}: trả chuỗi loại bỏ chuỗi dài match với $substring từ đầu chuỗi $string ◦Ví dụ: ◦ s1=”Hi Mary How are you.” ◦ s2=${s1#* } Mary How are you ◦ s3=${s1##* } you 22 03/ 24/ 2017 Xử lý chuỗi (tt) Toán tử % %% ◦${string%substring}: trả chuỗi loại bỏ chuỗi ngắn match với substring từ sau chuỗi string ◦${string%%substring}: trả chuỗi loại bỏ chuỗi dài match với substring từ sau chuỗi string ◦Ví dụ: ◦ s1=”Hi Mary How are you.” ◦ s4=${s1% *} Hi Mary How are ◦ s3=${s1%% *} Hi Xử lý chuỗi (tt) ${#string}: độ dài $string Tìm kiếm thay thế: ◦${string/s1/s2} ◦Trả chuỗi thay s1 s2 vị trí tìm thấy ◦${string//s1/s2} ◦Trả chuỗi thay tất s1 s2 23 03/ 24/ 2017 Xử lý chuỗi (tt) Tìm kiếm thay thế: ◦${string/#s1/s2} ◦Trả chuỗi thay s1 s2 s1 tìm thấy đầu chuỗi ◦${string/%s1/s2} ◦Trả chuỗi thay s1 s2 s1 tìm thấy cuối chuỗi Mảng Mảng thông thường Mảng kết hợp 24 03/ 24/ 2017 Mảng thông thường Khai báo khởi tạo: ◦array_var=(1 6) ◦array_var[0]="test1“ array_var[1]="test2“ array_var[2]="test3“ array_var[3]="test4“ array_var[4]="test5“ array_var[5]="test6“ ◦Truy xuất phần tử mảng: ◦ In phần tử: echo ${array_var[2]} ◦ In tất phần tử: $ echo ${array_var[*]} test1 test2 test3 test4 test5 test6 ◦Truy xuất số phần tử mảng: $ echo ${#array_var[*]} Mảng kết hợp Là loại mảng mà trường index chuỗi Khai báo: ◦$ declare -A ass_array Thêm phần tử vào mảng: ◦$ ass_array=([index1]=val1 [index2]=val2) ◦Hoặc: $ ass_array[index1]=val1 ◦Ví dụ: ◦$ declare -A fruits_value ◦$ fruits_value=([apple]='100dollars' [orange]='150 dollars') 25 03/ 24/ 2017 Mảng kết hợp Truy xuất nội dung phần tử mảng: ◦$ echo "Apple costs ${fruits_value[apple]}“ Apple costs 100 dollars Liệt kê trường index mảng: ◦$ echo ${!array_var[*]} ◦Hoặc: $ echo ${!array_var[@] ◦Ví dụ: ◦$ echo ${!fruits_value[*]} orange apple Hàm Cấu trúc hàm: Ví dụ: function_name () { statements } func() { echo "Function foo is executing" } echo "script starting" func echo "script ended" 26 03/ 24/ 2017 Hàm (tt) Biến cục (chỉ có hiệu lực bên hàm), khai báo dùng từ khố local Biến tồn cục: khai báo khơng dùng từ khóa local (global) Phạm vi lưu trữ biến cục khơng cịn hiệu lực hàm kết thúc Hàm (tt) Ví dụ sử dụng biến cục toàn cục: 27 03/ 24/ 2017 Hàm (tt) Hàm trả giá trị ◦Trả giá trị số: dùng lệnh return ◦Trả chuỗi: dùng lệnh echo ◦Ví dụ: Hàm (tt) Hàm cách truyền tham số: ◦shell khơng có cách khai báo tham số cho hàm c, c++,… ◦Việc truyền tham số cho hàm tương tự truyền tham số dịng lệnh, ví dụ, để truyền tham số cho hàm foo, ta gọi sau: ◦foo “param1”, “param2”, “param3”, … ◦Để lấy nội dung đối số, bên hàm, ta sử dụng biến môi trường $*, $1, $2,… 28 03/ 24/ 2017 Hàm (tt) Ví dụ truyền tham số cho hàm: yes_or_no() { echo "Is your name $* ?" while true echo −n "Enter yes or no: " read x case "$x" in y | yes ) return 0;; n | no ) return 1;; * ) echo "Answer yes or no" esac done } echo "Original parameters are $* " if yes_or_no "$1" then echo "Hi $1, nice name“ else echo "Never mind" fi $ / my_name.sh Rick Neil Original parameters are Rick Neil Is your name Rick ? Enter yes or no: yes Hi Rick, nice name Các lệnh nội shell Lệnh : (lệnh rỗng) tương đương với true ◦Ví dụ: kiểm tra file fred tồn khơng làm Lệnh exec: dùng để gọi lệnh khác gọi exit kết thúc lệnh ◦Ví dụ: 29 03/ 24/ 2017 Các lệnh nội shell (tt) Lệnh exit n: thoát khỏi shell trả mã lỗi n (0: khơng có lỗi) Print (tương tự printf c), khơng hỗ trợ dạng số có dấu chấm động ◦Sử dụng ký tự “\” để thị ký tự đặc biệt Các lệnh nội shell (tt) Print (tt) ◦Sử dụng ký tự “%” để định dạng xuất, tham số lệnh print cách khoảng trắng ◦Ví dụ 30 03/ 24/ 2017 Các lệnh nội shell (tt) Lệnh set ◦Dùng để gán giá trị cho biến môi trường $1, $2, $3,… cách loại bỏ khoảng trắng không cần thiết đặt nội dung chuỗi truyền cho vào biến tham số Các lệnh nội shell (tt) Lệnh set (tt) 31 03/ 24/ 2017 Các lệnh nội shell (tt) Lệnh unset: loại bỏ biến khỏi shell 32 ... chuyển đổi shell ◦Ví dụ: chuyển từ bash sang csh, gõ lệnh: ◦$ csh Giới thiệu (tt) Sử dụng Shell ngơn ngữ lập trình: có hai cách để viết chương trình điều khiển shell ◦Cách 1: Gõ chương trình trực... thiệu (tt) Các loại Shell Linux ◦Bourne shell: gọi sh, Steve Bourne tạo ◦C -shell: gọi csh, kèm với BSD UNIX ◦Korn shell: gọi ksh, David Korn tạo ◦Bash (Bourne Again Shell) : shell mặc định Linux... kernel thơng qua trình diễn dịch trung gian Shell Chức giống “command.com” (DOS) Các lệnh lệnh ngồi Kết hợp nhiều tiến trình : $ls –al | more Giới thiệu (tt) Các loại Shell Linux Trình ứng dụng

Ngày đăng: 09/05/2021, 18:30