Ngoài các l nh đi u khi n, shell còn cung c p cho các l nh n i t i (build-in) khác r t h u ích. Chúng đ c g i là l nh n i t i b i vì không th th y chúng hi n h u nh nh ng t p tin th c thi trong m t th m c nào đó trên h th ng t p. (Có th xem nh ng l nh này t ng t khái ni m l nh n i trú c a DOS). Trong quá trình l p trình shell, chúng s th ng xuyên đ c s d ng.
3.6.1. break
T ng t ngôn ng C, shell cung c p l nh break đ thoát kh i vòng l p for, while ho c until b t k đi u ki n thoát c a các l nh này có di n ra hay không.
Ví d 3-19: break.sh #!/bin/sh rm -rf fred* echo > fred1 echo > fred2 mkdir fred3 echo > fred4 for file in fred* do
if [ -d "$file" ]; then break;
fi done
echo first directory fred was $file exit 0
o n script trên dùng l nh for đ duy t toàn b tên c a t p tin và th m c hi n hành b t đ u b ng chu i fred. Khi phát hi n th m c đ u tiên trong danh shell các t p tin, s in ra tên th m c và dùng break r thoát kh i vòng l p (không c n duy t ti p các t p tin khác).
L nh break th ng ng t ngang logic c a ch ng trình , vì v y nên h n ch dùng
break. L nh break không có tham s cho phép thoát kh vòng l p hi n hành. N u đ t tham s cho l nh ví d , break 2, break 3 ch ng h n, có th thoát kh i nhi u vòng l p cùng m t lúc. Tuy nhiên chúng s làm cho ch ng trình khó theo dõi. T t nh t ta.nên dùng.break không tham s .
3.6.2 continue
L nh continue th ng đ c dùng bên trong vòng l p, continue yêu c u quay l i th c hi n b c l p k ti p mà không c n th c thi các kh i l nh còn l i.
36 Ví d 3-20 continue.sh #!/bin/sh rm -rf fred* echo > fred1 echo > fred2 mkdir fred3 echo > fred4 for file in fred* do
if [ -d "$file" ]; then continue
fi
echo file is $file done
exit 0
o n script trên dùng l nh for đ duy t toàn b tên c a t p tin và th m c hi n hành b t đ u b ng chu i fred. N u ki m tra tên t p tin là m t th m c, thì continue yêu c u quay l i duy t ti p file khác. Ng c l i l nh echo s in ra tên t p.
continue còn cho phép truy n tham s đ xác đnh s l n l p c n quay l i. Ví d : for x in 1 2 3 4 5 do echo before $x if [ $x = =2 ] ; then continue 2 fi echo after $x done K t qu before 1 after 1 before 2 before 5 after 5 3.6.3. L nh : (l nh r ng)
L nh : đ c g i là l nh r ng (null command). ôi lúc l nh này đ c đùng v i ý ngh a logic là true. Khi dùng l nh : th c thi nhanh h n vi c so sánh true.
M t s shell c còn s d ng l nh : v i ý ngh a chú thích m t dòng l nh. Tuy nhiên b t k khi nào có th , hãy nên dùng # thay cho chú thích b ng :.
Ví d : 3-21 colon.sh
37
rm -f fred
if [ -f fred ]; then :
else
echo file fred does not exist fi
exit 0
Trong đo n script trên, n u ki m tra fred t n t i thì không làm gì c , n u không ta s in ra thông báo l i.