L nh (th c thi)

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

L nh . dùng đ g i th c thi m t script trong shell hi n hành. i u này có v h i l , vì ch c n gõ tên script là script có th t th c thi mà không c n t i . , tuy v y nó có m t ý ngh a đ c bi t: thi hành và gi nguyên nh ng thay đ i v môi tr ng mà script tác đ ng (xem l i fork() và exec()).

Thông th ng, khi th c thi m t script, shell s b o l u l i toàn b bi n môi tr ng hi n hành và t o ra m t môi tr ng m i (hay shell ph - sub shel1) đ script ho t đ ng. M t khi script ch m d t b ng l nh exit, thì toàn b thông s môi tr ng c a shell hi n hành s đ c khôi ph c l i.

Cú pháp s d ng nh sau: . ./shell-script

Ví d sau s cho th y cách tác đ ng vào bi n môi tr ng hi n hành b ng l nh . .

Ví du 3-22: dot_command.sh

#!/bin/sh

echo “Inside script”

PATH=/mypath/bin: /usr/local echo $PATH

echo “Script end”

Tr c khi ch y, hãy in ra n i dung c a bi n PATH trong shell hi n hành. Ti p đ n ch y

do_command.sh b ng l nh . và in l i k t qu c a PATH nh sau:

$echo $PATH /usr/bin: usr/lib $. /dot_command.sh #Không dùng . Inside script /mypath/bin : /usr/local Script end $echo $PATH

38 Bây gi ch y l nh v i . $ . ./dot_command.sh Inside script /mypath/bin: /usr/local Script end $echo $PATH

/mypath/bin: /usr/1ocal #B o l u thay đ i do script th c hi n

3.6.5. eval

L nh eval cho phép c l ng m t bi u th c ch a bi n. Cách d hi u nh t là xem

eval làm vi c trong ví d sau: foo=10

x=foo y= ‘$’ $x

echo $y

o n l nh trên in ra k t quá là chu i $foo. Bây gi n u b n s d ng eval

foo=10 x=foo

eval y= ‘$’ $x

echo $y

K t qu in ra s là 10. Lý do y = '$' $x s đ c di n d ch thành chu i y=$x L nh eval ti p đ n s c l ng y=$x nh là bi u th c gán. K t qu là y mang giá tr c a n i dung bi n x (10). eval r t h u d ng, cho phép sinh ra các đo n l nh th c thi đ ng ngay trong quá trình script thi hành.

3.6.6. exec

L nh exec dùng đ g i m t l nh bên ngoài khác. Th ng exec g i m t shell ph khác v i shell mà script đang th c thi.

Ví d 3-23: exec_demo.sh

#! /bin/sh

echo "Try to execute mc program" exec mc

echo "you can not see this message !"

o n script in ra chu i thông báo sau đó tri u g i mc. exec s ch cho ch ng trình g i th c thi xong m i ch m d t script hi n hành. (adsbygoogle = window.adsbygoogle || []).push({});

M c đinh exec s tri u g i exit khi k t thúc l nh. Chính vì v y, n u g i exec ngay t dòng l nh, sau khi l nh th c hi n xong, đi u khi n s thoát ra kh i shell ph , quay tr v shell g c, là màn hình đ ng nh p.

39

3.6.7. exit n

L nh exit s thoát kh i shell nào g i nó và tr v mã tr ng thái l i n. Tr c gi ta v n g i exit 0 bên trong shell ph . N u g i exit ngay t dòng l nh, nó s khi n thoát kh i shell chính tr v màn hình đ ng nh p luôn (đây c ng là cách th ng dùng đ thoát kh i user hi n hành, đ ng nh p làm vi c d i tên user khác).

exit r t h u d ng trong các script, nó tr v mã l i cho bi t script đ c th c thi thành công hay không. Mã l i 0 có ngh a là thành công. Các giá tr t 1-125 script tùy nghi s d ng cho nhi u m c đích khác nhau. Các giá tr còn l i đ c dành cho m c đích riêng. C th là:

126 file không th th c thi 127 L nh không tìm th y

L n h n 128 ã nh n đ c tín hi u (signal) phát sinh

S d ng 0 là giá tr thành công có th gây l m l n cho m t s l p trình viên C ( đó 0 đ c coi là false còn khác 0 là true). Tuy nhiên b ng cách này, u đi m là có th t n d ng các giá tr khác 0 làm mã qui đnh l i, không c n ph i dùng thêm bi n toàn c c đ l u gi mã l i tr v .

Ví d đ n gi n v exit d i đay ki m tra xem t p .profile có t n t i hay không,

n u có tr l i 0, còn không tr v 1. Ví d 3-24 test_exits.sh #!/bin/sh if [ -f .profile ] ; then exit 0 fi exit 1

N u mu n, có th đ i l nh if sang c u trúc danh sách l nh && hay || nh sau: [ -f .profile ] && exit 0 || exit 1

3.6.8. export

Khi b t đ u th c thi m t shell, các bi n môi tr ng đ u đ c l u l i. Khi có khai báo và s d ng bi n trong m t script, nó ch có giá tr đ i v i shell ph g i script đó. bi n có th th y đ c t t c các script trong shelll ph hay các script g i t shell khác, hãy dùng l nh export. L nh export có tác d ng nh khai báo bi n toàn c c. Ví d sau s cho th y cách s d ng export.

Ví d 3-25 export2.sh

#! /bin/sh

echo "Value : $foo” echo "Value : $bar"

40

#! /bin/sh

foo="This is foo"

export bar = “This is bar" Ch y l nh, xu t bi n bar ra $./export2.sh K t qu khi g i export1.sh là $./export1.sh

Value :

Value: This is bar

Dòng đ u cho k t qu bi n $foo r ng vì foo không đ c khai báo toàn c c t export1.sh, nên export2.sh không th y đ c bi n. Dòng th 2 cho k t qu là n i dung c a bi n $bar do b t đ c khai báo b ng export. Bi n bar tr nên toàn c c và các script khác nhìn th y

bar.

N u mu n t t c các bi n m c đnh là toàn c c trong t t c các script, có th g i l nh set –a hay set-allexport tr c khi thi t l p n i dung cho bi n.

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