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

Bài giảng về lập trình shell

38 486 3

Đ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 38
Dung lượng 326,95 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

Trang 1

Hệ ñiều hành UNIX-Linux

Chương 8 Lập trình Shell

Trang 2

Chương trình shell

 Ch ương trình shell là một tập hợp các câu lệnh viết trong một file text

 Nó giống chương trình bat trong MSDOS nhưng có sức mạnh lớn hơn

nhiều

 Chương trình shell có thể nhận dữ liệu từ người dùng, từ file và in kết quả

ra màn hình

 Có thể dùng ñể tạo ra một lệnh riêng cho mình

 Shell giúp tiết kiệm thời gian ñể làm các công việc hàng ngày

 Các bước ñể tạo ra một chương trình shell

 Sử dụng một chương trình soạn thảo text ñể tạo ra một file chương

trình

Trang 3

Trình soạn thảo văn bản trong Linux

Trình soạn thảo vim

Trang 4

Trình soạn thảo văn bản trong Linux

Trình soạn thảo của mc

Trang 5

Các loại shell

 Muốn xem các loại shell có trong hệ thống ta sử dụng lệnh: cat /etc/shells

 Muốn xem shell hiện tại: echo $SHELL

 Phần này chỉ ñề cập ñến lập trình shell trong bash

Trang 6

Các ký hiệu ñặc biệt trong shell

Khi ñặt tên biến cần tránh xung ñột với các

ký tự ñặc biệt này

Trang 7

Sử dụng biến trong shell

 Biến hệ thống ñược Linux tạo ra và quản lý (CHỮ IN HOA)

 Biến người dùng: ñược người dùng tạo ra và quản lý (chữ thường)

Trang 8

Quy tắc ñặt tên biến

 Tên biến phải bắt ñầu với một ký tự chữ cái hoặc dấu gạch dưới (_), tiếp theo

là một hoặc một số ký tự chữ hoặc số

 Biến ñược khởi tạo khi ta gán giá trị cho biến

 Không thêm các dấu cách vào trước và sau dấu gán, khi gán giá trị cho biến

 Biến trong Linux phân biệt chữ HOA thường

Trang 9

Trích dẫn (quoting)

 Trích dẫn là cách bao quanh một chuỗi bằng cặp dấu nháy

 Cho phép một số ký tự ñặc biệt giữ nguyên như các ký tự bình thường

 Có 2 loại trích dẫn mạnh (‘ …’) và trích dẫn yếu (“ … ”)

 Trích dẫn yếu vẫn biên dịch các biến trong chuỗi

 echo “Giá trị của biến là: $var”

 Trích dẫn mạnh bảo toàn toàn bộ các ký tự trong chuỗi

 echo ‘Giá trị của tham số ñầu tiên là: $var’

→ Giá trị của tham số ñầu tiên là: $var

 ls -l '[Vv]*‘

→ ls: [Vv]*: No such file or directory

Trang 10

Tính toán số học trên các biến

 Tính toán trong shell ñược thực hiện với các ñối số nguyên

 Các phép toán gồm có: cộng (+), trừ (-), nhân (*), chia (/), mod (%)

 Tính toán trên shell có dạng:

 `expr <biểu thức>`

 Ví dụ

var1=10var2=20sum=`expr $var1 + $var2 `product=`expr $var1 \* $var2 `echo “Tổng của $var1 và $var2 là: $sum, tích của chúng là $product”

Trang 11

Tham số dòng lệnh trong chương trình shell

 Là tham số ñược truyền vào cho chương trình trên dòng lệnh

 Dùng ñể thông báo cho chương trình các tùy chọn, file cần xử lý

 Tổng số tham số trả lại qua biến $#, toàn bộ tham số thông qua $* hay $@,

biến $0 trả lại tên chương trình

 echo "Total number of command line argument are $#“

 echo "$0 is script name“

 echo "$1 is first argument“

 echo "$2 is second argument“

 echo "All of them are :- $* or $@"

Trang 12

Tham số dòng lệnh trong chương trình shell (tiếp)

 Làm sao truy cập các tham số có số thứ tự > 9?

 Truy xuất thông qua $@ hay $*

echo “Giá trị của tham số thứ 2 là: $1”

 Kết quả trả về khi truyền vào cho chương trình tham số: 3 6 5 ?

