tài liệu mã nguồn mở lap trình shells

114
LẬP TRÌNH SHELL

Upload: thuyet-nguyen

Post on 12-Apr-2017

32 views

Category:

Software


1 download

TRANSCRIPT

Page 1: tài liệu Mã nguồn mở  Lap trình shells

LẬP TRÌNH SHELL

Page 2: tài liệu Mã nguồn mở  Lap trình shells

Nội dung

Page 3: tài liệu Mã nguồn mở  Lap trình shells

Lập trình bằng shell

Page 4: tài liệu Mã nguồn mở  Lap trình shells

Đặc trưng của script

Page 5: tài liệu Mã nguồn mở  Lap trình shells

Cấu trúc shell-script

Page 6: tài liệu Mã nguồn mở  Lap trình shells

Create File & Run Script

Page 7: tài liệu Mã nguồn mở  Lap trình shells

Review commands

Page 8: tài liệu Mã nguồn mở  Lap trình shells

Parameter & Variables

Parameter Entity that stores values

3 type positional parameters

arguments present on command line referenced by number

special parameters set by shell to store info about aspects of current state

Variable identified by a name. Contain values

Page 9: tài liệu Mã nguồn mở  Lap trình shells

Positional Parameters

Page 10: tài liệu Mã nguồn mở  Lap trình shells

Giá trị default của tham số

Page 11: tài liệu Mã nguồn mở  Lap trình shells

Shift

Page 12: tài liệu Mã nguồn mở  Lap trình shells

Shift

Page 13: tài liệu Mã nguồn mở  Lap trình shells

Khác nhau giữa * và @

Page 14: tài liệu Mã nguồn mở  Lap trình shells

Biến tiền định nghĩa

Page 15: tài liệu Mã nguồn mở  Lap trình shells

Lệnh nội trú

Page 16: tài liệu Mã nguồn mở  Lap trình shells

Echo

Page 17: tài liệu Mã nguồn mở  Lap trình shells

Echo – ví dụ

Page 18: tài liệu Mã nguồn mở  Lap trình shells

Example for ouput’s format

Page 19: tài liệu Mã nguồn mở  Lap trình shells

Result

Page 20: tài liệu Mã nguồn mở  Lap trình shells

Read

Page 21: tài liệu Mã nguồn mở  Lap trình shells

Command Substitution

Page 22: tài liệu Mã nguồn mở  Lap trình shells

Exit Status

Page 23: tài liệu Mã nguồn mở  Lap trình shells

Cấu trúc If

Page 24: tài liệu Mã nguồn mở  Lap trình shells

If – ví dụ

Page 25: tài liệu Mã nguồn mở  Lap trình shells

If ví dụ

Page 26: tài liệu Mã nguồn mở  Lap trình shells

Cấu trúc case

Page 27: tài liệu Mã nguồn mở  Lap trình shells

Test

Page 28: tài liệu Mã nguồn mở  Lap trình shells

Example

Page 29: tài liệu Mã nguồn mở  Lap trình shells

Test

Page 30: tài liệu Mã nguồn mở  Lap trình shells

Example

Page 31: tài liệu Mã nguồn mở  Lap trình shells

Test

Page 32: tài liệu Mã nguồn mở  Lap trình shells

Test

Page 33: tài liệu Mã nguồn mở  Lap trình shells

Test ví dụ

Page 34: tài liệu Mã nguồn mở  Lap trình shells

Cấu trúc lặp

Page 35: tài liệu Mã nguồn mở  Lap trình shells

Cấu trúc lặp – ví dụ

Page 36: tài liệu Mã nguồn mở  Lap trình shells

Cấu trúc lặp – ví dụ

Page 37: tài liệu Mã nguồn mở  Lap trình shells

Cấu trúc lặp – ví dụ

Page 38: tài liệu Mã nguồn mở  Lap trình shells

Break

Page 39: tài liệu Mã nguồn mở  Lap trình shells

continue

Page 40: tài liệu Mã nguồn mở  Lap trình shells

Định hướng với if

Page 41: tài liệu Mã nguồn mở  Lap trình shells

Arrays

Integer-Indexed Arrays

members of an array variable are assigned and accessed with a subscript of form [N]

first element has an index of 0

Displaying Arrays

Page 42: tài liệu Mã nguồn mở  Lap trình shells

Arrays

* expands to a single parameter if quoted

@ as subscript and quoting expansion

Page 43: tài liệu Mã nguồn mở  Lap trình shells

Array

Page 44: tài liệu Mã nguồn mở  Lap trình shells

Assigning Array Elements

Page 45: tài liệu Mã nguồn mở  Lap trình shells

next unassigned element

Page 46: tài liệu Mã nguồn mở  Lap trình shells

entire array with a single cmd

Page 47: tài liệu Mã nguồn mở  Lap trình shells

+= used to append values to end of indexed array

Page 48: tài liệu Mã nguồn mở  Lap trình shells

Associative Arrays

use strings as subscripts

must be declared before being used

Page 49: tài liệu Mã nguồn mở  Lap trình shells

