Tải bản đầy đủ (.pdf) (38 trang)

Bài giảng Hệ điều hành UNIX-Linux: Chương 8 - Nguyễn Trí Thành

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (326.93 KB, 38 trang )

Hệ điều hành UNIX-Linux
Chương 8. Lập trình Shell

Unix operating system - Nguyen Tri Thanh - Sep-10

1


Chương trình shell
Chương trình shell là một tập hợp các câu lệnh viết trong một file text
Nó giống chương trình .bat trong MSDOS nhưng có sức mạnh lớn hơn
nhiều
Chương trình shell có thể nhận dữ liệu từ người dùng, từ file và in kết quả
ra màn hình
Có thể dùng để tạo ra một lệnh riêng cho mình
Shell giúp tiết kiệm thời gian để làm các cơng việc hàng ngày
Các bước ñể tạo ra một chương trình shell
Sử dụng một chương trình soạn thảo text để tạo ra một file chương
trình
Thay ñổi thuộc tính của file vừa tạo ra thêm thuộc tính khả thi:
chmod +x ./script.sh
Có thể chạy ln chương trình bằng lệnh: sh script.sh
Các chương trình shell nên đặt đi là .sh

Unix operating system - Nguyen Tri Thanh - Sep-10

2


Trình soạn thảo văn bản trong Linux



Trình soạn thảo vim

Unix operating system - Nguyen Tri Thanh - Sep-10

3


Trình soạn thảo văn bản trong Linux


Trình soạn thảo của mc

Unix operating system - Nguyen Tri Thanh - Sep-10

4


Các loại shell

Muốn xem các loại shell có trong hệ thống ta sử dụng lệnh: cat /etc/shells
Muốn xem shell hiện tại: echo $SHELL
Phần này chỉ đề cập đến lập trình shell trong bash
Unix operating system - Nguyen Tri Thanh - Sep-10

5


Các ký hiệu ñặc biệt trong shell


Khi ñặt tên
biến cần
tránh xung
ñột với các
ký tự ñặc
biệt này

Unix operating system - Nguyen Tri Thanh - Sep-10

6


Sử dụng biến trong shell
Biến hệ thống ñược Linux tạo ra và quản lý (CHỮ IN HOA)
Biến người dùng: ñược người dùng tạo ra và quản lý (chữ thường)

Unix operating system - Nguyen Tri Thanh - Sep-10

7


Quy tắc ñặt tên biến
Tên biến phải bắt ñầu với một ký tự chữ cái hoặc dấu gạch dưới (_), tiếp theo
là một hoặc một số ký tự chữ hoặc số
Biến ñược khởi tạo khi ta gán giá trị cho biến
Không thêm các dấu cách vào trước và sau dấu gán, khi gán giá trị cho biến
Biến trong Linux phân biệt chữ HOA thường
Tìm các biến hợp lệ và khong hợp lệ:
no=10
new_variable=“Test”

number= 10
1stnumber=10
Truy cập giá trị của một biến ta dùng ký tự $ trước tên biến, xóa 1 biến sử
dụng lệnh unset var
echo $new_variable
Lệnh echo [tùy chọn] [chuỗi, biến] dùng ñể hiển thị văn bản hoặc giá trị của
biến ra màn hình
Tùy chọn: -n khơng hiển thị ký hiệu xuống dịng, -e hiển thị các ký tự ẩn đặc
biệt sau trong chuỗi
Unix operating system - Nguyen Tri Thanh - Sep-10

8


Trích dẫn (quoting)
Trích dẫn là cách bao quanh một chuỗi bằng cặp dấu nháy
Cho phép một số ký tự ñặc biệt giữ ngun như các ký tự bình thường
Có 2 loại trích dẫn mạnh (‘ …’) và trích dẫn yếu (“ … ”)
Trích dẫn yếu vẫn biên dịch các biến trong chuỗi
echo “Giá trị của biến là: $var”
Trích dẫn mạnh bảo toàn toàn bộ các ký tự trong chuỗi
echo ‘Giá trị của tham số ñầu tiên là: $var’
→ Giá trị của tham số ñầu tiên là: $var
ls -l '[Vv]*‘
→ ls: [Vv]*: No such file or directory

Unix operating system - Nguyen Tri Thanh - Sep-10

9