Trang 13

Giá trị logic trong shell

 Ngược với C hay các ngôn ngữ lập trình thông dụng, trong shell giá trị 0 nghĩa

là true còn giá trị khác 0 là false

 Giá trị logic là một giá trị quan trọng trong các cấu trúc ñiều khiển

 Giá trị logic trong bc

Trang 14

Cấu trúc chương trình shell

 Là một tập hợp các lệnh và các cấu trúc ñiều khiển

 Mỗi lệnh ñược viết trên 1 dòng

 Chú thích trong chương trình là phần nằm sau dấu #

 Dòng chú thích ñầu tiên trong file chương trình shell sẽ báo cho hệ thống

chọn shell (chương trình) nào ñể thực hiện chương trình (ngầm ñịnh là shell hiện tại)

Trang 15

Cấu trúc ñiều khiển if

 ðiều kiện if ñược sử dụng ñể ñưa ra các quyết ñịnh trong chương trình shell

 Nếu ñiều kiện ñược cung cấp là ñúng thì các lệnh trong ñó ñược thực thi

 ðiều kiện là một phép so sánh giữa 2 giá trị, một lệnh kiểm tra hay kết quả trả

 Trong linux các lệnh thường trả về trạng thái thành công hay lỗi, nếu thành

công thì trả về giá trị 0, nếu bị lỗi thì sẽ trả về mã lỗi khác 0

Trang 16

echo "$1 number is positive"

fi

if [ $1 -lt 0 ]then

Trang 17

Các toán tử số học trong chương trình shell

Trang 18

Các toán so sánh chuỗi

 Sử dụng toán tử so sánh chuỗi trong toán tử [[ ]]

if [[ $1 != "-c" ]] ; then

Ví dụ

Trang 19

Các toán tử kiểm tra file/thư mục

 Chương trình hiển thị nội dung của 1 file nếu nó khác rỗng

if [[ -f $1 ]] ; then

if [[ -s $1 ]]; then

cat $1

Ví dụ

Trang 21

Cấu trúc rẽ nhánh if … else … fi

 Nếu ñiều kiện ñúng thì thực hiện khối lệnh thứ nhất, nếu không thì thực hiện

khối lệnh thứ 2

if test $1 -gt 0then

echo "$1 number is positive"

Khối_lệnh_2fi

Trang 22

Cấu trúc if …then … else … fi ña mức

 Rất hiệu quả khi phải kiểm tra nhiều trường hợp/giá trị của 1 biến

if [ $1 -gt 0 ]; thenecho "$1 is positive"

elif [ $1 -lt 0 ]; thenecho "$1 is negative"

Trang 23

 expr ñược ñem ñi so sánh với từng pattern,

nếu nó bằng nhau thì các lệnh tương ứng sẽ ñược thi hành

 Dấu ;; là tương ñương với lệnh break của C,

tạo ra ñiều khiển nhảy tới dòng ñầu tiên sau mã

esac

 Không như từ khoá switch của C, lệnh case

của bash cho phép ta kiểm tra giá trị của expr

dựa vào pattern, nó có thể chứa các kí tự ñại diện

*, ?

 Biểu thức *) có ý nghĩa như nhãn default

trong lệnh switch của C

Trang 24

Ví dụ lệnh case

 Lệnh read var sẽ ñọc giá trị nhập vào từ bàn phím, sau khi ấn Enter và

lưu giữ vào biến var

echo; echo "Hit a key, then hit return."

read Keypresscase "$Keypress" in[a-z] ) echo "Lowercase letter";;

[A-Z] ) echo "Uppercase letter";;

Trang 25

Cấu trúc lặp for

 Lặp ñi lặp lại 1 số lần một khối lệnh nào ñó

for i in 1 2 3 4 5do

echo "Welcome $i times"

for i in 1 2 3 4 5 6 7 8 9 10do

echo "$n * $i = `expr $i \* $n`"

done

Trang 26

Cấu trúc lặp for

 Lặp ñi lặp lại 1 số lần một khối lệnh nào ñó

for (( i = 0 ; i <= 5 ; i++ )) do

echo "Welcome $i times"

Trang 27

Cấu trúc lặp while

 Lặp ñi lặp lại một khối lệnh nào ñó trong khi biểu thức ñiều kiện có giá trị

TRUE

