shell tip (for¹®, if¹®) |
±Û ¾´ ÀÌ |
linux |
³¯ Â¥ |
2003³â 04¿ù 03ÀÏ 10½Ã 46ºÐ 38ÃÊ |
º» ¹® |
shell scriptÀ» ÀÛ¼ºÇÏ´Ù º¸¸é Á¶°Ç½ÄÀ» »ç¿ëÇÏ°Ô µÈ´Ù.
Á¶°Ç½ÄÀº if¹®, while¹®¿¡¼ »ç¿ëµÇ¾î Áø´Ù.
´Ù¸¥ ÇÁ·Î±×·¥ ¾ð¾î¸¦ º¸¸é = > < >= <= °°Àº ºñ±³ ¿¬»êÀÚ°¡ ÀÖ¾î¼
ºñ±³ ¿¬»êÀ» ¼öÇàÇÏ´Â ¹®ÀåÀÌ Á¶°Ç½ÄÀÌ µÈ´Ù.
±×·¯³ª shell script¿¡¼´Â Á¶°Ç½ÄÀÇ Àǹ̰¡ Á¶±Ý ´Ù¸£´Ù. shell scrip¿¡¼
Á¶°Ç½ÄÀ̶ó°í ÇÏ´Â ºÎºÐÀº test ¶ó´Â À̸§ÀÇ ½ÇÇà ÆÄÀÏ¿¡ ÀÇÇÏ¿© ±× ÆǴܵǾî
Áø´Ù. shell scriptÀÇ Á¶°Ç½Ä¿¡¼ »ç¿ë°¡´ÉÇÑ Á¶°ÇµéÀÌ ¾î¶²°ÍµéÀÌ ÀÖ´ÂÁö
¾Ë·Á¸é test¶ó´Â ¸í·ÉÀÇ »ç¿ë¹ýÀ» ¾Ë¾Æ¾ß ÇÑ´Ù.
(* man testÇϸé main if¿Í °°Àº manualÀÌ ³ª¿Â´Ù. *)
1.½Ç½À 1
#> test 3 = 4
#> echo $?
1 # FALSE
#> test 3 = 3
#> echo $?
0 # TRUE
#> test 3 < 4
cannt open 4 # < ¿Í > ´Â redirect ±âÈ£ÀÓÀ¸·Î
# ±×³É »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.
#> test 3 \< 4 # \(¹é½½·¯½Ã)¸¦ ¾Õ¿¡ ºÙ¿©¼ »ç¿ëÇØ¾ß ÇÑ´Ù.
#> echo $?
0 # TRUE
2. test ¿¡¼ »ç¿ëµÇ´Â ºñ±³ ¿¬»ê.
* ¹®ÀÚ¿ ºñ±³ ¿¬»ê
s1 > s2 Å©´Ù.
s1 < s2 ÀÛ´Ù.
s1 >= s2 Å©°Å³ª °°´Ù.
s1 <= s2 À۰ųª °°´Ù.
s1 = s2 °°´Ù.
s1 != s2 ´Ù¸£´Ù.
-n string stringÀÇ ±æÀÌ°¡ 0º¸´Ù Å©¸é TRUE
ȯ°æº¯¼ö°¡ Á¤ÀǵǾî ÀÖ´ÂÁö È®ÀÎÇϴµ¥ »ç¿ë.
* Á¤¼ö ¿¬»ê.
-eq
-ne
-gt
-ge
-lt
-le
* ºÎÁ¤ ¿¬»ê
! condition
3. ½Ç½À 2 ¹®ÀÚ¿ ¿¬»ê°ú Á¤¼ö ¿¬»êÀÇ Â÷ÀÌÁ¡
#> test 11 < 2; echo $? # ¹®ÀÚ¿·Î ºñ±³ÇÑ´Ù.
0 # TRUE
#> test 11 -le 2; echo $? # Á¤¼ö·Î ºñ±³ÇÑ´Ù.
1 # FALSE
4. test ¿¡¼ »ç¿ëµÇ´Â ÆÄÀÏ °ü·Ã ¿¬»ê.
-a filename # fileÀÌ Á¸ÀçÇϸé TRUE
-d filename # fileÀÌ µð·ºÅ丮À̸é TRUE
-e filename # fileÀÌ Á¸ÀçÇϸé TRUE, -a¿Í µ¿ÀÏ
-r filename # fileÀ» ÀÐÀ» ¼ö ÀÖÀ¸¸é TRUE
-w filename # file¿¡ ¾²±â°¡ °¡´ÉÇϸé TRUE
-x filename # fileÀ» ½ÇÇàÇÒ ¼ö ÀÖÀ¸¸é TRUE
f1 -nt f2 # f1 fileÀÌ Á¸ÀçÇÏ°í f2º¸´Ù »õ·Î¿î
# ÆÄÀÏÀ̸é TRUE
À̹ۿ¡µµ ¿©·¯°¡Áö ´Ù¾çÇÑ ±â´ÉµéÀÌ ÀÖ´Ù. man test¸¦ »ç¿ëÇÏ¿©
Ãß°¡ÀûÀÎ ¸í·ÉÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
5. ½Ç½À 3 ÆÄÀÏÀÇ Ã³¸®
* a.sh¿¡ ´ÙÀ½ÀÇ ³»¿ëÀ» Æ÷ÇÔÇÑ´Ù.
if [ -w $1 ] # ÆÄÀÏ¿¡ ¾²±â°¡ °¡´ÉÇÑÁö È®ÀÎÇÏ´Â
then # shell script
echo can write to $1
else
echo cannot write to $1
fi
#> ksh a.sh /etc/passwd
cannot write to /etc/passwd
if¹® »ç¿ë
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
1. if¹® ±¸¹®
if condition
then
action
fi
if condition
then
true_action
else
false_action
fi
if condition
then
action_1
elif condition # else if ¹®Àå.
action_2
else
action_3
fi
2. if¹®¿¡¼ Á¶°Ç½Ä »ç¿ëÇϱâ
±×³É if¹®Àº Á¶°Ç½ÄÀ» ó¸®ÇÒ ´É·ÂÀÌ ¾ø´Ù. ´ÜÁö test¶ó´Â ÇÁ·Î±×·¥À»
È£ÃâÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» °¡Áö°í ÀÖ´Ù.
if ¹®ÀÇ Á¶°Ç½Ä ºÎºÐ¿¡ ´ë°ýÈ£±âÈ£ ([. ]) ¾È¿¡ test ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ
¼ö ÀÖ´Â Á¶°Ç½ÄÀ» ±×´ë·Î ÀÔ·ÂÇÏ¸é µÈ´Ù.
#> if [ -e /etc/passwd ] # ÁÖÀÇ [¿Í ] ±âÈ£¿Í Á¶°Ç½Ä »çÀÌ¿¡ ÇÑ°³
# ÀÌ»óÀÇ °ø¹éÀÌ ÀÖ¾î¾ß ÇÑ´Ù.
#> if `test -e /etc/passwd` # if¹®¿¡ Á¶°Ç½ÄÀ» »ç¿ëÇÏ´Â ´Ù¸¥ ¹æ¹ý
# `´Â ¿ªµû¿ÈÇ¥ÀÓ.
# ¿ªµû¿ÈÇ¥ »çÀÌ¿¡ ´Ù¸¥ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿©
# Á¶°Ç½ÄÀ» ±¸ÇöÇÒ ¼ö ÀÖ´Ù.
for¹® »ç¿ë
¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡
shell scripÀÇ for¹®Àº ÇÁ·Î±×·¥ ¾ð¾îÀÇ for¹®°ú ´Ù¸£´Ù. ÇÁ·Î±×·¥¾ð¾îÀÇ
for¹®Àº ÇÑ°³ ¼ýÀÚº¯¼öÀÇ °ªÀ» Áõ°¡½ÃÅ°¸é¼ ¹Ýº¹À» ¼öÇàÇϴµ¥
shell scriptÀÇ for¹®ÀÇ ¹®ÀÚ¿ ¸ñ·ÏÀ» ÁÖ°í ±× ¸ñ·Ï¿¡ Æ÷ÇÔµÈ ¹®ÀÚ¿À»À»
ÇÑ°³ÀÇ È¯°æº¯¼ö¿¡ ³Ö°í, ¸ñ·Ï¿¡ Æ÷ÇÔµÈ ¹®ÀÚ¿ÀÇ ¼ö¸¸Å ¹Ýº¹ÇÑ´Ù.
1. for¹® ±¸¹®
for word in word_list # word : ¹Ýº¹¿¡ »ç¿ëµÉ ȯ°æº¯¼ö
do # wordlist : ¹Ýº¹µÇ´Â ¹®ÀÚ¿µéÀÇ ¸ñ·Ï
actions # ¹Ýº¹µÉ ¸í·Éµé, ¿©·¯ÁÙ
done
2. ½Ç½À 1
¾Æ·¡ ¿¹Á¦¿¡¼ NÀº for¹® ³»¿¡¼ ¹Ýº¹µÉ ¶§¸¶´Ù ´Ù¸¥ £À? °¡Áö°Ô µÇ´Â
ȯ°æº¯¼öÀÌ´Ù. for ¹®³»¿¡¼´Â NÀ» $NÀ¸·Î »ç¿ëÇÏ°í ÀÖ´Ù.
#> for N in aa bb cc # ȸ鿡 in µÚ¿¡ ÀÖ´Â ¹®ÀÚ¿ aa,bb,cc°¡
> do # Â÷·Ê·Î Ãâ·ÂµÈ´Ù.
> echo $N
> done
3. ½Ç½À 2
¾Æ·¡ ¿¹Á¦´Â in ´ÙÀ½¿¡ ls¿¡¼ ó·³ ÆÄÀϸíÀÇ ÀϺθ¦ ÁöÁ¤ÇÑ´Ù.
in ´ÙÀ½¿¡ ÆÄÀϸíÀ» ÀϺθ¦ ÁöÁ¤Çϸé ls¿¡¼ Ãâ·ÂµÉ ÆÄÀϸñ·ÏÀÌ wordlist·Î
»ç¿ëµÇ¾îÁø´Ù.
ÀÌ ¿¹Á¦´Â ƯÁ¤ÇÑ ÆÄÀϵé(È®Àå¸íÀÌ .cÀΰ͵î) ¸¸ ã¾Æ¼ Ưº°ÇÑ ÀÏÀ» ÇÏ´Â
°æ¿ì¿¡ À¯¿ëÇÏ´Ù.
#> for N in /etc/*tmp
> do
> echo FILES $N
> done
¾Æ·¡ÀÇ ¿¹Á¦´Â *.txt¸¦ ¸ðµÎ ã¾Æ¼ ȸ鿡 Ãâ·ÂÇÏ´Â ¿¹ÀÌ´Ù.
#> for N in *.txt
> do
> echo FILENAME : $N
> cat $N
> done
4. ½Ç½À 3
¾Æ·¡ÀÇ ¿¹Á¦´Â in ´ÙÀ½¿¡ ¿ªµû¿ÈÇ¥¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ ÇÁ·Î±×·¥À» ¼öÇàÇÑ ÈÄ
±× °á°ú¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù.
find·Î ÇÏÀ§ µð·ºÅ丮¸¦ Æ÷ÇÔÇÏ¿© È®Àå¸íÀÌ *.txtÀÎ ÆÄÀÏÀ» ã¾Æ¼ ȸ鿡
Ãâ·ÂÇÑ´Ù. ½Ç½À 3¿Í ºñ½ÁÇÏÁö¸¸ ÇÏÀ§ µð·ºÅ丮¸¦ Æ÷ÇÔÇÏ´Â °ÍÀÌ ´Ù¸£´Ù.
#> for N in `find . -name *.c -print` # `´Â ¿ª½½·¯½ÃÀÓ.
> do
> echo FILENAME : $N
> cat $N
> done
|
|
|
|