Professional Documents
Culture Documents
Unix Programming
1
Shell Programming
CÁC YẾU TỐ CƠ BẢN CỦA SHELL
Chương trình Shell được thực hiện dựa trên file script
- Một chương trình shell dựa trên các lệnh shell
- Dùng tiến trình vi để soạn thảo
+ Chú thích bắt đầu bằng dấu # :
+ Chú thích đặc biệt chỉ thông dịch lệnh sh: #!/bin/bash
Dùng lệnh chmod để chuyển đặc tính file
- Có nhiều cách: sh < <tên chương trình>
chmod u+x <tên chương trình> # Chỉ cần làm 1 lần
- Vận hành file
./<tên chương trình>
2
Nguyen Quoc Tuan - Unix Programming
Shell Programming
3
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Các loại biến
- Biến môi trường
- Biến người dùng
- Biến tự động
Biến môi trường
(liên quan với biến toàn cục trong C/C++)
- Một số biến đặc biệt do hệ thống tạo ra như $HOME, $PATH, .... , $PS1,
- Một số khác do người sử dụng tạo ra, được đặt trong tệp $HOME/.profile
- Cách tạo biến môi trường của người sử dụng:
export <tên biến không có $> = <giá trị biến>
Ví dụ: export MYNAME=“Tux Linux”
4
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Biến môi trường đặc biệt
EDITOR Chỉ đường dẫn mặc định của tiến trình editor
GROUP Thông báo nhóm login với người dùng
HOME Đường dẫn tới thư mục login
HOST Tên trạm đang login
IFS Tập các kí tự mà shell hiểu là dấu phân cách trường
MAIL Đường dẫn tới thư mục chứa mail người dùng
LOGNAME Tên user truy cập #!/bin/sh
# This is the first Bourne shell program
echo "Hello SLOGNAME, it's nice talking to you."
echo "Your present working directory is `pwd` “
echo "You are working on machine called `uname –n`.”
echo "Here is a list of your files."
Is
Nguyen Quoc Tuan - Unix Programming echo "Bye for now SLOGNAME. The time is `date +%T`!"
Shell Programming
BIẾN CỦA SHELL
Biến môi trường
6
Nguyen Quoc Tuan - Unix Programming
Shell Programming
CÁC TOÁN TỬ STRING
Lệnh unset để xoá biến/hàm khỏi môi trường shell
- Khuôn dạng unset [-fv] biến $ export radius = 10
Lệnh alias cho phép đổi tến lênhj $ echo $radius
10
S alias ci=“cat dsach”
$ unset $radius
$ ci
$ echo $radius
An anh 7.4 5.6
Anh trung 8.8 6.4
Nghia han 9 8
Ngoc anh 9 9
Auc anh 7 5
$alias changedir= 'set dirname=projects; cd $dirname; unset dirname'
Lệnh này tạo một bí danh theo tên changeir đặt giá trị của biến shell dirname vào thư mục, các
projects, thay đổi thư mục thành các projects và xóa dirname biến shell khỏi môi trường bằng cách
hủy đặt nó
7
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Biến môi trường $ set
Ví dụ: DISPLAY=:0.0
FMHOME=/usr/local/Frame-2.1X
$ env FONTPATH=/usr/local/0W3/lib/fonts
L0GNAME= tuannq HELPPATH=/usr/local/0W3/lib/local:/usr/local/0W3/lib/heIp
TERMCAP=sun-cmd HOME=/home/qtuan
USER=tuannq HZ=100
DISPLAY=:0.0 IFS=
5HELL=/bin/sh LANG=C
HOME=/home/jody/eHie LD_LIBRARY_PATH=/usr/loca l/OHS/lib
TERM=sun-cmd LDMBRARY_ LOCNAME=qtuan
PATH=/usr/loca l/0m/lib MAICHECK=600
PWD=/home//tuannq MANPATH=/usr/local/OW3/share/man;/usr/local/OW3/man
;/usr/local/man ; /usr/local/doctooIs/man:/usr/man
0PTIND=1
8
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Biến môi trường
Ví dụ: PATH=/home/qtuan:/usr/local/0W3/bin;
/usr/ucb:/usr/local/ doctooIs/bin;
/usr/bin:/usr/local ; /etc ; /usr/spool/news/bin;
# Biến user env
/home/qtuan/bin; /usr/lo ; /usr/etc;
#!/bin/sh
PS1= $
TERM=wyse
PS2= >
export TERM
PWD=/home/qtuan/btap
NAME=“qtuan"
SHELL=/bin/sh
export NAME
TERM=sun-cmd
echo $NAME
TERMCAP=sun-cmd; te=\E[>4h; ti=\E[>4] ; tc=sun:
# Hủy biến
U5ER= qtuan
unset name
unset TERM
9
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Biến tự động
- Biến tự động: $1, $2, …. $9: Giá trị tại vị trí các đối (là tên lệnh, $1,…,$9
hay là giá trị các tham số dòng lệnh
- Biến $0 tham chiếu shell hiện hành
Ví dụ : $cat file1 file2 | echo $1
10
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
11
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Ví dụ biến tự động
$ ls -l test
-rwxr-xr-x 1 qtuan qtuan 146 Oct 1 21:15 test*
$cat test
echo -n "So luong tham so: " ; echo $#
echo -n "Cac tham so: " ; echo $*
echo -n "Tham so thu 2: "; echo $2
echo -n "Ten chuong trinh: "; echo $0
$ ./test –l ts1 ts2 "tham so 3"
So luong tham so: 4
Cac tham so: -l ts1 ts2 tham so 3
Tham so thu 2: ts1
Ten chuong trinh: ./test
12
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Ví dụ biến tự động
$ ls -l test
-rwxr-xr-x 1 qtuan qtuan 146 Oct 1 21:15 test*
$ echo $? $ echo The pid of this shell is $$
0: Tốt The pid of t his shell is 4725
$ ls -l test123 $ echo The options for this shell are $-
The options for this shell are s
/bin/ls:
$ grep tuannq /etc/passwd
test123: No such file or directory $ echo $?
$ echo $? 1
1 : Có lỗi thực hiện lệnh $ sleep 25&
4736
$ echo S!
Nguyen Quoc Tuan - Unix Programming
4736 13
Shell Programming
BIẾN CỦA SHELL
Gán giá trị biến từ bàn phím
- Cú pháp:
$ read answer Đọc một dòng từ stdin và gán nó cho biến answer
$ read first last Đọc một dòng từ stdin đến khoảng trống đầu tiên hoặc dòng mới,
đặt word đầu tiên vào biến first và phần còn lại vào biến last
Ví dụ (The Script)
#!/bin/sh
# Scriptname: qtuan
$ echo "Are you happy? \c"
(The Output)
$ read answer
Are you happy? Yes
$ echo "Sanswer is the right response."
Yes is the right response.
$ echo "What is your full name? \c"
What is your full name? Tuan Nguyen Quoc
$ read first middle last
Hello Tuan
$ echo "Hello Sfirst"
14
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Thay thế biến
- Sau khi biến được gán giá trị nó có thể cần được thay thế giá trị trong script
Format Description
${ var } dùng giá trị var
${ var1 :- var2 } dùng var1 nếu đặt còn không dùng var2
${ var1 := var2 } dùng var1 nếu đặt còn không dùng var2 và gán giá trị nó cho var1
${ var1 :? var2 } dùng var1 nếu đặt còn không prints va r2 và exits, nếu var2 không
có prints: null ..
${ var1 :+ var2 } dùng var2 nếu var1 được đặt $ p=Hello
$ q=World
$ d=10 $ r=
$ echo $d $ echo ${p:-q}
10 Hello
$ echo ${d} $ echo ${q:-p}
10 World
$ echo ${r:-`date`}
Tue Oct 5 11:12:34 +07 2021
$ echo ${r:=“Go”}
Nguyen Quoc Tuan - Unix Programming Go 15
Shell Programming
BIẾN CỦA SHELL
16
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Lệnh shift
- Khi ta có hơn 10 tham số dòng lệnh: Sử dụng shift để lấy các tham số từ 10 trở lên
Cú pháp:
$shift [<số nguyên từ 1..9>]
shift 1 tương đương với shift
Sau khi thực hi ện shift 3: Giá trị của $1 được thay bởi giá trị của $4
Giá trị của $2 được thay bởi giá trị của $5
…
Giá trị của $9 được thay b ởi giá trị của tham số dòng lệnh thứ 13
17
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Lệnh shift
Ví dụ: $ cat tong
echo `expr $1 + $2`
echo -n "Tham so 1: " $1 ;
echo " Tham so 2: " $2
shift 2
echo -n "Tham so 1: " $1 ;
echo " Tham so 2: " $2
$ ./tong 1 2 3 4 3
3
Tham so 1: 1
Tham so 2: 2
Tham so 1: 3
Tham so 2: 4
18
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Đặt biến vị trí cho các biến/đối
19
Nguyen Quoc Tuan - Unix Programming
Shell Programming
BIẾN CỦA SHELL
Ví dụ:
#!/bin/bash
# Script tset
set word1 word2 word3
echo $1 $3 $2 ./tset
set apples peaches plums word1 word3 word2
shift peaches
echo $1 plums
echo $2 peaches plums
echo $*
20
Nguyen Quoc Tuan - Unix Programming
Shell Programming
CÁC PHÉP TOÁN SHELL $ expr 1 + 4
5
Các phép toán số học gồm có: $ expr 1+4
cộng (+), trừ (-), nhân (*), chia (/), mod (%) 1+4
Tính toán trên shell có dạng: `expr <biểu thức>` $ expr 5 + 9/3
$ expr $a + $b 8
$ expr 5 * 4
$ echo `expr $a + $b`
expr: syntax error
5 $ expr 5 \* 4 - 2
18
$ expr 11 % 3
2
Các tính toán trong shell được thực hiện với các đối số nguyên (trừ bc, awk)
bc: Base Conversion – lệnh tính số thực
Chú ý: Giữa các toán hạng $a, $b và phép toán + -*/ phải có dấu cách
Sinh viên tự tìm hiểu lệnh bc
21
Nguyen Quoc Tuan - Unix Programming
Shell Programming
CÁC PHÉP TOÁN SHELL
$ num= 1
Ví dụ:
$ num= `expr $num + 1`
$ echo $num
$ cat tinhs
2
# Script tinh
$ n =`echo “scale=3; 13 / 2" | bc `
$3==0{next}
$ echo $n
{
6.500
total +=$3
count++
}
END $ chmod 755 tinhs
{ avrg = total/count $ awk –f tinhs dsach
printf "Total Amount :%d\n", total Total Amount : 144
printf "Number Of Customer :%d\n ", count Number Of Customer : 17
printf "Average Amount :%9.2f\n", avrg Average Amount : 6.71
}
$ factor 28
2
2
7
23
Nguyen Quoc Tuan - Unix Programming
Shell Programming
CÁC PHÉP TOÁN SHELL
Lệnh test – kiểm tra biểu thức hợp lệ
Kiểm tra xâu
string1 = string2 Xâu1 bằng xâu2 ( có khoảng trống quang dấu =)
stringl != string2 Xâu1 khác xâu2
string Xâu not null
-z string Độ dài xâu zero
-n string Độ dài xâu nonzero
$ name=qtuan
$ grep “$name" /etc/passwd
qtuan:8ZKX2F:5102:40: Tuan Nguyen Quóc:/home/torn:/bin/ksh 3
$ echo $? S [ $name = qtuan] # Brackets replace the test command
0 Success! $ echo $?
$ test $name != qtuan 0 Success
$ echo $? $ [ $name = [Tt]?m ] # not evaluated by the test command
1 Failure $ echo S?
24
Nguyen Quoc Tuan - Unix Programming 1 Failure
Shell Programming
CÁC PHÉP TOÁN SHELL
Lệnh test – kiểm tra biểu thức hợp lệ
Kiểm tra số nguyên
Ví dụ
intl -eq int2 intl bằng int2
$ echo "Enter the numbers to be"
intl -ne int2 intl không bằng int2
$ s=0
intl -gt int2 intl lớn hơn int2
$ read h
intl -ge int2 intl lớn hơn hoặc bằng int2
$ test $h != –1
intl -It int2 intl is bé hơn int2
$ echo $?
intl -le int2 intl bé hơn hoặc bằng int2
Các phép toán kiểm tra thường dùng là điều kiện cho các lệnh for, while, loop …
exprl1- a expr2 Logical AND
Kiểm tra logic expr1 -o expr2 Logical OR
!expr Logical NOT
25
Nguyen Quoc Tuan - Unix Programming
Shell Programming
CÁC PHÉP TOÁN SHELL checktype
Lệnh test – kiểm tra biểu thức hợp lệ #!/bin/bash
Kiểm tra file echo –n "Enter the name: "
read f
-b filename Block special file
if test –f $f
-c filename Character special file
then
-d filename Directory existence
echo "$f is a fi le"
-f filename Regular file existence and not a directory
else
-g filename Set-group-ID is set
if test –d $f
-p filename File is a named pipe
then
-r filename File is readable
echo "$f is a directory"
-s filename File is nonzero size
else
-u filename Set-user-ID bit is set
echo "$f is something else"
-w filename File is writable
fi
-x filename File is executable
fi
26
Nguyen Quoc Tuan - Unix Programming
Shell Programming
CÁC PHÉP TOÁN SHELL
Ví dụ:
$ chmod 755 ctest
#!/bin/bsh $ ./ctest dsach
#Script ctest dsach is a regular file.
if [[ ! -e $1 ]]; then $ ./ctest accounts
print "file $1 does not exist." accounts is a directory
elif [[ -d $1 ]]; then $ ./ctest course.lst
print "$1 is a directory " file course.lst does not exist.
elif [[ -f $1 ]]; then
print "$1 is a regular file."
else
print "$1 is a special type of file."
fi
27
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
28
29
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ (tiếp)
elif [ Sage -ge 13 -a Sage -It 20 ]
then
echo “You without a cause"
elif [ Sage -ge 20 -a Sage -It 30 ] $ ./vui
then How old are you? 200
echo "You got the world by the tail!!" Welcome to our planet!
elif [ Sage -ge 30 -a Sage -It 40] $ ./vui
then How old are you? 13
echo "Thirty something..” You without a cause
else $ ./vui
echo "Sorry I asked" How old are you? 55
fi Sorry I asked
30
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL # Script fn
Ví dụ 2 name = qtuan
#!/bin/sh if grep "Sname“databasefile > /dev/null 2>&1
file=./testing then
if [ -d $file ] :
then else
echo "Sfile is a directory" echo "$1 not found in databasefile"
elif [ -f Sfile ] exit 1
then fi
if [ -r Sfile -a -w Sfile -a -x Sfile ]
then # nested if command
echo "You have read, write, and execute permission on Sfile.“
fi
else
echo "Sfile is neither a file nor a directory."
fi
31
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Lệnh case
- Lệnh rẽ nhánh nhiều đường được sử dụng thay thế
Khuôn dang:
cho lệnh if/elif.
case variable in
- Giá trị của biến case so khớp với valuel, value2, v.v.,
valuel)
cho đến khi tìm thấy khớp.
commancKs)
- Khi một giá trị khớp với biến trường hợp, các lệnh
;;
theo sau giá trị được thực thi cho đến khi đạt đến
value2)
dấu chấm phẩy kép. Sau đó, việc thực thi bắt đầu sau
comniand(s)
từ esac (viết hoa chữ thường).
;;
- Nếu biến trường hợp không khớp, chương trình sẽ *) command(s)
thực hiện các lệnh sau dấu *), giá trị mặc định, cho ;;
đến khi ;; hoặc esac đạt được. esac
32
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Lệnh case #!/bin/sh
# Scriptname: colors
echo -n "Which color do you like?"
read color
case “$color" in
[Bb]l??)
echo I feel Scolor
echo The sky is Scolor ; ;
[Gg]ree*)
echo Scolor is for trees echo Scolor is for seasick ; ;
red | orange) # The vertical bar means "OR"
echo Scolor is very warm! ; ;
8 *)
echo No such color as Scolor ; ;
esac
33
Nguyen Quoc Tuan - Unix Programming echo "Out of case"
Shell Programming
LỆNH SHELL (The .profile file)
Lệnh case echo "Select a terminal type: "
cat « ENDIT
1) vt 120
2) wyse50
3) sun
ENDIT
read choice
case "Schoice" in
1) TERM=vtl20
export TERM ; ;
2) TERM=wyse50
export TERM ; ;
3) TERM=sun
export TERM ; ;
esac
Nguyen Quoc Tuan - Unix Programming
echo "TERM is STERM." 34
Shell Programming
LỆNH SHELL
Lệnh for
- Thực hiện các lệnh một số lần hữu hạn trên một
danh sách các mục.
- Theo sau lệnh for là một biến do người dùng xác
Khuôn dạng:
định, từ khóa trong và danh sách các từ.
+ Lần đầu tiên trong vòng lặp, từ đầu tiên từ danh for variable in wordjist
sách từ được gán cho biến, sau đó được chuyển ra do
khỏi danh sách. Khi từ được gán cho biến, phần nội coinniand(s)
dung của vòng lặp được nhập và các lệnh giữa từ done
khóa do và done được thực thi.
+ Lần tiếp theo trong vòng lặp, từ thứ hai được gán
cho biến, v.v.
35
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL (The Command Line)
$ cat mylist
Lệnh for
Cuong
(The Script) Chien
#!/bin/sh Binh
# Scriptname: forloop Thông
for pal in Cuong Chien Binh Thông
(The Script)
do
#!/bin/sh
echo "Hi $pal"
# Scriptname: mailer
done
for person in `cat mylist`
echo "Out of loop"
do
mail Sperson < letter
echo Sperson was sent a letter.
done
echo "The letter has been sent”
36
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ for
(The Script)
#!/bin/sh
# Scriptname: backup
# Purpose: Create backup files
dir=/home/qtuan/tam
for file in memo[l-5]
do (The Output)
if [ -f Sfile ] memol is backed up in /home/qtuan/tam
then memo2 is backed up in /home/jqtuan/tam
cp Sfile $dir/$file.bak memo3 is backed up in /home/qtuan/tam
echo "Sfile is backed up in $dir" memo4 is backed up in /home/qtuan/tam
fi memoS is backed up in /home/qtuan/tam
done
37
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Lệnh while
- Lệnh while đánh giá lệnh ngay sau nó và nếu nó
trạng thái 0 là thoát ,
- Các lệnh trong phần thân của while (lệnh giữa do
Khuôn dạng:
và done) được thực thi. Khi đạt đến từ khóa done,
quyền điều khiển được đưa trở lại đầu vòng lặp và while command
lệnh while sẽ kiểm tra lại trạng thái thoát của lệnh. do
Cho đến khi trạng thái thoát của lệnh được đánh giá coinniand(s)
bởi while trở thành khác không, vòng lặp tiếp tục. done
38
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ while
(The Script)
#!/bin/sh /
# Scriptname: num
num=0 # Initialize num
while [ Snum -It 10 ] # num with test command
do
echo -n Snum
num=, expr Snum + 1' # Increment num done
echo "\n After loop exits, continue running here"
(The Output)
0123456789
After loop exits, continue running here
39
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ while
(The Script)
#!/bin/sh
# Scriptname: quiz
echo "Who was the chief defense lawyer in the OJ case?"
read answer
(The Output)
while [ "Sanswer" != “Nam" ]
$ quiz
do
Who was the chief defense lawyer in the OJ case? Binh
echo "Wrong try again!"
Wrong try again!
read answer
Who was the chief defense lawyer in the OJ case? Chau
done
Wrong try again!
echo You got it!
Who was the chief defense lawyer in the OJ case? Nam
You got it!
41
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Lệnh nntil
- Được sử dụng giống như lệnh while, nhưng chỉ
thực hiện các câu lệnh lặp nếu lệnh sau until là fail;
nghĩa là,
- Nếu lệnh sau until trả về trạng thái là nonzero.
Khuôn dạng
Sau khi các lệnh thực hiện đạt đến từ khóa done,
quyền điều khiển được đưa trở lại đầu vòng lặp until command
và lệnh until kiểm tra lại trạng thái của lệnh tiếp do
theo lần nữa. command(s)
- Cho đến khi trạng thái của lệnh sau until được done
đánh giá trở thành 0, sau khi các lệnh thực hiện
đạt đến từ khóa done vòng lặp sẽ thoát ra
42
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ until
(The Script)
#!/bin/sh
until who | grep qtuan
do
sleep 5
done
talk qtuan@vnu.edu.vn
43
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL (The Script)
#!/bin/sh
Ví dụ until # Scriptname: hour
hour=1
(The Output) until [ $hour -gt 24 ]
$ hour do
Good morning! case "Shour" in
Good morning! [0-9] |1[0-1]) echo "Good morning!“
….. ;;
Lunch time. 12) echo "Lunch time.“
…… ;;
Siesta time. [3-7]) echo "Siesta time."
….. ;;
Good night. *) echo "Good night."
…… ;;
esac
hour= `expr Shour + 1` 44
Nguyen Quoc Tuan - Unix Programming
done
Shell Programming
LỆNH SHELL
Lệnh Break
- Được sử dụng để buộc thoát ngay lập tức từ một
vòng lặp, (không phải từ một chương trình.
- Sau khi lệnh break được thực hiện, điều khiển bắt
đầu sau từ khóa done.
- Lệnh break gây ra một lối ra khỏi vòng lặp trong cùng,
vì vậy nếu có nhiều vòng lặp lồng nhau, lệnh break sẽ
lấy một số làm đối số, cho phép thoát ra khỏi một
vòng lặp cụ thể bên ngoài.
Khuôn dạng
break [n]
45
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ break
#!/bin/sh
while true;
do
echo Are you ready to move on\?
read answer
if [ "Sanswer" = Y -o "Sanswer" = y ]
then
break
else
commands...
fi
done
print "Here we are"
46
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Lệnh continue
- Trả về quyền điều khiển ở đầu vòng lặp,
- Nếu một điều kiện nào đó trở thành true, tất cả các lệnh bên
dưới tiếp tục sẽ bị bỏ qua.
- Nếu lồng trong một số vòng lặp, lệnh continue trả về điều
khiển cho vòng lặp trong cùng.
- Nếu có một số của nó, thì điều khiển có thể được bắt đầu ở
đầu bất kỳ vòng lặp nào.
Khuôn dạng
continue [n]
47
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
50
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ Hàm
- Tên của hàm là dir. Các dấu ngoặc đơn trống là cú pháp cần thiết để
đặt tên cho hàm nhưng không có mục đích nào khác.
- Các lệnh trong dấu ngoặc nhọn ({ } ) sẽ được thực hiện khi nhập dir.
- Mục đích của hàm là chỉ liệt kê các thư mục con bên dưới thư mục làm
việc hiện tại.
- Các khoảng trắng bao quanh dấu ngoặc nhọn là bắt buộc.
51
Nguyen Quoc Tuan - Unix Programming
Shell Programming
LỆNH SHELL
Ví dụ Hàm
(Using the return command - The Script)
#!/bin/sh
# Scriptname: do_increment
increment () {
sum= `expr $1 + 1’
return $sum # Return the value of sum to the script.
}
echo -n "The sum is "
(The Output) increment 5 # Call function increment; pass 5 as a parameter.
4,6 The sum is 6
# 5 becomes $1 for the increment function.
7 6
echo S? # The return value is stored in $?
echo $sum # The variable "sum" is known to the function,
# and is also known to the main script.
52
Nguyen Quoc Tuan - Unix Programming
Thanks
53