Hàm và cách truy n thams

Một phần của tài liệu Lập trình trong môi trường shell unixlinux (Trang 33 - 35)

Shell không có cách khai báo tham s cho hàm nh cách c a C, Pascal hay các ngôn ng l p trình thông th ng khác. Vi c truy n tham s cho hàm t ng t nh truy n tham s trên dùng l nh. Ví d đ truy n tham s cho foo(), ta g i hàm nh sau

foo "paraml", "param2", param3 . . .

V y làm cách nào hàm nh n và l y v đ c n i dung đ i s truy n cho nó? Bên trong hàm, ta g i các bi n môi tr ng $*, $1, $2 ... chúng chính là các đ i s truy n vào khi hàm đ c g i. L u ý, n i dung c a $*, $1, $2 do bi n môi tr ng n m gi s đ c shell t m th i c t đi. M t khi hàm ch m d t, các giá tr c s đ c khôi ph c l i.

M c dù v y, có m t s shell c trên UNIX không ph c h i tham s môi tr ng v giá tr ban đ u khi hàm k t thúc. N u mu n b o đ m, hãy nên t l u tr các bi n tham s

34

môi tr ng tr c tri u g i hàm. Tuy nhiên các shell m i và nh t là n u ch mu n h ng v Linux, thì không c n lo l ng đi u này.

D i đây là m t ví d cho th y cách g i và nh n tr tr v c a hàm đ ng th i x lý đ i s truy n cho hàm đ c g i.

Ví d 3-18 get_name.sh

#!/bin/sh yes_or_no() {

echo "In function parameters are $*" echo "Param 1 $1 and Param2 $2" while true

do

echo -n "Enter yes or no" read x

case "$x" in

y | yes ) return 0;; n | no ) return 1;; n | no ) return 1;;

* ) echo "Answer yes or no" esac

done }

echo "Original parameters are $*" if yes_or_no "Is your name” “ $1?" then

echo "Hi $1" elif

echo "Never mind" fi

exit 0

K t qu k t xu t khi g i l nh nh sau: $,/get_name.sh HoaBinh SV

Original parameters are HoaBinh SV

In function parameters are Is your name HoaBinh Param 1 Is your name param 2 HoaBinh

Is your name HoaBinh ? Enter yes or no : yes Hi HoaBinh, nice name

Cách làm làm vi c: Hàm yes_or_no( ) đ c đnh ngh a khi script th c thi nh ng ch a đ c g i. Trong m nh đ if, hàm yes_or_no đ c s d ng v i tham s truy n cho ham là n i dung c a bi n môi tr ng th nh t ( ví d trên $1 đ c thay th b ng HoaBinh) và chu i “Is your name”. Bên trong hàm n i dung c a $1 và $2 đ c in ra (Hãy đ ý là chúng khác v i giá tr $1, $2 c a môi tr ng shell ban đ u). Hàm yes_or_no xây d ng c u trúc case tùy theo l a ch n c a ng i dùng mà tr v tr 0 hay 1. Khi ng i dùng ch n yes, hàm trá v giá tr 0 (true). L nh bên trong if đ c g i đ in ra chu i "nice

35 name".

Một phần của tài liệu Lập trình trong môi trường shell unixlinux (Trang 33 - 35)