Download - Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell
![Page 1: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/19.jpg)
19
Lệnh while
Cú pháp:
while condition do
statements
done
![Page 20: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/23.jpg)
23
Lệnh until
Cú pháp:
until condition
do
Statements
done
![Page 24: Chuong 3 - Bai 2 - Cu Phap Ngon Ngu Shell](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052504/554096264a79596b228b4ad5/html5/thumbnails/28.jpg)
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