chuong 3 - bai 2 - cu phap ngon ngu shell
TRANSCRIPT
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
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
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
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
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)
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
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
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
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
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
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
12
Cấu trúc điều kiện - Lệnh if
Cú pháp:
if condition
then
statements
else
statements
fi
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
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
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
16
Lệnh for
Cú pháp:
for variable in values
do
statements
done
17
Lệnh for (tt)
#!/bin/sh
for stVar in 1 2 3 4 5 6
do
echo $stVar
done
exit 0
18
Lệnh for (tt)
#!/bin/sh
for str in a[1-6]
do
echo $str
done
exit 0
19
Lệnh while
Cú pháp:
while condition do
statements
done
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
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
22
Lệnh while(tt)
#!/bin/sh
echo “Nhap mat khau:”
read pass
while [ $pass != "123abc" ]
do
read pass
done
exit 0
23
Lệnh until
Cú pháp:
until condition
do
Statements
done
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)
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
26
Cú pháp:
case value in pattern1 | pattern11) command(s);; pattern2) command(s);; pattern3) command(s);; pattern4) command(s);; *) ;;esac
Lệnh case
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
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