Vai trò của Linux Shell
• Quá trình thông dịch lệnh Shell
• Khởi tạo biến Shell
• Biến môi trường Shell
• Viết Shell Script
29 trang |
Chia sẻ: Mr Hưng | Lượt xem: 1106 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Linux - Linux shell script, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Linux Shell Script
Âu Bửu Long – Lê Minh Triết
Phiên bản 2014
Mục tiêu
•Vai trò của Linux Shell
•Quá trình thông dịch lệnh Shell
•Khởi tạo biến Shell
•Biến môi trường Shell
•Viết Shell Script
Đại cương về Shell
• Hệ Shell:
• Giúp tương tác giữa người dùng và hệ thống
• Shell Linux hỗ trợ một tập lệnh mà có thể kết hợp chúng lại thành
một script hay thành một chương trình có thể sử dụng nhiều lần.
• Thiếu sót chính của ngôn ngữ script là những lệnh này phải thông
dịch lại mỗi lần script thực thi.
• Linux cung cấp nhiều tiện ích là những trình thông dịch cho ngôn ngữ
C, C++, debugger, công cụ tổ chức project và công cụ quản lý code.
• Kiến trúc tương tác với hệ Shell như hình sau
Đại cương về Shell
Thông dịch lệnh Shell
1. Đọc lệnh
2. Tìm file thực thi và tham số
3. Load file
4. Thực thi
Shell Script
• Là một file text
• Lưu các lệnh Shell tuần tự
•Cho phép hệ Shell đọc và thực thi các lệnh
•Cho phép quản lý biến, quản lý các cấu
trúc lập trình.
•Hiển thị một chuỗi lên màn hình.
•Chuỗi có thể đặt trong nháy đơn hoặc kép.
•Mặc định lệnh echo sẽ tự xuống dòng.
•Không xuống dòng: tham số -n
$ echo "This is an example of the echo command"
This is an example of the echo command
$ _
Lệnh echo
Thực thi Shell Script
• File script cần có quyền thực thi.
Ví dụ với file script.sh:
chmod u+x script.sh
. script.sh
• Lệnh dùng thực thi một script và giữ nguyên các thay đổi môi
trường mà Script đã tác động sau khi thoát khỏi Script.
• Lệnh exec dùng thực thi một Script, sử dụng shell phụ khác
Khởi tạo biến
• Biến Shell Script:
• Không cần khai báo kiểu.
• Được xem nghiêm ngặt là chuỗi
• Có thể tính toán được.
• Không cần khai báo tường minh.
• Tự cấp phát sau lần truy xuất đầu tiên.
• Phép gán: =GiáTrị
• Không dùng dấu khoảng trắng giữa tên =GiáTrị
• Khi script kết thúc: Biến được hủy
Đọc giá trị từ biến và vào biến
•Dùng ký hiệu $ để đọc giá trị của biến
Bien1=${Bien2}
•Ký hiệu ngoặc để giới hạn tên biến
•Đọc giá trị từ bàn phím vào biến: read
$ read
Biến cục bộ và toàn cục
$ continent=Africa
$ echo "$continent"
Africa
$ bash [Creates a new shell]
$ echo "$continent" [There is no response]
$ continent=Asia [Gives new value Asia to
continent]
$ echo "$continent"
Asia
Press d
$ exit
Các biến môi trường
• HOME: Thư mục home của user
• PATH: Chứa các biến đường dẫn
• PS1: Ký hiệu dấu nhắc ($)
• PS2: Ký hiệu dấu nhắc (>)
• LOGNAME: Tên login
• SHLVL: Cấp độ shell
• SHELL: Hệ shell mặc định
Ghi chú, tính toán trên biến
Dấu # dùng để ghi chú trong Script
Lệnh expr dùng để tính toán số học
Ví dụ:
$ expr 4 + 5
Phép nhân sử dụng dấu \*
Chia lấy phần dư %
Lệnh kiểm tra biểu thức
Lệnh test và [] dùng để ước lượng biểu thức logic
Cú pháp:
test expression hoặc [ expression ]
Các phép so sánh khi kiểm tra chuỗi: =, !=, -n, -z
Các phép so sánh toán học:
-eq (=), -ne (!=), -gt (>), -ge (>=), -lt (<), -le(<=)
Kiểm tra tập tin: test File
Lệnh kiểm tra tập tin
Cú pháp: test FILE
Option:
-d file : đúng nếu là thư mục
-e file : tồn tại trên đĩa
-f file : tập tin thông thường
-g file : có xác lập set-group-id trên file
-s file : có kích thước >0
-u file : có xác lập set-user-id
-r file : cho phép đọc
-w file: cho phép ghi
-x file : cho phép thực thi
Phép AND và phép OR
Cú pháp AND:
Lệnh1 && Lệnh2
Cú pháp OR:
Lệnh1 || Lệnh2
Lấy giá trị của một lệnh $(command)
• Ví dụ: Count=$((count+1))
Câu lệnh if
Câu lệnh if
if
then
[else ]
fi
Lệnh ifelif
if condition(s)
then command(s)
elif condition
then command(s)
else command(s)
fi
Lệnh exit
• Dừng thực thi Script và quay về dấu nhắc
• Ví dụ về lệnh exit:
echo "Do you wish to quit?"
read ans
if [ $ans = "y" ]
then exit
fi
Câu lệnh case
• Cú pháp:
case $variable-name in
value1) command
command;;
value2) command
command;;
*) command;;
esac
Câu lệnh while
Câu lệnh while
while
do
done
Ví dụ:
reply=y
while test "$reply" != "n“
do
echo –n "Enter file name?"
read fname
cat ${fname}
echo –n "wish to see more
files :"
read reply
done
Câu lệnh for
• Lặp lại trên từng giá trị trong dãy
• Cú pháp:
for variable_name in
do
done
• Ví dụ:
for name in Ruby Samuel
do
echo "${name}"
done
Câu lệnh break và continue (ví dụ)
while true
do
echo "Enter choice"
echo "(press 'q' to exit)"
echo "1 date 2 who"
echo "3 ls 4 pwd"
read choice
case $choice in
1)date;;
2)who;;
3)ls;;
4)pwd;;
q)break;;
*)echo "That was not one of the choices";;
esac
done
Câu lệnh test
• Câu lệnh test dùng kiểm tra file và thư mục
echo –n "Enter file name: "
read fname
if test -f $fname
then echo "$fname is an ordinary file"
elif test -d $fname
then echo "$fname is a directory file"
elif test -s $fname
then echo "$fname is a not an empty file"
elif test ! –r "$fname"
then echo "No readable file called $fname exists"
fi
function ftype
{
if test -f $fname
then echo "$fname is an ordinary file."
elif test -d $fname
then echo "$fname is a directory file."
elif test ! -r "$fname"
then echo "No readable file called $fname exists"
fi
}
echo "Enter a file name"
read fname
ftype
Hàm trong Shell Script
echo "Enter string"
read str
len=`echo $str | wc -c`
while test $len -ne 0
do
temp_char=`echo $str | cut -c$len`
rev_str=${rev_str}${temp_char}
len=`expr $len - 1`
done
echo $rev_str
Ví dụ Shell Script
(Đảo chuỗi)
echo "Enter string"
read str
len=`echo $str | wc -c`
len=`expr $len - 1`
l=`expr $len / 2`
ctr=1
flag=0
while test $ctr -le $l
do
a=`echo $str | cut -c$ctr`
b=`echo $str | cut -c$len`
if test $a != $b
then flag=1
break
fi
ctr=`expr $ctr + 1`
len=`expr $len - 1`
done
if test $flag -eq 0
then echo "String is palindrome"
else echo "String not a palindrome"
fi
Ví dụ Shell Script
(Kiểm tra chuỗi đối xứng)
Kiểm tra user nhập vào có trong hệ thống không? Nếu có,
kiểm tra user có đang login vào hệ thống không? In thông báo.
tmp=$( grep $tenuser:x /etc/passwd | wc –l )
if [ $tmp –eq 0 ]
then
echo “User $tenuser không có trong hệ thống”
else
echo “User $tenuser tồn tại trong hệ thống”
grep $tenuser:x /etc/passwd
kt=$( who | grep $tenuser | wc –l )
if [ $kt –ne 0 ]
then
echo “User $tenuser đang logon vào hệ thống”
else
echo “User $tenuser không logon vào hệ thống”
fi
Ví dụ Shell Script
Thực hiện các phép toán +, -, \*, / của 2 số.
tong=` expr $1 + $2 `
echo “Tong của 2 số $1 và $2 là : $tong”
hieu=` expr $1 - $2 `
echo “Hiệu của 2 số $1 và $2 là : $hieu”
tich=` expr $1 \* $2 `
echo “Tích của 2 số $1 và $2 là : $tich”
th=` expr $1 / $2 `
echo “Thương của 2 số $1 và $2 là : $th”
Ví dụ Shell Script
Bài tập thực hành
1. Viết shellscript liệt kê quyền hạn và tên tất cả các file trong một thư mục.
Đường dẫn thư mục được nhập và thông qua tham số script
2. Viết shellscript nhận tham số là một đường dẫn file, xuất ra quyền hạn của
owner trên file đó (Doc, Ghi, ThucThi)
3. Viết shellscript nhập vào tên 1 thư mục, kiểm tra xem thư mục đã có hay
chưa? Nếu có rồi yêu cầu đặt 1 tên khác, nếu chưa có tạo 40 thư mục con có
tên MAY00, MAY01, Sau khi tạo xong, thông báo ra màn hình và liệt kê
danh sách các thư mục đã tạo.
4. Viết shellscript kiểm tra giá trị nhập vào có phải là số nguyên tố hay không
Các file đính kèm theo tài liệu này:
- linux_bai_3_295.pdf