12
 1 1 LP TRÌNH SHELL LINUX 2 Gii thiu She ll Linu x (1) ha i cá ch tươ ng tác vớ i hthng : T ươ ng tác bằ ng ng l  nh (command lin e) T ươ ng tác bằ ng gi ao di n đồ ha (graphic interfac e) 3 Gii thiu She ll Li nux ( 2) Máy tính hiu ngônngdướ i dng nh phân 0 hoc 1 đượ c gi là ngôn ngnh phân. Shel l là chươ ng trình thông dch tiế  p nhn các chthhoc các lnh và dch ra nn ngmáy dướ i dng nh phân. Shell din dch cáctham sdòng lnh sau  đó triu gi các hàm ca hđiu nh thc hin mt yêu cu cthnào đó. Shell thc hin chuyn đổi các lnh ca ngườ i sdng thành các lnh đối vớ i hđiu nh. 4 Mc đích ca shell She ll có 3 mc đích chính như sau: - T ươ ng tác (inte racti ve use) -  Đặt biế n môi tr  ườ ng  đố i vớ i mỗ i ng ườ i sử d ng - L p trình

Bai Giang-06, Lap Trinh Shell Linux

Embed Size (px)

Citation preview

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 1/12

 

1

1

LẬP TRÌNH SHELL LINUX

2

Giới thiệu Shell Linux (1)

Có hai cách tươ ng tác vớ i hệ thống :

• T ươ ng tác bằ ng dòng l ệnh (command line)

• T ươ ng tác bằ ng giao diện đồ họa (graphic interface)

3

Giới thiệu Shell Linux (2)

• Máy tính hiểu ngôn ngữ dướ i dạng nhị  phân 0 hoặc 1 đượ c

gọi là ngôn ngữ nhị phân.

• Shell là chươ ng trình thông dịch tiế p nhận các chỉ thị hoặccác lệnh và dịch ra ngôn ngữ máy dướ i dạng nhị phân.

• Shell diễn dịch các tham số dòng lệnh sau đó triệu gọi các

hàm của hệ điều hành thực hiện một yêu cầu cụ thể nào đó.

• Shell thực hiện chuyển đổi các lệnh của ngườ i sử dụng thành

các lệnh đối vớ i hệ điều hành.

4

Mục đích của shell

Shell có 3 mục đích chính như sau:

- T ươ ng tác (interactive use)

- Đặ t biế n môi tr  ườ ng đố i vớ i mỗ i ng ườ i sử d ụng 

- Lậ p trình

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 2/12

 

2

5

Quá trình thực hiện của Shell

Your 

command

Or Shell

Script

Linux Shell

Converted to

Binary

language by

Shell

Now Linux

kernel

understand

your request

6

Các loại Shell

shell script : K ịch bản cho phép thực hiện một dãy lệnh liên tiế p.Tươ ng tự tậ p tin bó (batch file) trong MS-DOS.

 sh (Bourne shell) shell nguyên thủ y áp d  ụng cho unix

csh,

tcsh,

(C Shell, Z shell) shell sử d ụng cấ u trúc của C làm

ngôn ng ữ k ịch bản.

bash (Bourne Again shell) shell chủ yế u của Linux.

7

Viết và c hạy chương trình Shell

• Chươ ng trình shell là một tậ p tin văn bản chứa một số lệnh

shell hoặc lệnh của Linux.• Chươ ng trình Shell cho phép t ự động hóa một công vi  ệ c,

hoặc viết các ứ ng d ụng t ươ ng tác đơ n giản.

• Tậ p tin shell : *.sh. Dùng lệnh cat file.sh hoặc vi file.sh để

soạn thảo tậ p tin Shell.

8

Tập tin kịch bản (script file) (1)

Chươ ng trình shell remount.sh cho phép tự động

k ết nối lại ổ đĩ a CDROM :

#!/bin/sh

# ghi chu

umount /dev/cdrom 

 mount /dev/cdrom /cdrom 

exit 0

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 3/12

 

3

9

Tập tin kịch bản (script file) (2)

• Chú thích trong shell thườ ng bắt đầu bằng ký tự #.

• #!/bin/sh : chỉ thị yêu cầu shell hiện tại triệu gọi shell sh nằm

trong thư mục bin.

• Shell sh sẽ chịu trách nhiệm thông dịch các lệnh nằm trong

tậ p tin script.

• #! còn đượ c dùng để triệu gọi một chươ ng trình shell khác

mà NSD muốn chạy tr ướ c khi script tiế p theo đượ c diễn dịch.

10

