Upload
johny-huy
View
690
Download
0
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