Download as pdf or txt
Download as pdf or txt
You are on page 1of 59

Hệ điều hành Linux

Phần 5: Lập trình Shell


Chương trình Shell

n Chương trình Shell:


n Là file văn bản chứa một hoặc nhiều lệnh
Linux cần thực thi một lượt.
n Công dụng:
n Chạy nhiều lệnh được dùng thường xuyên bằng
một lệnh đơn (chương trình shell)
n Tự động hóa công đoạn cài đặt phần mềm
n Viết các chương trình ứng dụng đơn giản
n Chương trình Shell được viết bằng các trình
soạn thảo văn bản thông thường như vi, …

IOIT-HCM Hệ điều hành Linux - Phần 5 2


Tạo chương trình Shell

n Ví dụ: Chương trình backup nội dung thư


mục làm việc vào đĩa USB:
n Soạn thảo chương trình shell:
# cat > backup
mount /dev/sda1 /mnt/usb
cp ~/* -R /mnt/usb
umount /mnt/usb
n Gán quyền thực thi:
# chmod a+x backup
n Chạy chương trình backup:
# ./backup hoặc # source backup
IOIT-HCM Hệ điều hành Linux - Phần 5 3
Sử dụng biến

n Biến (variable) là phần tử nhớ chứa dữ


liệu dùng khi thực thi chương trình shell.
n Hai loại biến:
n Biến do chương trình shell tự khai báo, biến
môi trường, ví dụ PATH
n Biến quy ước của shell, ví dụ: $1, $2, …
n Khai báo biến:
n Không cần khai báo trước
n Biến của shell không có kiểu dữ liệu: một biến
có thể lưu hoặc chuỗi kí tự hoặc số nguyên, …

IOIT-HCM Hệ điều hành Linux - Phần 5 4


Sử dụng biến (tt)

n Định nghĩa biến và gán giá trị: ví dụ


COUNT=5 -> Khai báo biến COUNT giá trị 5
n Lưu ý: với Bash shell, không được có khoảng

trắng cạnh dấu “=“


n Một cách gán khác: set COUNT = 5

n Lấy giá trị của biến:


n Dùng dấu $ trước tên biến
n Ví dụ in giá trị biến COUNT ra màn hình:

echo $COUNT

IOIT-HCM Hệ điều hành Linux - Phần 5 5


Sử dụng biến (tt)

n Nhập xuất với biến


n Lệnh: read [-p ChuỗiNhắc] biến…
n Vd1:
n echo –n “Nhập tên và năm sinh: ”
n read ten namsinh
n Vd2:
n read –p “Nhập tên và năm sinh: ” ten namsinh
n Lệnh: printf “ĐịnhDạng” biến…
n var=“World”
n printf “Hello, %s.\n” $var

IOIT-HCM Hệ điều hành Linux - Phần 5 6


Sử dụng biến (tt)

n Biến tham số dòng lệnh:


n Là các biến lưu các tham số được truyền trên dòng
lệnh khi gọi chương trình shell.
n Quy tắc đặt tên:
n 1: Tham số thứ 1
n 2: Tham số thứ 2
n 3: Tham số thứ 3
n …
n Lấy giá trị: cũng dùng dấu $ trước tên biến
n $1, $2, $3, …
n Gán trị tham số: Lệnh set
n set Mot Hai Ba

IOIT-HCM Hệ điều hành Linux - Phần 5 7


Sử dụng biến (tt)

n Biến tham số dòng lệnh (tt): ví dụ


n Chương trình shell tạo 2 user account:
# vi create-two
useradd $1
useradd $2
passwd $1
passwd $2
n Thực thi chương trình:
# create-two huyen hieu
=> Tạo user huyen và hieu, sau đó đặt password

IOIT-HCM Hệ điều hành Linux - Phần 5 8


Sử dụng biến (tt)

n Một số biến quy ước trong Shell:


n $#: Số lượng tham số dòng lệnh
n $?: Mã thoát của lệnh vừa thực thi
n $0: Tên chương trình shell (tham số 0)
n $$: PID của script đang chạy
n $*: Danh sách các tham số dòng lệnh
n $@: Danh sách các tham số dòng lệnh

IOIT-HCM Hệ điều hành Linux - Phần 5 9


Sử dụng dấu nháy

n Dấu nháy kép (“”): biểu diễn chuỗi ký tự


có chứa khoảng trắng
$ mystring=“Hello World”
$ echo $mystring => In biến mystring
Hello World
n Bash sẽ báo lỗi khi không dùng nháy kép cho
chuỗi:
$ mystring=Hello World
-bash: World: command not found
n => mystring vẫn không được gán giá trị

IOIT-HCM Hệ điều hành Linux - Phần 5 10


Sử dụng dấu nháy (tt)

n Dấu nháy đơn (‘’): biểu diễn chuỗi kí tự có


chứa khoảng trắng hay ký tự đặc biệt khác
$ mystring=‘Hello World’
$ echo $mystring
Hello World
n Ý nghĩa của dấu nháy kép: che ký tự
khoảng trắng trong chuỗi
n Ý nghĩa của dấu nháy đơn: che tất cả ký
tự đặc biệt trong chuỗi (;,.~#$?&*()[]‘’"+-
!^=|<>)
IOIT-HCM Hệ điều hành Linux - Phần 5 11
Sử dụng dấu nháy (tt)

n Khi nào sử dụng dấu nháy kép:


$ mystring=“Hello, I am $LOGNAME”
$ echo $mystring
Hello, I am tuan
n => Nháy kép không che ký tự $ nên được thay thế
n Khi nào sử dụng dấu nháy đơn:
$ mystring=‘Hello, I am $LOGNAME’
$ echo $mystring
Hello, I am $LOGNAME
n => Nháy đơn che ký tự $ nên không thay thế

IOIT-HCM Hệ điều hành Linux - Phần 5 12


Sử dụng dấu nháy (tt)

n Dấu sổ ngược \ (backslash): Dùng để che


một ký tự đặc biệt.
$ mystring=Hello\ World
$ echo $mystring
Hello World
n => Dấu backslash che ký tự khoảng trắng

$ cost=\$2500
$ echo $cost
$2500
n => Dấu backslash che ký tự $

IOIT-HCM Hệ điều hành Linux - Phần 5 13


Sử dụng dấu nháy (tt)
n Dấu nháy ngược (``): Dùng để lấy kết quả thực
thi của lệnh đặt bên trong.
$ dir_content=`ls –la /home/tuan`
$ echo $dir_content
drwxr-x--- 22 tuan tuan 4096 Jun 3 15:57 .
drwxr-xr-x 25 tuan tuan 4096 Jun 3 16:49 ..
-rw------- 1 tuan tuan 16595 Jun 4 19:44 .bash_history
-rw-r--r-- 1 tuan tuan 24 Jun 11 2000 .bash_logout
-rw-r--r-- 1 tuan tuan 271 Jun 3 10:09 .bash_profile
-rw-r--r-- 1 tuan tuan 176 Aug 24 1995 .bashrc
n => Thực thi lệnh ls và gán kết quả cho dir_content
n Nên dùng cấu trúc $(…) thay cho `…`

$ dir_content=$(ls –la /home/tuan)

IOIT-HCM Hệ điều hành Linux - Phần 5 14


Lệnh test

n Dùng để đánh giá một biểu thức điều kiện


n Cú pháp: 2 dạng
n test expression hay
n [ expression ]
n Có 4 nhóm toán tử dùng trong expression:
n Toán tử số nguyên
n Toán tử chuỗi ký tự
n Toán tử file
n Toán tử logic
IOIT-HCM Hệ điều hành Linux - Phần 5 15
Lệnh test (tt)

n Toán tử số nguyên:

expression Ý nghĩa
int1 –eq int2 = true nếu int1 = int2
int1 –ge int2 = true nếu int1 ≥ int2
int1 –gt int2 = true nếu int1 > int2
int1 –le int2 = true nếu int1 ≤ int2
int1 –lt int2 = true nếu int1 < int2
int1 –ne int2 = true nếu int1 ≠ int2

IOIT-HCM Hệ điều hành Linux - Phần 5 16


Lệnh test (tt)

n Toán tử chuỗi:

expression Ý nghĩa
str1 = str2 = true nếu str1 = str2
str1 != str2 = true nếu str1 ≠ str2
str = true nếu str ≠ null
-n str = true nếu str length > 0
–z str = true nếu str length = 0

IOIT-HCM Hệ điều hành Linux - Phần 5 17


Lệnh test (tt)

n Toán tử file:

expression Ý nghĩa
–d filename = true nếu là thư mục
–f filename = true nếu là file thường
–s filename = true nếu kích thước khác 0
–r filename = true nếu file đọc được
–w filename = true nếu file ghi được
–x filename = true nếu file thực thi được

IOIT-HCM Hệ điều hành Linux - Phần 5 18


Lệnh test (tt)

n Toán tử logic:

expression Ý nghĩa
! expr = true nếu expr = false
expr1 -a expr2 = true khi expr1 và expr2 true
expr1 -o expr2 =true khi expr1 hay expr2 true

IOIT-HCM Hệ điều hành Linux - Phần 5 19


Cấu trúc điều kiện
n Phát biểu if: dạng 1
if [ expression ]
then
commands1
fi
n Phát biểu if: dạng 2
if [ expression ]
then
commands1
else
commands2
fi
IOIT-HCM Hệ điều hành Linux - Phần 5 20
Cấu trúc điều kiện (tt)

n Phát biểu if: dạng 3


if [ expression1 ]
then
commands1
elif [ expression2 ]
then
commands2
else
commands3
fi

IOIT-HCM Hệ điều hành Linux - Phần 5 21


Cấu trúc điều kiện (tt)

n Ví dụ phát biểu if:


n File hello: Hiển thị câu hello
if [ “$1” = “you” ]
then
echo “Hi, how are you?”
else
echo “Hello $1”
fi
n Lưu ý:
n Phải có khoảng trắng cạnh dấu [, ], =
n “$1”: chuỗi ký tự tham số dòng lệnh thứ nhất
n Từ khóa then và else phải viết xuống hàng
IOIT-HCM Hệ điều hành Linux - Phần 5 22
Cấu trúc điều kiện (tt)

n Ví dụ phát biểu if: (tt)


n File helpme: kiểm tra và đọc README.TXT
if [ -r README.TXT ]
then
less README.TXT
elif [ ! -f README.TXT ]
then
echo “Sorry, no help file!”
else
echo “Sorry, no read permission!”
fi

IOIT-HCM Hệ điều hành Linux - Phần 5 23


Cấu trúc điều kiện (tt)

n Ví dụ về lệnh test.

IOIT-HCM Hệ điều hành Linux - Phần 5 24


Cấu trúc điều kiện (tt)

n Phát biểu case:


case str in
string1)
commands;;
string2)
commands;;
…………
*)
commands;;
esac
n Phát biểu case trong shell mạnh hơn C, Pascal ở chỗ
có thể so sánh chuỗi với các ký tự wild card.
IOIT-HCM Hệ điều hành Linux - Phần 5 25
Cấu trúc điều kiện (tt)

n Ví dụ phát biểu case:


n File readfile: đọc nội dung một file
case $3 in
first)
head -n $2 $1;;
last)
tail –n $2 $1;;
*)
cat $1;;
esac
n Ví dụ, đọc 10 dòng cuối file README.TXT:
$ readfile README.TXT 10 last
IOIT-HCM Hệ điều hành Linux - Phần 5 26
Cấu trúc lặp

n Phát biểu for: dạng 1


for var1 in list1
do
commands
done
n list1: danh sách các giá trị cách nhau bởi
khoảng trắng
n list1 có thể là một biến hoặc một danh sách được
nhập trực tiếp trong câu lệnh.
n var1: Lần lượt nhận các giá trị trong list1 tại
mỗi lần lặp
IOIT-HCM Hệ điều hành Linux - Phần 5 27
Cấu trúc lặp (tt)

n Phát biểu for: dạng 2


for var1
do
commands
done
n var1: nhận giá trị từ danh sách tham số dòng
lệnh
n Dạng phát biểu for này tương đương với:
for var1 in “$@”

IOIT-HCM Hệ điều hành Linux - Phần 5 28
Cấu trúc lặp (tt)

n Ví dụ phát biểu for:


n File uppercase: đổi sang chữ hoa nội dung
các file văn bản (tên file nhập từ dòng lệnh)
for file
do
tr a-z A-Z < $file > $file.caps
done
n Lệnh tr: Chuyển đổi các ký tự (a..z sang A..Z)
của chuỗi nhập từ bàn phím và in ra màn hình
n Ví dụ: $ uppercase vb1 vb2 vb3
n => vb1.caps, vb2.caps, vb3.caps

IOIT-HCM Hệ điều hành Linux - Phần 5 29


Cấu trúc lặp (tt)

n Ví dụ phát biểu for: (tt)


n File uppercase2: version 2 của uppercase –
danh sách file có sẵn (vb1, vb2, vb3)
for file in vb1 vb2 vb3
do
tr a-z A-Z < $file > $file.caps
done
n => Dùng dạng 1 của phát biểu for.
n Lưu ý không có dấu nháy “” trong danh sách

IOIT-HCM Hệ điều hành Linux - Phần 5 30


Cấu trúc lặp (tt)

n Ví dụ phát biểu for: (tt)


n File uppercase3: version 3 của uppercase –
danh sách file là một biến
list=“vb1 vb2 vb3”
for file in $list
do
tr a-z A-Z < $file > $file.caps
done
n => Cũng dùng dạng 1 của phát biểu for.

IOIT-HCM Hệ điều hành Linux - Phần 5 31


Cấu trúc lặp (tt)
n Phát biểu while:
while expression
do
commands
done
n expression: biểu thức luận lý (giá trị true hay false)

n Vòng while lặp khi expression = true

n Lệnh expr: Đánh giá một biểu thức toán


n Ví dụ: $ expr 100 / 5 + 1 => In ra 21
n Lệnh shift: Dịch chuyển tham số dòng lệnh qua
trái ($2 => $1, $3 => $2, $4 => $3, …)
n Để ngừng 1 CT bị loop: ^C
IOIT-HCM Hệ điều hành Linux - Phần 5 32
Cấu trúc lặp (tt)

n Ví dụ phát biểu while:


n File param: In thứ tự và giá trị các tham số
trên dòng lệnh
count=1
while [ -n “$*” ]
do
echo “Tham so thu $count = $1”
shift
count=`expr $count + 1`
done
n Mỗi khi gọi shift, biến $1 sẽ lần lượt mang giá trị

tham số kế tiếp
IOIT-HCM Hệ điều hành Linux - Phần 5 33
Cấu trúc lặp (tt)

n Phát biểu until:


until expression
do
commands
done
n expression: biểu thức luận lý (giá trị true
hay false)
n Vòng until lặp khi expression = false

n Lệnh break: thoát khỏi vòng lặp for, while,


until, select

IOIT-HCM Hệ điều hành Linux - Phần 5 34


Cấu trúc lặp (tt)

n Ví dụ phát biểu until:


n File param2: version “until” của param
count=1
until [ -z “$*” ]
do
echo “Tham so thu $count = $1”
shift
count=`expr $count + 1`
done
n expression -z “$*” trả về true nếu danh sách tham
số dòng lệnh rỗng (đã shift hết tham số)
IOIT-HCM Hệ điều hành Linux - Phần 5 35
Lệnh shift

n Tác dụng:
n Dịch chuyển giá trị hiện tại của các tham số
dòng lệnh sang trái một vị trí
n Ví dụ:
n $ command par1 par2 par3
n => $1 = par1, $2 = par2, $3 = par3
n Sau khi shift:
n => $1 = par2, $2 = par3, $3 = null
n Shift nhiều vị trí:
n shift n: Dịch sang trái n vị trí

IOIT-HCM Hệ điều hành Linux - Phần 5 36


Lệnh shift (tt)
n Ví dụ: version 4 của uppercase
n $ uppercase4 -i vidu.in -o vidu.out
while [ “$1” ]
do
if [ “$1” = “-i” ]
then
infile=$2
shift 2
elif [ “$1” = “-o” ]
then
outfile=$2
shift 2
else
echo “Program $0 does not recognize option $1”
exit 1
fi
done
tr a-z A-Z < $infile > $outfile
IOIT-HCM Hệ điều hành Linux - Phần 5 37
Phát biểu select

n Tạo hệ thống menu dòng lệnh:


select menuitem [in list_of_items]
do
commands
done
n Dấu ngoặc []: tùy chọn của phát biểu select
n list_of_items: biến hoặc danh sách chứa
nhiều hơn 1 phần tử (menu item)
n Nếu không chỉ định list_of_item, select sẽ
dùng danh sách tham số dòng lệnh (như for)
IOIT-HCM Hệ điều hành Linux - Phần 5 38
Phát biểu select (tt)
n Ví dụ phát biểu select:
n Hiển thị 3 menu pick1, pick2, pick3:
select menuitem in pick1 pick2 pick3
do
echo “Ban muon chon muc $menuitem?”
read res
if [ $res = “y” -o $res = “Y” ]
then
break
fi
done
n Lệnh read: Đọc dữ liệu user nhập từ bàn phím
n Nên dùng lệnh case để xác định user chọn mục nào
n Nên gán biến PS3 để đổi dấu nhắc, vd: PS3=‘Xin chọn : ‘

IOIT-HCM Hệ điều hành Linux - Phần 5 39


Đổi hướng dữ liệu trong cấu trúc
n Thực hiện cho toàn bộ cấu trúc (if, while, for,…)
n Ví dụ: if
if true
then
read line1
read line2
fi < $1
n Ví dụ: while
while read line
do
echo $line
done < $file

IOIT-HCM Hệ điều hành Linux - Phần 5 40


Định nghĩa thủ tục

n Khai báo hàm:


function_name () {
commands
}
n Gọi hàm:
function_name [param1 param2 …]
n Hàm không hạn chế số tham số
n Tham số hàm có thể xem như tham số dòng lệnh
(truy xuất bằng $1, $2, dùng shift, … như với lệnh)
n Mã trả về:
n Gọi lệnh return [n]: n chứa giá trị trả về (1 byte)
IOIT-HCM Hệ điều hành Linux - Phần 5 41
Định nghĩa thủ tục (tt)
n Ví dụ 1:
n File tinhgiaithua: Chương trình tính giai thừa
#!/bin/bash
# Ham giaithua
giaithua () {
if [ $1 -gt 1 ] ; then
PREV=`expr $1 - 1`
giaithua $PREV
RESULT=`expr $RESULT \* $1`
fi
}
# Chuong trinh chinh
RESULT=1
giaithua $1
echo "Giai thua cua $1 = $RESULT"
n Lưu ý: Dấu nhân (*) phải thay bằng \* để shell không hiểu lầm
IOIT-HCM Hệ điều hành Linux - Phần 5 42
Định nghĩa thủ tục (tt)
n Ví dụ 2:
n isvalidip(): Kiểm tra địa chỉ IP hợp lệ

IOIT-HCM Hệ điều hành Linux - Phần 5 43


Định nghĩa thủ tục (tt)
n Ví dụ 2:
n isvalidip(): Kiểm tra địa chỉ IP hợp lệ (tiếp)

IOIT-HCM Hệ điều hành Linux - Phần 5 44


Định nghĩa thủ tục (tt)
n Ví dụ 2:
n Isvalidip(): Kiểm tra địa chỉ IP hợp lệ (tiếp)

IOIT-HCM Hệ điều hành Linux - Phần 5 45


Một số quy ước khác
n Mỗi file chương trình shell nên bắt đầu với:
#!/bin/bash
n => Thông báo đây là Bash shellscript để hệ thống nhận biết
khi thực thi. Ngoài ra các trình soạn thảo văn bản như vim
cũng hỗ trợ tô màu nội dung.
n Dấu chấm phẩy (;):
n Dùng để phân cách nhiều lệnh trên cùng một dòng
n Thoát chương trình shell:
n Gọi lệnh exit n với n là mã thoát
n Lệnh continue, break:
n continue: bỏ qua lệnh còn lại và sang bước lặp kế
n continue n: tiếp tục từ n vòng lặp gần nhất
n break n: thoát khỏi n vòng lặp gần lệnh break nhất

IOIT-HCM Hệ điều hành Linux - Phần 5 46


Một số quy ước khác (tt)

n Lệnh export: Truyền giá trị biến xuống


các shell con
$ DISPLAY=10.1.1.12:0.0; export DISPLAY
$ export DISPLAY=10.1.1.12:0.0
n Lệnh sed (stream editor): Hiệu chỉnh dữ
liệu đầu vào, ví dụ:
sed ‘1,2d’ vb.txt => xóa dòng 1 và dòng 2 từ vb.txt
sed ‘/bye/d’ vb.txt => xóa dòng có chữ bye
sed ‘s/bad/good’ vb.txt => thay từ bad thành good
sed -n ‘/hello/p’ vb.txt => in những dòng có từ hello

IOIT-HCM Hệ điều hành Linux - Phần 5 47


Một số quy ước khác (tt)

n Cấu trúc && (và):


cmd1 && cmd2 tương đương với
if cmd1 ; then
cmd2 ; fi
n Cấu trúc || (hoặc):
cmd1 || cmd2 tương đương với
if cmd1 ; then
:
else
cmd2 ; fi
IOIT-HCM Hệ điều hành Linux - Phần 5 48
Một số quy ước khác (tt)

n Ví dụ sử dụng cấu trúc && và ||


if mkdir abc
then
echo “Da tao thu muc abc."
exit 0
else
echo “Khong tao duoc thu muc abc."
exit 1
fi
n Đoạn code trên có thể thay thế bằng:
mkdir abc \
&& { echo "Da tao thu muc abc." ; exit 0; } \
|| { echo "Khong tao duoc thu muc abc." ; exit 1; }
IOIT-HCM Hệ điều hành Linux - Phần 5 49
Thực hiện tính toán
n Ngoài lệnh expr, có thể sử dụng 1 trong 2 lệnh
tính toán khác sau:
n Lệnh let
n let x=(y+12)/8
n Chú ý: không có khoảng trắng giữa biểu thức
n Cấu trúc $(( … ))
n x=$(( (y + 12) / 8 ))
n Chú ý: không có khoảng trắng cạnh dấu = nhưng cho phép cạnh
toán tử
n Các toán tử:
n +, -, *, /, %, **, <<, >>, |, &, =, !=, <, >
n +=, -=, *=, /=, %=, <<=, >>=
IOIT-HCM Hệ điều hành Linux - Phần 5 50
Một số ví dụ về chương trình Shell

n Kiểm tra 1 user có login?

if who | grep -s $1 > /dev/null


then
echo “$1 is logged in”
else
echo “$1 not available”
fi

IOIT-HCM Hệ điều hành Linux - Phần 5 51


Một số ví dụ về chương trình Shell (tt)

n Kiểm tra file trước khi xoá


echo "Enter filename to delete"
read fname
if test -f $fname
then
echo "Remove $fname file ..."
sleep 1
rm $fname
else
echo "File is not exist"
fi
IOIT-HCM Hệ điều hành Linux - Phần 5 52
Một số ví dụ về chương trình Shell (tt)

n Chạy mọi script trong 1 thư mục

for SCRIPT in /path/to/scripts/dir/*


do
if [ -f $SCRIPT -a -x $SCRIPT ]
then
$SCRIPT
fi
done

IOIT-HCM Hệ điều hành Linux - Phần 5 53


Một số ví dụ về chương trình Shell (tt)

n Sử dụng if lồng nhau kiểm tra file & dir.


DIRPLACE=/tmp
INFILE=/home/yucca/amazing.data
OUTFILE=/home/yucca/more.results
if [ -d "$DIRPLACE" ]
then
cd $DIRPLACE
if [ -f "$INFILE" ]
then
if [ -w "$OUTFILE" ]
then
doscience < "$INFILE" >> "$OUTFILE"
else
echo "can not write to $OUTFILE"
fi
else
echo "can not read from $INFILE"
fi
else
echo "can not cd into $DIRPLACE"
fi

IOIT-HCM Hệ điều hành Linux - Phần 5 54


Một số ví dụ về chương trình Shell (tt)

n So sánh chuỗi và số
VAR1=" 05 "
VAR2="5“
printf "%s" "do they -eq as equal? "
if [ "$VAR1" -eq "$VAR2" ]
then
echo YES
else
echo NO
fi
printf "%s" "do they = as equal? "
if [ "$VAR1" = "$VAR2" ]
then
echo YES
else
echo NO
fi

IOIT-HCM Hệ điều hành Linux - Phần 5 55


Một số ví dụ về chương trình Shell (tt)

n Dạng điều kiện vòng lặp for


for (( i=1 ; i <= 10 ; i++ )) ; do echo $i ; done
n Tương đương với
for i in 1 2 3 4 5 6 7 8 9 10
do echo $i ; done
n Ví dụ 2
for (( i=0, j=0 ; i+j < 10 ; i++, j++ ))
do echo $((i*j)) ; done
n Cách khác
for i in {1..10}; do echo $i; done
for i in $(seq 1 10); do echo $i; done

IOIT-HCM Hệ điều hành Linux - Phần 5 56


Một số ví dụ về chương trình Shell (tt)

n Dùng dấu ngoặc trong biểu thức

# Kiểm tra tham số phải lẻ và nhiều hơn 3


if [ \( $# -lt 3 \) -o \( $(($# % 2)) -eq 0 \) ]
then
echo “Sai so luong tham so"
exit 1
fi

IOIT-HCM Hệ điều hành Linux - Phần 5 57


Một số ví dụ về chương trình Shell (tt)
n Kiểm tra dữ liệu nhập bằng case
case $input in
*.company.com ) # Probably a local hostname
;;
*.jpg ) # Probably a JPEG file
;;
*.[jJ][pP][gG] ) # Probably a JPEG file, case insensitive
;;
foo | bar ) # entered 'foo' or 'bar
;;
[0-9][0-9][0-9] ) # A 3 digit number
;;
[a-z][a-z][a-z][a-z] ) # A 4 lower-case char word
;;
*) # None of the above
;;
esac
IOIT-HCM Hệ điều hành Linux - Phần 5 58
Một số ví dụ về chương trình Shell (tt)
n Hai cách sử dụng lệnh case
n Cách 1
case “$timeofday” in
yes) echo “Good Morning”;;
no ) echo “Good Afternoon”;;
y ) echo “Good Morning”;;
n ) echo “Good Afternoon”;;
* ) echo “Sorry, answer not recognized”;;
esac
n Cách 2
case “$timeofday” in
yes | y | Yes | YES ) echo “Good Morning”;;
n* | N* ) echo “Good Afternoon”;;
* ) echo “Sorry, answer not recognized”;;
esac
IOIT-HCM Hệ điều hành Linux - Phần 5 59

You might also like