5.4. Ư¼öÇÑ º¯¼ö ŸÀÔ

Áö¿ª º¯¼ö

Áö¿ª º¯¼ö´Â ÄÚµå ºí·°À̳ª ÇÔ¼ö¿¡¼­¸¸ ³ªÅ¸³³´Ï´Ù(ÇÔ¼ö¿¡¼­ÀÇ Áö¿ª º¯¼ö Âü°í).

ȯ°æ º¯¼ö

½©ÀÇ µ¿ÀÛ°ú »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â º¯¼ö

Âü°í: ¾ÆÁÖ ÀϹÝÀûÀÎ »óȲ¿¡¼­´Â °¢ ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÌ ÂüÁ¶ÇÒ Á¤º¸µéÀ» ´ã°í ÀÖ´Â º¯¼öµéÀÇ ±×·ìÀÎ "ȯ°æ"À̶õ °ÍÀ» °®°í ÀÖ½À´Ï´Ù. ÀÌ·± °üÁ¡¿¡¼­ º¸¸é, ½©µµ ´Ù¸¥ ÇÁ·Î¼¼½ºµé°ú ´Ù¸¦ ¹Ù ¾ø½À´Ï´Ù.

½©Àº ÀÚ½ÅÀÌ ½ÃÀÛµÉ ¶§¸¶´Ù ÀÚ½ÅÀÇ È¯°æ º¯¼ö¿¡ ´ëÀÀÇÏ´Â ½© º¯¼ö¸¦ ¸¸µé¾î ³À´Ï´Ù. ½© º¯¼ö¸¦ ¾÷µ¥ÀÌÆ®Çϰųª »õ·Ó°Ô Ãß°¡ÇÏ¸é ½©Àº ÀÚ½ÅÀÇ È¯°æ º¯¼ö¸¦ ¾÷µ¥ÀÌÆ® ½ÃÅ°°í ½©ÀÇ ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º(½©¿¡¼­ ½ÇÇà½ÃŲ ¸í·É¾îµé)´Â ±× ȯ°æÀ» ¹°·Á ¹Þ½À´Ï´Ù.

°æ°í

ȯ°æ¿ëÀ¸·Î ÇÒ´çµÈ °ø°£Àº Á¦ÇѵǾî ÀÖ½À´Ï´Ù. ȯ°æ º¯¼ö¸¦ ³Ê¹« ¸¹ÀÌ ¸¸µé°Å³ª ÇÑ È¯°æ º¯¼ö°¡ °ø°£À» Áö³ªÄ¡°Ô ¸¹ÀÌ »ç¿ëÇÑ´Ù¸é ¹®Á¦°¡ »ý±æ ¼ö ÀÖ½À´Ï´Ù.

bash$ eval "`seq 10000 | sed -e 's/.*/export var&=ZZZZZZZZZZZZZZ/'`"

bash$ du
bash: /usr/bin/du: Argument list too long
	          

(¸íÈ®ÇÑ ¼³¸íÀ» ÇØ ÁÖ°í À§ÀÇ ¿¹Á¦¸¦ Á¦°øÇØÁØ S. C. ¿¡°Ô °¨»ç)

¸¸¾à¿¡ ½ºÅ©¸³Æ®°¡ ȯ°æ º¯¼ö¸¦ ¼¼Æ®ÇÏ¸é ±× º¯¼ö´Â "export"µÇ¾î¾ß ÇÕ´Ï´Ù. Áï, ±× ½ºÅ©¸³Æ®¿¡ ÇØ´çÇϴ ȯ°æÀ¸·Î º¸°íµÇ¾î¾ß ÇÑ´Ù´Â ¶æÀÔ´Ï´Ù. export ¸í·É¾î°¡ ÀÌ ÀÏÀ» ÇØ ÁÝ´Ï´Ù.

Âü°í: ½ºÅ©¸³Æ®´Â º¯¼ö¸¦ ¿ÀÁ÷ ÀÚ½ÅÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô¸¸ export ÇÒ ¼ö ÀÖ½À´Ï´Ù. Áï, ÀÚ½ÅÀÌ ¸¸µé¾î³½ ¸í·É¾î³ª ÇÁ·Î¼¼½ºµé¸¸ Àû¿ëÀ» ¹Þ½À´Ï´Ù. ¸í·É¾îÁÙ¿¡¼­ ½ÇÇàµÈ ½ºÅ©¸³Æ®´Â ƯÁ¤ º¯¼ö¸¦ ¸í·É¾îÁ٠ȯ°æÀ¸·Î °Å²Ù·Î export ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀ» ¸¸µé¾î³½ ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô ƯÁ¤ º¯¼ö¸¦ °Å²Ù·Î export ÇÒ ¼ö ¾ø½À´Ï´Ù.

---

À§Ä¡ ¸Å°³º¯¼ö(positional parameter)