n=$1i=1while [ $i -le 10 ]do

#Khối lệnh ñược thực hiện khi ñiều_kiện là TRUE

done

Trang 28

echo "(end to exit)"

read var1echo "variable #1 = $var1"

 Ví dụ

until ñiều_kiện do

#Khối lệnh ñược thực hiện khi ñiều_kiện là FALSE

done

Trang 29

ðường ống (Pipe)

 ðường ống là cách ñể ñưa ñầu ra của một chương trình thành dữ liệu ñầu vào

của một chương trình khác mà không cần qua một file trung gian

 ðường ống thực chất là một vùng bộ nhớ tạm thời, nơi lưu trữ ñầu ra của một

lệnh và sau ñó chuyển chúng cho ñầu vào của lệnh thứ hai

 Lệnh_1 | Lệnh_2

 ls | sort

 ls | sort | less

Trang 30

Thay thế biến (variable substitution)

 Thao tác và mở rộng biến

Trang 31

Ví dụ

option=$1var=${option:-”20”}

echo $var

option=$1var=${option:=”20”}

echo $var

 Kết quả trả về khi $1 không xác ñịnh và $1 có giá trị là 10?

Trang 32

Các toán tử string (tiếp)

Trang 33

Ví dụ về các toán tử pattern -matching

#!/bin/bash

myfile=/usr/src/linux/Documentation/ide.txt

echo ‘${myfile##*/}=’ ${myfile##*/}

echo ‘basename $myfile =’ $(basename $myfile)

echo ‘${myfile%/*}=’ ${myfile%/*}

echo ‘dirname $myfile =’ $(dirname $myfile)

 Lệnh thứ 2 xoá xâu matching “*/” dài nhất trong tên file và trả về tên file

 Lệnh thứ 4 làm khớp tất cả mọi thứ sau “/”, bắt ñầu từ cuối biến, bỏ tên file và

trả về ñường dẫn của file

 Kết quả của tập lệnh này

Trang 35

ðịnh hướng lại các thiết bị ñầu vào/ra chuẩn

 Hầu hết tất cả các lệnh hiển thị kết quả ñầu ra ra màn hình, và lấy dữ liệu ñầu

vào từ bàn phím

 Có thể gửi kết quả ñầu ra ra file cũng như ñọc ñầu vào từ file bằng cách sử

dụng ñịnh hướng lại (redirect)

 Ghi kết quả của 1 lệnh ra 1 file (thay vì màn hình)

 sort < a.txt > a.sorted.txt

 tr “[a-z]” “[A-Z]” < a.txt > b.txt

Trang 36

ðịnh hướng ñầu vào vào khối lệnh

 ðưa dữ liệu vào 1 khối lệnh

 Có thể lấy dữ liệu từ 1 file

filename=“dulieu.txt”

name=“”

while `true`

do read name # ðọc từ file thay vì từ bàn phímecho $name

if [[ "$name" = Smith ]]

thenbreak

fi done <"$filename"

Trang 37

Thủ tục / hàm trong chương trình shell

 ðịnh nghĩa hàm

 function_name(){

#Nội dung hàm}

 Muốn hàm trả về giá trị ta dùng lệnh return

 Trong hàm có thể truy cập biến toàn cục

 Muốn tạo biến cục bộ trong hàm ta dùng từ khóa local

 Gọi hàm bằng cách sử dụng tên hàm

 Có thể truyền tham số cho hàm

 Khi gọi hàm truyền theo tham số

 Trong hàm truy cập các tham số thông qua các biến vị trí

function1(){

echo “This is the first argument $1”

}

Trang 38

Danh sách lệnh

 ðể chạy tuần tự một dãy lệnh trên 1 dòng lệnh ta phân cách giữa các lệnh

dấu ;

 Danh sách lệnh AND

 Các lệnh ñược phân cách nhau bởi dấu &&

 Lệnh ñằng sau chỉ ñược thực hiện khi tất cả các lệnh trước nó ñều trả

về giá trị TRUE

 cat a.txt && rm a.txt

 Danh sách lệnh OR

 Các lệnh ñược phân cách bởi dấu ||

 Lệnh sau chỉ ñược thực hiện khi tất cả các lệnh ñứng trước nó trả về giá

trị FALSE

Ngày đăng: 19/10/2014, 22:04

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w