L nh expr

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

L nh expr tính các đ i đ u vào nh m t bi u th c. Th ng exprđ c dùng tr ng vi c tính toán các k t q a toán h c khi đ i giá tr t chu i sang s . Ví d :

x= “12" x= `expr $x + 1`

K t qu x=13. L u ý, c p d u ‘ ‘ b c bi u th c expr không ph i là d u nháy đ n (Ký t này là phím n m d i phím ESC và bên trái phím 1, chung v i phím ~. Các toán h ng và toán t ph i cách nhau b ng kho ng tr ng. đây $x và 1 cách ký t + kho ng tr ng. N u đ chúng sát nhau, khi di n d ch shell s báo l i bi u th c.

D i đây là m t s bi u th c c l ng mà expr cho phép:

Bi u th c Ý ngh a axprl | expr2 K t qu là expr1 n u expr1 khác 0 ng c l i là

expr2

axprl & expr2 0 n u m t trong hai bi u th c là zero ng c l i k t qu là expr1

exprl = expr2 B ng

exprl >expr2 L n h n

exprl >= expr2 L n h n hay b ng

exprl < expr2 Bé h n

exprl <= expr2 Bé h n hay b ng exprl != expr2 không b ng

41 exprl - expr2 Tr

exprl * expr2 Nhân

exprl / expr2 Chia

exprl % expr2 Modulo (l y s d )

Trong các shell m i sau này l nh expr đ c thay th b ng cú pháp $ ( (. . . ) ) hi u qu h n, và s đ c p cú pháp này ph n sau.

3.6.10. printf

L nh printf c a shell t ng t printf c a th vi n C. M c dù v y, c b n printf

c a shell có m t s h n ch sau: không h tr đnh d ng s có d u ch m đ ng (float) b i vì t t c các tính toán c a shell đ u d a trên s nguyên. D u s \ dùng ch đnh các hi n th đ c bi t trong chu i (xem b ng d i). D u % dùng đnh d ng s và k t xu t chu i. D i đây là danh sách các ký t đ c bi t có th dùng v i d u \, chúng đ c là chu i thoát.

Chu i thoát (escape sequence) ý ngh a

\\ Cho phép hi n th ký t \ trong chu i

\a Phát li ng chuông (beep) \b Xóa backspace \f y dòng \n Sang dòng m i \r V đ u dòng \t C n tab ngang \v c n tab d c \ooo Kí t đ n v i mã là ooo nh d ng s và chu i b ng ký t % bao g m Kí t đnh d ng Ý ngh a d S nguyên c Ký t s chu i % hi n th ký hi u % D i đây là m t s ví d v printf

$ printf "Your name %s. It is nice to meet you \n" NV An Your name NV An. It's nice to meet you .

$ printf “%s %d\t %s” “Hi There" “15” "people" Hi There 15 people

Các tham s c a l nh printf cách nhau b ng kho ng tr ng. Chính vì v y nên dùng d u “ “ đ b c các tham s chu i. L nh printf th ng đ c dùng thay th echo, m c đích đ in chu i không sang dòng m i. printf ch sang dòng m i khi thêm vào chu i thoát "\n".

42

3.6.11 return

L nh return dùng đ tr v giá tr c a hàm. L nh return không tham s s tr v mã l i c a l nh v a th c hi n sau cùng.

3.6.12 set

Tr c h t, l nh set dùng đ áp đ t giá tr cho các tham s môi tr ng nh $1, $2, $3 ... L nh set s lo i b nh ng kho ng tr ng không c n thi t và đ t n i dung c a chu i truy n cho nó vào các bi n tham s . Ví d : (adsbygoogle = window.adsbygoogle || []).push({});

$ set This is parameter $echo $ 1

This

$echo $3

parameter

Tho t nhìn l nh set không m y ích l i nh ng nó s vô cùng m nh m n u b n bi t cách s d ng.

Ví d l nh date c a linux phát sinh chu i sau: $da te

Fri March 13 16:06: 6 EST 2001

N u ch mu n l y v ngày, tháng ho c n m thì sao? set s th c hi n đi u này theo ví d sau:

Ví du 3-27 set_use.sh

#!bin/sh

echo Current date is $(date) set $(date)

echo The month is $2 echo The year is $6 exit 0

K t qu k t xu t

$./set_use.sh

Current date Fri March 13 16:06:16 EST 2001 The month is March

The year is 2001

L nh set còn đ c dùng đ đ t các thông s thi t l p cho shell. Ví d nh khi nói v l nh export, ta đã làm quen v i set -a ho c set –allexport, cho phép shell khai báo bi n toàn c c cho m t bi n trong script. Khi tìm hi u và cách dò l i c a shell ph n sau, s có thông s đ y đ h n v các thi t l p c a set.

43

v c a m t l nh dùng làm danh sách bi n. Chúng s đ c nêu chi ti t h n m c sau.

3.6.13. shift

L nh shift di chuy n n i dung t t c các tham s môi tr ng $1, $2 ... xu ng m t v trí. B i vì h u nh ta ch có t i đa 9 tham s t $1. $2. … $9, cho nên n u các shell c n nh n t 10 tham s tr lên thì sao? L nh shift dùng đ gi i quy t v n đ này.

N u g i $10 shell th ng hi u là $1 và '0'.

Ví d d i đây s in ra n i dung c a t t cá các tham s truy n cho script. S tham s có th l n h n 10. Ví d 3-28 using_shift.sh #!/bin/sh while [ "$1" != "" ]; do echo "$1" shift done exit 0 K t qu k t xu t

$./using_shift.sh here is a long parameter with 1 2 3 4 5 here is a long parameter . . . 5 6 Cách ch ng trình làm vi c:. Ch ng trình ti p nh n và in ra tham s dòng l nh ch b ng bi n $1. M i l n nh n đ c n i dung c a bi n, ta d ch chuy n các tham s v trái m t v trí, b ng cách này bi n $2 chuy n cho $1, $3 chuy n cho $2 ... vòng l p while ki m tra cho đ n khi nào $1 b ng r ng, có ngh a là không còn tham s nào đ nh n n a thì d ng l i.

3.6.14. trap

L nh trap dùng đ b y m t tín hi u (signal) do h th ng g i đ n cho shell trong quá trình th c thi script. Tín hi u th ng là m t thông đi p c a h th ng g i đ n ch ng trình yêu c u hay thông báo v công vi c nào đó mà h th ng s th c hi n. Ví d INT th ng đ c g i khi ng i dùng nh n Ctrl-C đ ng t ch ng trình. TERM là tín hi u khi h th ng shutdown ... Chúng ta s đi sâu vào c ch c a vi c g i/nh n và x lý tín hi u

44 gi a ch ng trình và h th ng trong ph n sau.

V i trap trong script, ta đón và x lí m t s tín hi u th ng x y ra sau đây:

Tín hi u (signal) Ý ngh a

HUP (1) Hang-up. nh n đ c khi ng i dùng logout. (adsbygoogle = window.adsbygoogle || []).push({});

INT ( 2 ) Interrupt. Tín hi u ng t đ c g i khi ng i dùng nh n Ctrl-C.

QUIT ( 3 ) Tín hi u thoát, nh n khi ng i dùng nh n Ctrl-C ABRT ( 6 ) Abort - Tín hi u ch m d t, nh n khi đ t th i gian

quá h n (Timeout)

ALRM (14) Alarm -Tín hi u thông báo đ c đùng x lý cho tình hu ng timeout

TERM (15) Terminate - Tín hi u nh n đ c khi h thông yêu c u shutdown.

Tín hi u là các h ng đ c đnh ngh a trong t p tin signal.h. s d ng các h ng này trong các ch ng trình C, b n có th dùng #include <signal.h>. Mu n bi t chi ti t h n, b n có th dùng ngay l nh trap -l nh sau

$ trap -l

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