¸í·É¾îÁÙ¿¡¼­ ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ÀÎÀÚµé·Î $0, $1, $2, $3... ÀÌ·±½ÄÀ¸·Î Ç¥ÇöµÇ´Âµ¥ $0 Àº ½ºÅ©¸³Æ®ÀÇ À̸§ ±× ÀÚü¸¦ ³ªÅ¸³»°í $1 Àº ù¹ø° ÀÎÀÚ¸¦, $2 ´Â µÎ¹ø°¸¦, $3 Àº ¼¼¹ø°¸¦ ³ªÅ¸³»´Â ½ÄÀÔ´Ï´Ù. [1] $9 ´ÙÀ½ÀÇ ÀÎÀÚ´Â ${10}, ${11}, ${12} ó·³ Áß°ýÈ£·Î ¹­¾îÁà¾ß ÇÕ´Ï´Ù.

¿¹ 5-5. À§Ä¡ ¸Å°³º¯¼ö

#!/bin/bash

# ÃÖ¼ÒÇÑ 10 °³ÀÇ ¸Å°³º¯¼ö¸¦ Á༭ ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°¼¼¿ä. ¿¹¸¦ µé¸é,
# ./scriptname 1 2 3 4 5 6 7 8 9 10

echo

echo "½ºÅ©¸³Æ® À̸§Àº \"$0\"."
# ÇöÀç µð·ºÅ丮¸¦ ³ªÅ¸³»´Â ./ °¡ Ãß°¡µÇ¾î ÀÖÁÒ.
echo "½ºÅ©¸³Æ® À̸§Àº \"`basename $0`\"."
# °æ·Î¸íÀ» ¶¼¾î ³À´Ï´Ù('basename' Âü°í).

echo

if [ -n "$1" ]              # Å×½ºÆ® ÇÒ º¯¼ö¸¦ Äõ¿ìÆ® ÇØÁá½À´Ï´Ù.
then
 echo "ù¹ø° ¸Å°³º¯¼ö´Â $1"  # # À» À̽ºÄÉÀÌÇÁ ½ÃÅ°±â À§Çؼ­ Äõ¿ìÆ®¸¦ ÇØ Áà¾ß µË´Ï´Ù.
fi 

if [ -n "$2" ]
then
 echo "µÎ¹ø° ¸Å°³º¯¼ö´Â $2"
fi 

if [ -n "$3" ]
then
 echo "¼¼¹ø° ¸Å°³º¯¼ö´Â $3"
fi 

# ...

if [ -n "${10}" ]  # $9 º¸´Ù Å« ¸Å°³º¯¼ö´Â {Áß°ýÈ£}·Î °¨½Î¾ß µË´Ï´Ù.
then
 echo "¿­¹ø° ¸Å°³º¯¼ö´Â ${10}"
fi 

echo

exit 0

¾î¶² ½ºÅ©¸³Æ®µéÀº ÀÚ½ÅÀÌ ºÒ¸° À̸§¿¡ µû¶ó ´Ù¸£°Ô µ¿ÀÛÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± ½ÄÀÇ µ¿ÀÛÀ» ¿øÇÑ´Ù¸é ½ºÅ©¸³Æ® ¾È¿¡¼­ ÀڱⰡ ¾î¶»°Ô ºÒ·È´ÂÁö¸¦ ³ªÅ¸³»´Â $0À» È®ÀÎÇÏ¸é µË´Ï´Ù. ½ºÅ©¸³Æ®°¡ ¾î¶² À̸§À¸·Î ºÒ¸®µçÁö °£¿¡ $0Àº ±× À̸§À» Á¤È®ÇÏ°Ô ½Éº¼¸¯ ¸µÅ©ÇÏ°í Àֱ⠶§¹®ÀÔ´Ï´Ù.

ÀÛÀº Á¤º¸: ¸í·É¾îÁÙ ¸Å°³º¯¼ö¸¦ ¿¹»óÇÏ°í ÀÖ´Â ½ºÅ©¸³Æ®°¡ ¸Å°³º¯¼ö ¾øÀÌ ºÒ¸°´Ù¸é ³Î °ªÀÌ ÇÒ´çµÇ¾î ¿øÄ¡ ¾Ê´Â °á°ú¸¦ °¡Á®¿É´Ï´Ù. ÀÌ·± »óȲÀ» ÇÇÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº À§Ä¡ ¸Å°³º¯¼ö¸¦ º¯¼ö¿¡ ÇÒ´çÇÏ´Â ¹®Àå¿¡¼­ ¾çÂÊ¿¡ ¶È°°Àº ¾Æ¹« ¹®ÀÚ³ª ºÙÀÌ¸é µË´Ï´Ù.

variable1_=$1_
# ÀÌ·¸°Ô ÇØÁÖ¸é À§Ä¡ ¸Å°³ º¯¼ö°¡ ºñ¾îÀÖ´õ¶óµµ ¿¡·¯¸¦ ¸·¾ÆÁÝ´Ï´Ù.

critical_argument01=$variable1_