CÚ PHÁP NGÔN NGỮ SHELL

11

Sử dụng biến (1)

• Shell không cần phải khai báo biến tr ướ c khi sử dụng.

• Mặc định tất cả các biến đều nhận giá tr  ị kiểu chuỗi (String).

• Shell chỉ xử lý các giá tr ị số nguyên.

• Shell phân biệt chữ hoa chữ thườ ng. Thông thườ ng tham số

dòng lệnh thườ ng cách nhau bằng khoảng tr ắng.

•  Nếu tham số chứa cả khoảng tr  ắng (ký tự spacebar, tab hoặc

ký tự xuống dòng) thì phải bọc trong cặ p nháy đơ n ' ' hoặc

nháy kép " "

12

Sử dụng biến (2)

• Khi gán nội dung cho biến varname=value

• Truy xuất nội dung của biến : $varname

•  Lư u ý sau d ấ u = không đượ c có khoảng tr ắ ng.

• Hiển thị nội dung biến : echo $varname

• Đọc dữ liệu nhậ p vào : read varname

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 4/12

4

13

Sử dụng biến (3)

• Ví dụ:

xinchao=hello

echo $xinchao

Kết quả : hello

xinchao=" I am here "echo $xinchao

Kết quả : I am here

14

Biến môi tr  ường (1)

 Khi khở i động shell cung cấ  p một số  biế n đượ c khaibáo và gán giá tr ị mặ c định g ọi là biế n môi tr  ườ ng.

$HOME chứa đườ ng dẫn thư mục chủ của user đăng nhậ p

$PATH chứa danh sách các đườ ng dẫn.

$PS1 dấu nhắc hiển thị trên dòng lệnh ($)$PS2 dấu nhắc hiển thị trên dòng lệnh (>)

$IFS dấu phân cách các tr ườ ng trong danh sách chuỗi.

15

Biến môi tr  ường (2)

• Mỗi môi tr  ườ ng đăng nhậ p chứa một số danh sách biến môi

tr ườ ng dùng cho mục đích riêng.

• Có thể xem danh sách này bằng lệnh evn

• Để tạo một biến môi tr  ườ ng mớ i có thể dùng lệnh export

• Sử dụng lệnh exit tr ướ c khi k  ết thúc chươ ng trình shell.

exit 0 : kết thúc thành công

16

Biến tham số (parameter variable)

 Dùng để nhận tham số trên dòng l ệnh

$1, $2, $3, . . . : vị trí và nội dung các tham số trên dòng lệnhtheo thứ tự từ trái sang phải

$0 : từ đầu tiên của lệnh đượ c gõ, là tên chươ ng trình shell

$* : danh sách tất cả các tham số trên dòng lệnh

"$@" : lưu danh sách các tham số dòng lệnh trên các xâu riêng biệt ("$1" "$2" . . .)

$# : Tổng số tham số trên dòng lệnh.

$? : Lưu mã tr  ả về của lệnh cuối cùng đượ c thực hiện.

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 5/12

5

17

Biến tham số(parameter variable)

$ mkd ir xuan ha t hu dong

$0 $1 $2 $3 $4

$* => "xuan ha thu dong"

$# => 4

18

Toán tử số học

(Multiplication) Phép nhân*

Modulus Operator (Remainder)

Phép chia lấy dư%

(Division) Phép chia/

(Subtraction) Phép tr ừ-

(Addition) Phép cộng+

OperationOperator 

19

Định lượng giá tr ị biểu thức

• Lệnh expr đượ c dùng trong việc tính toán các k  ết quả toán

học đổi giá tr  ị từ chuỗi sang số.

• Ví dụ : x=14

x=`expr $x + 1` k  ết quả x = 15

• Trong các lệnh shell sau, có thể dùng $((…)) thay cho lệnh

expr.

x=$(($x + 1))

20

So sánh toán học

Toán t ử  so sánh Gi ải thích

expr1 -eq expr2 true nếu hai biểu thức bằng nhau

expr1 -ne expr2 true nếu hai biểu thức không bằng

expr1 -gt expr2 true nếu biểu thức expr1> expr2

expr1 -ge expr2 true nếu biểu thức expr1>=expr2

expr1 -lt expr2 true nếu biểu thức expr1<expr2

expr1 -le expr2 true nếu biểu thức expr1<=expr2

! expr true nếu expr1 là false (toán tử not)

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 6/12

6

21

So sánh chuỗ

i

So sánh K  ế t quả

string1 = string2 true nếu hai chuỗi bằng nhau

string1 != string2 true nếu hai chuỗi không bằng nhau