Tính tốn số học trên các biến
Tính tốn trong shell ñược thực hiện với các ñối số nguyên
Các phép toán gồm có: cộng (+), trừ (-), nhân (*), chia (/), mod (%)
Tính tốn trên shell có dạng:
`expr <biểu thức>`
Ví dụ
var1=10
var2=20
sum=`expr $var1 + $var2 `
product=`expr $var1 \* $var2 `
echo “Tổng của $var1 và $var2 là: $sum, tích của chúng là $product”

Unix operating system - Nguyen Tri Thanh - Sep-10

10


Tham số dịng lệnh trong chương trình shell
Là tham số được truyền vào cho chương trình trên dịng lệnh
Dùng để thơng báo cho chương trình các tùy chọn, file cần xử lý
rm test.txt
ls –a /usr/local
myshell 10 30
Truy cập các tham số dịng lệnh thơng qua các biến hệ thống $1, …, $9
echo $1 # hiển thị 10
echo $2 # hiển thị 30
Tổng số tham số trả lại qua biến $#, tồn bộ tham số thơng qua $* hay $@,
biến $0 trả lại tên chương trình
echo "Total number of command line argument are $#“

echo "$0 is script name“
echo "$1 is first argument“
echo "$2 is second argument“
echo "All of them are :- $* or $@"

Unix operating system - Nguyen Tri Thanh - Sep-10

11


Tham số dịng lệnh trong chương trình shell (tiếp)
Làm sao truy cập các tham số có số thứ tự > 9?
Truy xuất thông qua $@ hay $*
Dùng lệnh shift
shift sẽ gán lại giá trị của các tham số vị trí bằng cách dịch trái giá trị của danh
sách các biến
$1 <--- $2, $2 <--- $3, $3 <--- $4, ...
Ví dụ
echo “Giá trị của tham số thứ nhất là: $1”
shift
echo “Giá trị của tham số thứ 2 là: $1”
Kết quả trả về khi truyền vào cho chương trình tham số: 3 6 5 ?

Unix operating system - Nguyen Tri Thanh - Sep-10

12


Giá trị logic trong shell
Ngược với C hay các ngôn ngữ lập trình thơng dụng, trong shell giá trị 0 nghĩa

là true còn giá trị khác 0 là false
Giá trị logic là một giá trị quan trọng trong các cấu trúc ñiều khiển

Giá trị logic trong bc

Unix operating system - Nguyen Tri Thanh - Sep-10

13


Cấu trúc chương trình shell
Là một tập hợp các lệnh và các cấu trúc ñiều khiển
Mỗi lệnh ñược viết trên 1 dịng
Chú thích trong chương trình là phần nằm sau dấu #
Dịng chú thích đầu tiên trong file chương trình shell sẽ báo cho hệ thống
chọn shell (chương trình) nào ñể thực hiện chương trình (ngầm ñịnh là shell
hiện tại)
#!/bin/bash
#!/usr/bin/perl
#!/bin/csh
#!/bin/rm
ñiều gì sẽ xảy ra???

Unix operating system - Nguyen Tri Thanh - Sep-10

14


Cấu trúc ñiều khiển if
ðiều kiện if ñược sử dụng ñể ñưa ra các quyết ñịnh trong chương trình shell

Nếu ñiều kiện ñược cung cấp là ñúng thì các lệnh trong đó được thực thi
ðiều kiện là một phép so sánh giữa 2 giá trị, một lệnh kiểm tra hay kết quả trả
về của 1 chương trình
Cấu trúc
if điều_kiện
then
#Khối ệnh sẽ được thực hiện nếu điều_kiện là đúng
fi
Ví dụ:
if cat $1
then
echo -e "\n\nFile $1, found and successfully echoed"
fi
Trong linux các lệnh thường trả về trạng thái thành công hay lỗi, nếu thành
cơng thì trả về giá trị 0, nếu bị lỗi thì sẽ trả về mã lỗi khác 0

Unix operating system - Nguyen Tri Thanh - Sep-10

15


Lệnh test hay []
ðược dùng ñể kiểm tra xem một biểu thức ñúng (0) hay sai (<>0)
Cú pháp
test biểu_thức
[ biểu_thức ]
Ví dụ:
if test $1 -gt 0
then
echo "$1 number is positive"

fi