# ½ÇÁ¦·Î º¯¼ö¸¦ ¾µ °÷¿¡¼­ ´ÙÀ½Ã³·³ ÇØÁÖ¸é ¿¡·¯ ¹æÁö¿ë ¹®ÀÚ°¡ Àß·Á ³ª°©´Ï´Ù.
variable1=${variable1_/_/}   # $variable1_ ÀÌ "_"·Î ½ÃÀÛÇÒ ¶§¸¸ ºÎÈ¿°ú(Side effects)°¡ ÀÖ½À´Ï´Ù.
# 9Àå¿¡¼­ ³íÀÇÇÒ ¸Å°³º¯¼ö ġȯÁßÀÇ ÇÑ °¡Áö ¹æ¹ýÀ» ½á¼­ º¯°æ ÆÐÅÏÀ» »èÁ¦ÇØ ÁÝ´Ï´Ù.

#  Á» ´õ È®½ÇÇÑ ¹æ¹ýÀº ¿øÇÏ´Â À§Ä¡ ¸Å°³º¯¼ö°¡ ³Ñ¾î ¿Ô´ÂÁö Å×½ºÆ®¸¦ ÇØ º¸´Â °ÍÀÔ´Ï´Ù.
if [ -z $1 ]
then
  exit $POS_PARAMS_MISSING
fi  

---

¿¹ 5-6. wh, whois µµ¸ÞÀÎ ³×ÀÓ ·è¾÷

#!/bin/bash

# ripe.net, cw.net, radb.net Áß ÇϳªÀÇ ¼­¹ö¿¡ ´ëÇؼ­ 
# 'whois domain-name' ·è¾÷À» ½ÇÇà

# ÀÌ ½ºÅ©¸³Æ® À̸§À» 'wh' ¶ó°í Çؼ­ /usr/local/bin ¿¡ ³Ö¾îµÎ¼¼¿ä.

# ±×¸®°í ´ÙÀ½Ã³·³ ½Éº¼¸¯ ¸µÅ©¸¦ °Å¼¼¿ä.
# ln -s /usr/local/bin/wh /usr/local/bin/wh-ripe
# ln -s /usr/local/bin/wh /usr/local/bin/wh-cw
# ln -s /usr/local/bin/wh /usr/local/bin/wh-radb


if [ -z "$1" ]
then
  echo "»ç¿ë¹ý: `basename $0` [domain-name]"
  exit 65
fi

case `basename $0` in
# ½ºÅ©¸³Æ® À̸§À» È®ÀÎÇؼ­ ÇØ´ç ¼­¹ö¸¦ ºÎ¸¨´Ï´Ù.
    "wh"     ) whois $1@whois.ripe.net;;
    "wh-ripe") whois $1@whois.ripe.net;;
    "wh-radb") whois $1@whois.radb.net;;
    "wh-cw"  ) whois $1@whois.cw.net;;
    *        ) echo "»ç¿ë¹ý: `basename $0` [domain-name]";;
esac 

exit 0

---

shift ¸í·É¾î´Â À§Ä¡ ¸Å°³º¯¼ö¸¦ ¿ÞÂÊÀ¸·Î ÇÑ ´Ü°è¾¿ À̵¿½Ãŵ´Ï´Ù.

$1 <--- $2, $2 <--- $3, $3 <--- $4, µîµî.

¿ø·¡ÀÇ $1 Àº ¾ø¾îÁöÁö¸¸ $0 Àº ¹Ù²îÁö ¾Ê½À´Ï´Ù. À§Ä¡ ¸Å°³º¯¼ö°¡ ¸¹ÀÌ ÇÊ¿äÇÏ´Ù¸é {Áß°ýÈ£} Ç¥±â¹ýÀ¸·Î °¡´ÉÇÏÁö¸¸(¿¹ 5-5 Âü°í), shift ¸¦ ½á¼­ ¿¹Àü 10°³¸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù.

¿¹ 5-7. shift ¾²±â

#!/bin/bash
# 'shift' ·Î ¸ðµç À§Ä¡ ¸Å°³º¯¼ö¸¦ ó¸®Çϱâ.

#  ÀÌ ½ºÅ©¸³Æ®ÀÇ À̸§À» shft µîÀÇ À̸§À¸·Î ¹Ù²Ù°í
#+ ./shft a b c def 23 skidoo
#+ °°Àº ½ÄÀ¸·Î ¸î °³ÀÇ ÀÎÀÚ¸¦ ³Ñ°Ü¼­ ºÒ·¯ º¸¼¼¿ä.

until [ -z "$1" ]  # ¸ðµç ¸Å°³º¯¼ö¸¦ ´Ù ¾µ ¶§±îÁö...
do
  echo -n "$1 "
  shift
done

echo   # ¿©ºÐÀÇ ÇÑ ÁÙ.

exit 0

ÁÖ¼®

[1]

°ü½ÀÀûÀ¸·Î, ½ºÅ©¸³Æ®¸¦ È£ÃâÇÏ´Â ÇÁ·Î¼¼½º´Â $0 ¸Å°³º¯¼ö¸¦, È£ÃâÇÏ´Â ½ºÅ©¸³Æ®ÀÇ À̸§À¸·Î ¼¼Æ®ÇÕ´Ï´Ù. execv ¸ÇÆäÀÌÁö¸¦ Âü°íÇϼ¼¿ä.