-n string1 true nếu string1 không r ỗng (null)

-z string1 true nếu string1 r ỗng

Chú ý : $str1=$str2 : Phép gán

khác vớ i $str1 = $str2 : Phép so sánh

22

Kiể

m trađ

iề

u kiệ

n trên tậ

p tin So sánh K  ế t quả

-d file true nếu file là thư mục

-e file true nếu file tồn tại trên đĩ a

-f file true nếu file là tậ p tin thông thườ ng

-g file true nếu set group id đượ c thiết lậ p trên file

-r file true nếu file cho phép đọc-s file true nếu kích thướ c file khác không

-w file true nếu file cho phép ghi

-x file true nếu file đượ c phép thực thi

23

In các ký tự đặc biệt

echo [-n] [xâu ký tự]

\b lùi lại một k ý tự (backspace).

\c không xuông dòng (như ưn).

\n xuống dòng.\t in ra ký tự tab.

\\ in ra ký tự \.

\0n in ra ký tự có số n (số thậ p phân) trong bảng mã ASCII.

In ra những ký tự đặc biệt bằng cách đặt sau ký tự \

Ví dụ: \” để in ký tự nháy kép (”) ra màn hình.

24

Biểu thức điều kiện

• Các script sử dụng lệnh [] hoặc test để kiểm tra điều kiện

 boolean.

• Thườ ng đượ c sử dụng để đánh giá một điều kiện trong một

câu lệnh điều kiện hay của một câu lệnh lặ p.

• Cú pháp : test bieuthuc

hay [ bieuthuc ]

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 7/12

7

25

Biểu thức điều kiện

• Có thể dùng các toán tử sau vớ i biểu thức điều kiện : toán t ử 

trên xâu ký t  ự   , toán t ự  trên số nguyên, toán t ử  trên t ậ p tin,

toán t ử logic

Binh thuong : if a>b

Shell sh : if test $a -gt $b

hoac : if [ $a -gt $b ]

26

Toán tử AND

Lệnh sau thực hiện khi lệnh tr  ướ c đã thực thi và tr  ả về một lỗithành công.statements1 && statements2 && statements3 &&. .Ví dụ : #!/ bin/sh

touch file_onerm -f f i le_twoif [ -f fi le_one ] && echo “hello” 

&& [ -f fi le_two ] && echo “there” then

echo -e “in if” fiexit 0

27

Toán tử OR

Toán tử OR tr ả về giá tr ị true thì ngừng việc thực thi.

Cú pháp :

statements1 || statements2 || statements3. . .

28

Cấu trúc điều kiện - Lệnh if 

Cú pháp: 

if condition 

then<Nhomlenh1> 

else

<Nhomlenh2> 

fi

#!/bin/sh

echo “Nhap thoi diem trong ngay :”

read st

if [ $st = “sang” ]then

echo “Chao buoi sang !”

else

echo “Chao buoi chieu !”

fi

exit 0

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 8/12

8

29

elif cho phép kiểm tra điều kiện lần thứ hai bên trong else.#!/bin/sh

echo “Nhap thoi diem trong ngay : ”; read st

if [ $st = “sang” ]

then

echo “Chao buoi sang !”

elif [$st = “no”]

then

echo “Chao buoi chieu !”else

echo “Chua xu ly !”

fi

exit 0

Cấu trúc điều kiện - Lệnh elif 

30

Lệnh for 

Cú pháp: 

for variable in values 

do

statements done

#!/bin/sh

for i in xuan ha thu dong 

do

echo $i 

done

exit 0

31

Lệnh while (1)

Cú pháp: 

while condition do

statements 

done

Check

Condition

ACTION

End of the loop

True

False

32

Lệnh while (2)

• Ví d ụ 2:

#!/bin/sh

echo “Nhap mat khau : ” 

read passwhile [ $pass != "123abc" ]

do

read pass

done

exit 0

• Ví d ụ 1:

S=0

i=0

while [ $i –lt 5 ]

doi=`expr $i + 1`

S=`expr $S + $i`

doneecho “Tong = $S” 

exit 0

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 9/12

9

33

Lệnh until (1)

Cú pháp: 

until condition 

do

statements done

ACTION

End of 

the loop

TrueFalse

Check

Condition

34

Lệnh until (2)

Ví d ụ :

until [ $# -eq 0 ]do

num=`expr $num + 1`echo “The $num argument is $1” shift

done

35

Lệnh case (1)

Cú pháp: 

case var inpattern1) command(s);;

pattern2) command(s);;

pattern3) command(s);;pattern4) command(s);;

