chuong 3 - bai 2 - cu phap ngon ngu shell

28
1 Chương 3 LẬP TRÌNH SHELL LINUX Bài 2 - CÚ PHÁP NGÔN NGỮ SHELL Nguyễn Võ Quang Đông DANANG UNIVERSITY UNIVERSITY OF TECHNOLOGY INFORMATICS FACULTY

Upload: van-nghia-tran

Post on 28-Apr-2015

35 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

1

Chương 3LẬP TRÌNH SHELL LINUX

Bài 2 - CÚ PHÁP NGÔN NGỮ SHELL

Nguyễn Võ Quang Đông

DANANG UNIVERSITYUNIVERSITY OF TECHNOLOGY

INFORMATICS FACULTY

Page 2: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

2

CÚ PHÁP NGÔN NGỮ SHELL

Gồm những vấn đề chính sau:

•Biến:kiểu chuỗi, kiểu số, tham số, biến môi trường

•Các toán tử

•Điều kiện: kiễm tra để trả về true hoặc false

•Cấu trúc điều khiển chương trình:if, elif, for, while, until, case

•Danh sách, hàm

•Các lệnh nội tại của shell, lấy về kết quả của 1 lệnh

Page 3: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

3

Toán tử số học

Operator Operation

+ (Addition) Phép cộng

- (Subtraction) Phép trừ

/ (Division) Phép chia

% Phép chia lấy dư

\* (Multiplication) Phép nhân

Page 4: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

4

• Trong shell, nội dung của biến điều là kiểu chuỗi.

• 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=“20”

x=`expr $x + 5` kết quả

x = 25

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

lệnh expr.

x=$(($x + 5))

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

Page 5: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

5

Ví dụ :

#!/bin/sh

y=0

while [ “$y” -le 15 ]

do

echo $y

y=$(($y+1))

done

exit 0

Đoạn lệnh trên sẽ liên tục in ra 16 số nguyên (015)

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

Page 6: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

6

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)

So sánh toán học

Page 7: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

7

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 string true nếu string không rỗng (null)

-z string true nếu string rỗng

Chú ý : $str1=$str2

khác với $str1 = $str2

So sánh chuỗi

Page 8: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

8

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

Page 9: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

9

• 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 ]

• 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

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

Page 10: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

10

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

touch file_onerm -f file_twoif [ -f file_one ] && echo “hello” && [ -f file_two ] && echo “there”then

echo “in if”fiexit 0

Toán tử AND

Page 11: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

11

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

Cú pháp :

statements1 || statements2 ||

statements3. . .

Toán tử OR

Page 12: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

12

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

Cú pháp:

if condition

then

statements

else

statements

fi

Page 13: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

13

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

#!/bin/sh

echo “result: 5 + 4 = ”

read num

if [ “$num” -e 9 ]

then

echo “true”

else

echo “wrong, 5 + 4 = 9”

fi

exit 0

Page 14: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

14

elif cho phép kiểm tra điều kiện lần thứ hai bên trong else.#!/bin/shecho “Nhap thoi diem trong ngay : ”read stif [ $st = “sang” ]; then

echo “Chao buoi sang !”elif [$timeofday=”chieu”]; then

echo “Chao buoi chieu !”else

echo “chưa biết!”exit 1

fiexit 0

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

Page 15: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

15

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

./b.sh user1#!bin/sh# determine if someone is logged on# see if the correct number of arguments if [ "$#" -ne 1 ] then echo "Incorrect number of arguments" echo "Usage: on user“else user="$1" if [ who | grep "^$user " > /dev/null ] then echo "$user is logged on" else echo "$user is not logged on" fifiexit 0

Page 16: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

16

Lệnh for

Cú pháp:

for variable in values

do

statements

done

Page 17: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

17

Lệnh for (tt)

#!/bin/sh

for stVar in 1 2 3 4 5 6

do

echo $stVar

done

exit 0

Page 18: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

18

Lệnh for (tt)

#!/bin/sh

for str in a[1-6]

do

echo $str

done

exit 0

Page 19: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

19

Lệnh while

Cú pháp:

while condition do

statements

done

Page 20: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

20

Lệnh while (tt)

#!/bin/sh

S=0

i=0

while [ $i –lt 5 ]do S=`expr $S + $i` i=`expr $i + 1`

doneecho “Tong = $S”

exit 0

Page 21: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

21

Lệnh while (tt)

$vi lst.sh #!/bin/sh while [ "$#" -ne 0 ] do echo "$1" shift done exit 0

$lst.sh a b c d e

Page 22: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

22

Lệnh while(tt)

#!/bin/sh

echo “Nhap mat khau:”

read pass

while [ $pass != "123abc" ]

do

read pass

done

exit 0

Page 23: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

23

Lệnh until

Cú pháp:

until condition

do

Statements

done

Page 24: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

24

Ví dụ : đếm số tham số của 1 dòng lệnh

until [ $# -eq 0 ]do

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

done

Lệnh until (tt)

Page 25: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

25

Lệnh until (tt)

#!/bin/sh# Wait until a specified user logs on

if [ "$#" -ne 1 ] then

echo "Usage: mon user" exit 1

fi user="$1"

# Check every minute for user logging on until [ who | grep "^$user " > /dev/null ]do

sleep 60 done

# When we reach this point, the user has logged onecho "$user has logged on" exit 0

Page 26: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

26

Cú pháp:

case value in pattern1 | pattern11) command(s);; pattern2) command(s);; pattern3) command(s);; pattern4) command(s);; *) ;;esac

Lệnh case

Page 27: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

27

Lệnh case (tt)

#!/bin/shif [ "$#" -ne 1 ] then

echo "Usage: number digit“ exit 1

fi case "$1" in 0) echo zero;;

1) echo one;; 2) echo two;; 3) echo three;; 4) echo four;; 5) echo five;; 6) echo six;; 7) echo seven;; 8) echo eight;; 9) echo nine;; *) echo "Bad argument; please specify a single digit";;

esac exit 0

Page 28: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell

28

Nội dung cần nắm

Biến: kiểu chuỗi, tham số, biến môi trường. Các biểu thức so sánh. Điều kiện: kiễm tra để trả về true hoặc false. Cấu trúc điều khiển chương trình:

– if, elif– for– while– until– case