if [ $1 -lt 0 ]
then
echo "$1 number is negative"
fi

Unix operating system - Nguyen Tri Thanh - Sep-10

16


Các tốn tử số học trong chương trình shell

Unix operating system - Nguyen Tri Thanh - Sep-10

17


Các toán so sánh chuỗi
Sử dụng toán tử so sánh chuỗi trong tốn tử [[ ]]

Ví dụ
if [[ $1 != "-c" ]] ; then
echo "The first argument must be -c!"
fi
if [[ -z $2 ]]; then
echo “Missing the second argument!”
fi
Unix operating system - Nguyen Tri Thanh - Sep-10


18


Các tốn tử kiểm tra file/thư mục

Ví dụ
Chương trình hiển thị nội dung của 1 file nếu nó khác rỗng
if [[ -f $1 ]] ; then
if [[ -s $1 ]]; then
cat $1
fi
fi
Unix operating system - Nguyen Tri Thanh - Sep-10

19


Các tốn tử logic

Ví dụ
Chương trình hiển thị nội dung của 1 file nếu nó khác rỗng
if [[ -n $1 ]] ; then
if [ -s $1 –a –f $1 ]; then
cat $1
fi
fi

Unix operating system - Nguyen Tri Thanh - Sep-10


20


Cấu trúc rẽ nhánh if … else … fi
Nếu ñiều kiện đúng thì thực hiện khối lệnh thứ nhất, nếu khơng thì thực hiện
khối lệnh thứ 2
if điều_kiện ; then
Khối_lệnh_1
else
Khối_lệnh_2
fi

Ví dụ
if test $1 -gt 0
then
echo "$1 number is positive"
else
echo "$1 number is negative"
fi

Unix operating system - Nguyen Tri Thanh - Sep-10

21


Cấu trúc if …then … else … fi ña mức
Rất hiệu quả khi phải kiểm tra nhiều trường hợp/giá trị của 1 biến
if điều_kiện_1 ; then
Khối_lệnh_1
elif điều_kiện_2 ; then

Khối_lệnh_2

else
Khối_lệnh_n
fi
Ví dụ
if [ $1 -gt 0 ]; then
echo "$1 is positive"
elif [ $1 -lt 0 ]; then
echo "$1 is negative"
elif [ $1 -eq 0 ]; then
echo "$1 is zero"
else
echo "Opps! $1 is not number, give number"
fi
Unix operating system - Nguyen Tri Thanh - Sep-10

22


Cấu trúc lựa chọn
Cấu trúc
case expr in
pattern1 )
Khối lệnh 1 ;;
pattern2 )
Khối lệnh 2 ;;

*)
Khối lệnh n ;;

esac

expr ñược ñem đi so sánh với từng pattern,
nếu nó bằng nhau thì các lệnh tương ứng sẽ
ñược thi hành
Dấu ;; là tương ñương với lệnh break của C,
tạo ra ñiều khiển nhảy tới dịng đầu tiên sau mã
esac
Khơng như từ khố switch của C, lệnh case
của bash cho phép ta kiểm tra giá trị của expr
dựa vào pattern, nó có thể chứa các kí tự đại diện
*, ?
Biểu thức *) có ý nghĩa như nhãn default
trong lệnh switch của C

Unix operating system - Nguyen Tri Thanh - Sep-10

23


Ví dụ lệnh case
echo; echo "Hit a key, then hit return."
read Keypress
case "$Keypress" in
[a-z] ) echo "Lowercase letter";;
[A-Z] ) echo "Uppercase letter";;
[0-9] ) echo "Digit";;
*
) echo "Punctuation, whitespace, or
other";;

esac # Allows ranges of characters in
[square brackets].
Lệnh read var sẽ ñọc giá trị nhập vào từ bàn phím, sau khi ấn Enter và
lưu giữ vào biến var

Unix operating system - Nguyen Tri Thanh - Sep-10

24


Cấu trúc lặp for
Lặp ñi lặp lại 1 số lần một khối lệnh nào đó
for variable in danh_sách
do
# Khối lệnh thao tác với giá trị của $variable
done
Ví dụ
for i in 1 2 3 4 5
do
echo "Welcome $i times"
done
In ra bảng nhân của 1 số
n=$1
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i \* $n`"
done

Unix operating system - Nguyen Tri Thanh - Sep-10


25


×