Hàm

Page 50: tài liệu Mã nguồn mở  Lap trình shells

Check Argument for Valid Dotted-Quad IP Address

Page 51: tài liệu Mã nguồn mở  Lap trình shells
Page 52: tài liệu Mã nguồn mở  Lap trình shells

Gọi hàm

Page 53: tài liệu Mã nguồn mở  Lap trình shells

Thực hiện

Page 54: tài liệu Mã nguồn mở  Lap trình shells

Test isvalidip

Page 55: tài liệu Mã nguồn mở  Lap trình shells

Compound Commands

list of commands enclosed in ( … ) or { … }

expressions enclosed in (( … )) [[ …

block-level shell keywords (case, for, select, while, until)

Page 56: tài liệu Mã nguồn mở  Lap trình shells

Example

Page 57: tài liệu Mã nguồn mở  Lap trình shells

function’s body

wrapped in ()

is executed in a subshell,

changes made during its execution do not remain in effect after it exits

Page 58: tài liệu Mã nguồn mở  Lap trình shells

Return

Page 59: tài liệu Mã nguồn mở  Lap trình shells

Exit

Page 60: tài liệu Mã nguồn mở  Lap trình shells

Function Libraries

Page 61: tài liệu Mã nguồn mở  Lap trình shells

Debug

Page 62: tài liệu Mã nguồn mở  Lap trình shells

Set

Page 63: tài liệu Mã nguồn mở  Lap trình shells

variables are used by shell

Page 64: tài liệu Mã nguồn mở  Lap trình shells

variables are set by shell

Page 65: tài liệu Mã nguồn mở  Lap trình shells

Sample Script

four functions: die, usage, version, and readline

readline function will differ according to which shell you are using

creates a basic web page, complete with title & primary headline (<H1>)

adline function uses options to the builtin command read

Page 66: tài liệu Mã nguồn mở  Lap trình shells
Page 67: tài liệu Mã nguồn mở  Lap trình shells
Page 68: tài liệu Mã nguồn mở  Lap trình shells
Page 69: tài liệu Mã nguồn mở  Lap trình shells
Page 70: tài liệu Mã nguồn mở  Lap trình shells
Page 71: tài liệu Mã nguồn mở  Lap trình shells
Page 72: tài liệu Mã nguồn mở  Lap trình shells

Lập trình Shell - Ứng dụng

Tên Quản lý các đĩa CD nhạc

Yêu cầu chức năng Chèn CD nhạc mới

Tạo bài hát mới

Sửa đổi thông tin về bài hát

Xóa bài hát

Liệt kê danh mục bài hát

Page 73: tài liệu Mã nguồn mở  Lap trình shells

Lập trình Shell - Ứng dụng

Thiết kế

CSDL

Dùng các tệp TEXT để lưu dữ liệu

Gồm

Tệp lưu thông tin về CD (ID, tên, kiểu, NSX,..)

Tệp lưu thông tin bài hát(CD’s ID, tên, track,tác giả, ca sĩ)

Tổ chức

Dùng các ký tự CVS phân cách các cột

Page 74: tài liệu Mã nguồn mở  Lap trình shells

Lập trình Shell - Ứng dụng

Thiết kế

Các modules

Giao diện

Menu: dạng text (dùng echo, read)

Các hàm cho các chức năng xử lý CD

Thêm, Xóa CD

Tìm CD, Đếm số CD

Cập nhật thông tin CD

Các hàm cho các chức năng xử lý bài hát

Thêm, Xóa, Cập nhật thông tin bài bát

Liệt kê, Tìm các bài hát hiện có

Page 75: tài liệu Mã nguồn mở  Lap trình shells

Ứng dụng – Cài đặt

Các biến toàn cục

Menu_choice=“”

Current_CD=“”

Title_file = “title.cdb”

Track_file= “tracks.cdb”

Temp_file= “/tmp/cdb.$$”

Trap “rm –f $temp_file” EXIT

Page 76: tài liệu Mã nguồn mở  Lap trình shells

Ứng dụng – Cài đặt

Menu Set_menu_choice() {

Echo “CD App” Echo “ a. Add new Cd” Echo “ f. Find Cd” Echo “ c. Count Cd” If [$cdcatnum != “”] then

Echo “l. List tracks of $cdtitle” Echo “r. remove $cdtitle” Echo “u. Update $cdtitle”

Fi Echo “q. quit” Read menu_choice Return

}

Page 77: tài liệu Mã nguồn mở  Lap trình shells

Ứng dụng – Cài đặt

CD Insert_Title() { Echo $* >> $title_file } Insert_Track() { Echo $* >> $tracks_file } Add_Record_Tracks() { echo “enter info for track. Q for quit” cdtrack = 1 cdtitle = 1 while [“$cdtitle” != “q”]

do echo –e “Track $cdtrack , title \c” Read tmp cdtitle = ${tmp%%,*} if [“$tmp” != $cdtitte] then echo “Format invalid” continue fi if [-n $cdtitle] then if [“$cdtitle” != ‘q’] then insert_track $cdcatnum, $cdtrack,

$cdtitle fi else cdtrack; = $((cdtrack -1)) fi cdtrack = $((cdtrack +1)) done }

Page 78: tài liệu Mã nguồn mở  Lap trình shells

Ứng dụng – Cài đặt

CD Add_record()

{

# Create a CD

# Input

# ID’s CD

# Title, Type, Author

# Call insert_title, add_record_tracks

}

find_cd() {

# dùng grep tìm tên trong tệp title.cdb

}

Page 79: tài liệu Mã nguồn mở  Lap trình shells

Ứng dụng – Cài đặt

CD

Update_CD()

{

# tìm CD cần update

# Xóa và tạo mới line CD

}

remove_record()

{

# loại bỏ title CD và bài hát khỏi tệp dữ liệu

}

Page 80: tài liệu Mã nguồn mở  Lap trình shells

Ứng dụng – Cài đặt

Main Rm –f $temp_file If [! –f $title_file]; then touche $title_file Fi If [! –f $track_file]; then touche $tracks_file Fi Quit = n

while [“$quit” != “y”] Do set_menu_choice case “$menu_choice” in a. add_record;; r. remove_record;; …. esac Done Rm –f $temp_file Exit 0

Page 81: tài liệu Mã nguồn mở  Lap trình shells

File Operations & Commands

how shell works with files

shell options that

modify & extend file name expansion

read and modify contents of files.

Several external cmd that work on files

Page 82: tài liệu Mã nguồn mở  Lap trình shells

Reading a File

Page 83: tài liệu Mã nguồn mở  Lap trình shells

kjv.txt

Page 84: tài liệu Mã nguồn mở  Lap trình shells

1(more) variable be supplied as args to read

Page 85: tài liệu Mã nguồn mở  Lap trình shells

Word splitting

Page 86: tài liệu Mã nguồn mở  Lap trình shells

Linux Loader – lilo.conf

Page 87: tài liệu Mã nguồn mở  Lap trình shells

Result

Page 88: tài liệu Mã nguồn mở  Lap trình shells

sed

replacing a string or pattern with another string

pulling particular line or range of lines from file.

Page 89: tài liệu Mã nguồn mở  Lap trình shells

examples

Page 90: tài liệu Mã nguồn mở  Lap trình shells

modifying a file

Page 91: tài liệu Mã nguồn mở  Lap trình shells

File Name Expansion Options

Page 92: tài liệu Mã nguồn mở  Lap trình shells

File Name Expansion Options

six shell options that affect way in which file names are expanded.

shopt command

-s enable

-u disable

Page 93: tài liệu Mã nguồn mở  Lap trình shells

Ex: various globbing options

Page 94: tài liệu Mã nguồn mở  Lap trình shells

nullglob

Page 95: tài liệu Mã nguồn mở  Lap trình shells

failglob

Page 96: tài liệu Mã nguồn mở  Lap trình shells

dotglob

Page 97: tài liệu Mã nguồn mở  Lap trình shells

extglob

five new file name expansion operators are added

pattern-list is a list of pipe-separated globbing patterns

parentheses, which are preceded by ?, *, +, @, or !

Ex

remove existing files in $HOME/globfest, create a new set

Page 98: tài liệu Mã nguồn mở  Lap trình shells

Example

Page 99: tài liệu Mã nguồn mở  Lap trình shells
Page 100: tài liệu Mã nguồn mở  Lap trình shells
Page 101: tài liệu Mã nguồn mở  Lap trình shells
Page 102: tài liệu Mã nguồn mở  Lap trình shells
Page 103: tài liệu Mã nguồn mở  Lap trình shells

nocaseglob

Page 104: tài liệu Mã nguồn mở  Lap trình shells
Page 105: tài liệu Mã nguồn mở  Lap trình shells

globstar

allows use of ** to descend recursively into directories &subdirectories looking for matching files

Page 106: tài liệu Mã nguồn mở  Lap trình shells

review

Page 107: tài liệu Mã nguồn mở  Lap trình shells

Using script for automating admin

Create Commands That Affect Multiple Systems

Simple Multi-SSH

simple shell script that executes specified command on every machine listed in configuration file

Group-Based Multi-SSH

Page 108: tài liệu Mã nguồn mở  Lap trình shells

Simple Multi-SSH

Page 109: tài liệu Mã nguồn mở  Lap trình shells

Group-Based Multi-SSH

run a command on a certain subset of machines

instead of being forced to run it on every machine in every circumstance

Page 110: tài liệu Mã nguồn mở  Lap trình shells
Page 111: tài liệu Mã nguồn mở  Lap trình shells
Page 112: tài liệu Mã nguồn mở  Lap trình shells

Copying Files

copies one or more local files, recursively, to a given directory on multiple machines.

first arg

local file, or a list of local files contained within quotes.

second arg

a destination directory.

Following the file(s) and destination directory is one or more group names.

Page 113: tài liệu Mã nguồn mở  Lap trình shells
Page 114: tài liệu Mã nguồn mở  Lap trình shells