*) ;;esac

36

Lệnh case (2)

Ví d ụ :

#!/bin/shecho “is it morning ? yes or no”read timeofday

case $timeofday in“yes”) echo “good morning”;;“no” ) echo “good afternoon”;;“y” ) echo “good morning”;;“n” ) echo “good afternoon”;;* ) echo “answer not recognised”;;

esacexit 0

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 10/12

10

37

Hàm (function) (1)

Shell cung cấ p cho NSD tự tạo hàm hay thủ tục để triệu gọi bên

trong script.

Cú pháp định ngh ĩ a hàm :

function_name() {

statements

}

38

Hàm (function) (2)

 Để tr ả về một giá tr  ị số ta có thể dùng l ệnh return :Ví dụ : foo() {

return 0}

 Để tr ả về  giá tr ị chuỗ i ta có thể dùng l ệnh echo :Ví dụ : #!/bin/sh

foo() {

echo “function foo is executing”}echo “Goi su dung ham foo”fooexit 0

39

Biến toàn cục và b iến cục bộ (1)

• Để khai báo biến cục bộ có hiệu lực trong hàm, dùng từ khóa

local.

•  Nếu không có từ khóa local, các biến đượ c xem là biến toàn

cục.

• Biến toàn cục đượ c nhìn thấy và có thể thay đổi bở i tất cả các

hàm trong script.

40

Biến toàn cục và b iến cục bộ (2)

#!/bin/shsample_text=“global variable”foo() {

local sample_text=“local variable”echo “function foo is executing”echo $sample_text

}echo $sample_textfooexit 0

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 11/12

11

41

Hàm và cách truyền tham số

• Truyền tham số cho hàm tươ ng tự như truyền tham số trêndòng lệnh.

• Ví dụ :

foo() "param1","param2","param3". . .

42

Các lệnh nội tại của shell (1)

 Ngoài các l ệnh nội t ại, shell cung cấ  p các l  ệnh nội (build - in)

hữ u ích khác.

break : break để thoát khỏi vòng lặ p for, while hay until.

continue : lệnh continue yêu cầu vòng lặ  p quay lại thực hiện

 bướ c lặ p k ế tiế p mà không cần thực thi các khối lệnh còn lại.

: (lệnh r ỗng) lệnh : đôi lúc đượ c dùng vớ i ý ngh ĩ a logic là true.

Ví dụ : while : tươ ng tự như while true.

. ( thực thi) dùng để thực thi một script trong shell hiện hành.

43

Các lệnh nội tại của shell (2)

• eval : Cho phép bạn ướ c lượ ng một biểu thức chứa biến.

• exes : Dùng để gọi một lệnh bên ngoài khác. Thườ ng exes

gọi một shell khác vớ i shell mà script đang thực thi.

• exit n : Thoát khỏi shell nào gọi nó và tr  ả về lỗi n.

• set : Dùng để áp đặt giá tr  ị cho các tham số.

• unset : Dùng để loại bỏ biến khỏi môi tr  ườ ng shell

• shift : Di chuyển nội dung tất cả các tham số môi tr  ườ ng

xuống một vị trí.

44

Mở r ộng tham số

• Shell không cung cấ  p cấ u trúc mảng.

• Có thể thay thế tên biế n, còn g ọi là mở r ộng tham số .

Ví dụ : #!/bin/sh

1_tmp=“hello”

2_tmp=“there”

3_tmp=“world”

for i in 1 2 3

do

echo $i_tmp

done

 

5/10/2018 Bai Giang-06, Lap Trinh Shell Linux - slidepdf.com

http://slidepdf.com/reader/full/bai-giang-06-lap-trinh-shell-linux 12/12

12

45

Chạy chương trình shell

$vi vidu.sh#!/bin/shecho "Vi du shell tinh tong 2 so"

a=10b=5tong=$(($a + $b))echo “Ket qua = $tong"

exit 0• Cách 1 : $chmod a+x vidu.sh

$./vidu.sh

• Cách 2 : $/bin/sh ./ v idu.sh

46

Bài tập

1) Viế t một chươ ng trình shell vidu1.sh cho phép nhậ p vào 2 giátr ị a,b. Tính t ổ ng của a,b.

2) Viế t một chươ ng trình shell vidu2.sh cho phép nhậ p vào 2 giátr ị a,b trên dòng l ệnh. In ra tong của a,b.

 Ex : $vidu2.sh 3 4

Tong = 7 

3) Viế t một chươ ng trình so sánh 2 số a, b nhậ p t ừ bàn phím

47

Kết thúc