3.9. ³»ºÎ ¸í·É¾î

³»Àå ¸í·É¾î´Â bash ¾È¿¡ Æ÷ÇԵǾî ÀÖ´Â ¸í·É¾îÀÔ´Ï´Ù.

getopts

À̰ÍÀº ¾ÆÁÖ °­·ÂÇÑ µµ±¸·Î¼­ ¸í·É¾î ÁÙ¿¡¼­ ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ÀÎÀÚ¸¦ ÆÄ½ÌÇØÁÝ´Ï´Ù. C¿¡¼­ÀÇ getopt ¶óÀ̺귯¸® ÇÔ¼ö¿Í ºñ½ÁÇÕ´Ï´Ù. ¿©·¯°³ÀÇ Ç÷¡±×[1]¿Í ¿É¼ÇÀ» ½ºÅ©¸³Æ®¿¡°Ô ³Ñ°ÜÁְųª À̾îÁÖ°Ô ÇÕ´Ï´Ù(¿¹¸¦ µé¸é scriptname -abc -e /usr/local/).

getopts´Â ³»ºÎÀûÀ¸·Î µÎ °³ÀÇ º¯¼ö¸¦ »ç¿ëÇÕ´Ï´Ù. $OPTIND(OPTion INDex)´Â ÀÎÀÚ Æ÷ÀÎÅÍÀ̰í $OPTARG(OPTion ARGument)´Â Ç÷¡±×¿¡ ºÙ´Â Ãß°¡ ÀÎÀÚ(¿É¼Ç)¸¦ ³ªÅ¸³À´Ï´Ù. ÀÌ·± °æ¿ì¶ó¸é Á¤ÀÇ Å±׿¡¼­ ÄÝ·ÐÀ» Ç÷¡±× µÚ¿¡ ºÙ¿©¼­ Ç¥½ÃÇÕ´Ï´Ù.

getopts´Â º¸Åë while°ú °°ÀÌ ½á¼­ °¢ Ç÷¡±×¿Í ¿É¼ÇÀ» ÇÑ ¹ø¿¡ ó¸®Çϰí $OPTINDÀ» Çϳª¾¿ ÁÙ¿©¼­ ±× ´ÙÀ½ °ÍÀ» ó¸®ÇÏ°Ô ÇÕ´Ï´Ù.

참고:

  1. ¸í·É¾î ÁÙ¿¡¼­ ÀÎÀÚ¸¦ Àû¾î ÁÙ¶§´Â -³ª +µÚ¿¡ Àû¾îÁà¾ß Çϴµ¥ ¾È ±×·¯¸é getopts°¡ ´õ ÀÌ»ó ÁøÇàÇÏÁö ¾Ê°í Áß´ÜÇÒ °ÍÀÔ´Ï´Ù.

  2. getopts Çü½ÄÀº Ç¥ÁØ while °ú ¾à°£Àº ´Ù¸¥ ÇüÅ·ΠÁ¶°Ç ²©¼è°¡ ºüÁ® ÀÖ½À´Ï´Ù.

  3. ¿¹ÀüÀÇ getopt´Â ¾ø¾îÁö°í getopts °¡ »õ·Ó°Ô ¾²ÀÔ´Ï´Ù.

while getopts ":abcde:fg" Option
# Ãʱ⠼±¾ð
# a, b, c, d, e, f, g °¡ ¹Ù¶ó´Â Ç÷¡±×µéÀÓ
# 'e' µÚÀÇ :´Â 'e' Ç÷¡±×´Â Ãß°¡ Á¤º¸°¡ ÇÊ¿äÇÏ´Ù´Â ¶æÀÓ 
do
  case $Option in
    a ) # 'a'ÀÏ °æ¿ì ÇÒ ÀÏ
    b ) # 'b'ÀÏ °æ¿ì ÇÒ ÀÏ 
    ...
    e)  # 'e'ÀÏ °æ¿ì ÇÒ ÀÏ, $OPTARG·Î 'e'¿¡ µ¡ºÙÀÎ Á¤º¸¸¦ ó¸®
    ...
    g ) # 'g'ÀÏ °æ¿ì ÇÒ ÀÏ
  esac
done
# ÀÎÀÚ Æ÷ÀÎÅ͸¦ ´ÙÀ½À¸·Î À̵¿
shift $(($OPTIND - 1))

# º¸ÀÌ´Â °Íó·³ ±×·¸°Ô º¹ÀâÇÏÁö´Â ¾Ê½À´Ï´Ù. ^^
	      

예 3-39. getopts·Î Ç÷¡±×/¿É¼Ç ÀоîµéÀ̱â

#!/bin/bash

# 'getopts' ´Â ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ¸í·É¾î ÁÙ ÀÎÀÚ¸¦ ó¸®ÇØÁÝ´Ï´Ù.

# »ç¿ë¹ý: scriptname -options
# ÁÖÀÇ: ´ë½¬(-)°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

# ÀÌ ½ºÅ©¸³Æ®¸¦ ´ÙÀ½Ã³·³ ºÒ·¯º¸¼¼¿ä.
# 'scriptname -mn'
# 'scriptname -oq qOption'
# (qOption Àº ¾Æ¹« ¹®ÀÚ¿­ÀÌ¸é µË´Ï´Ù.)

OPTERROR=33

if [ -z $1 ]
# ¾Æ¹« ÀÎÀÚµµ ¾ø´Ù¸é Åõ´ú°Å¸®¸é¼­ Á¾·áÇÕ´Ï´Ù.
then
  echo "»ç¿ë¹ý: `basename $0` options (-mnopqrs)"
  exit $OPTERROR
fi  

while getopts ":mnopq:rs" Option
do
  case $Option in
    m     ) echo "1¹ø ½Ã³ª¸®¿À: option -m-";;
    n | o ) echo "2¹ø ½Ã³ª¸®¿À: option -$Option-";;
    p     ) echo "3¹ø ½Ã³ª¸®¿À: option -p-";;
    q     ) echo "4¹ø ½Ã³ª¸®¿À: option -q-, \"$OPTARG\""¸¦ Á༭;;
    # 'q' ¿É¼ÇÀº Ãß°¡ ÀÎÀÚ°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¾ø´Ù¸é ¾Æ¹« Àϵµ ÀϾÁö ¾Ê½À´Ï´Ù.
    r | s ) echo "5¹ø ½Ã³ª¸®¿À: option -$Option-"'';;
    *     ) echo "¾Ë¼ö ¾ø´Â ¿É¼Ç.";;
  esac
done

shift $(($OPTIND - 1))
# ÀÎÀÚ Æ÷ÀÎÅ͸¦ °¨¼Ò½ÃÄѼ­ ´ÙÀ½ ÀÎÀÚ¸¦ °¡¸£Å°°Ô ÇÕ´Ï´Ù.

exit 0
exit

½ºÅ©¸³Æ®¸¦ ¹«Á¶°Ç ³¡³¿. exit´Â Á¤¼ö¸¦ ÀÎÀÚ·Î °¡Á®¼­ ½ºÅ©¸³Æ®¿¡°Ô Á¾·á »óŸ¦ ³Ñ°Ü ÁÙ ¼öµµ ÀÖ½À´Ï´Ù. °£´ÜÇÑ ½ºÅ©¸³Æ®¸¦ exit 0ó·³ ³¡³»¼­ ¼º°øÀûÀÎ ½ÇÇàÀ» ¾Ë·ÁÁִ°ÍÀº ¾ÆÁÖ ÁÁÀº ½À°üÀÔ´Ï´Ù.

set

set ¸í·É¾î´Â ³»ºÎ ½ºÅ©¸³Æ® º¯¼öÀÇ °ªÀ» ¹Ù²ãÁÝ´Ï´Ù. ½ºÅ©¸³Æ®ÀÇ ÇൿÀ» °áÁ¤ÇÏ´Â ¿É¼Ç Ç÷¡±×¸¦ Ű°Å³ª ²ô´Â ¿ªÇÒÀ» Çϴµ¥ »ç¿ëÇϱ⵵ Çϰí(3.27절 Âü°í), À§Ä¡ ÀÎÀÚ¸¦ ƯÁ¤ ¸í·É¾îÀÇ °á°ú·Î ¹Ù²Ù±â À§Çؼ­µµ ¾²ÀÔ´Ï´Ù(set `command`). µû¶ó¼­ ±× ¸í·É¾îÀÇ Ãâ·ÂÀ» ÆÄ½ÌÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

예 3-40. À§Ä¡ ÀÎÀÚ¿Í set

#!/bin/bash

# script "set-test"

# 3°³ÀÇ ÀÎÀÚ¸¦ Á༭ ½ÇÇà½ÃŰ¼¼¿ä.
# ¿¹¸¦ µé¸é "./set-test one two three".

echo
echo "set \'uname -a\' Çϱâ ÀüÀÇ À§Ä¡ ÀÎÀÚ :"
echo "ù¹øÂ° ¸í·É¾î ÁÙ ÀÎÀÚ = $1"
echo "µÎ¹øÂ° ¸í·É¾î ÁÙ ÀÎÀÚ = $2"
echo "¼¼¹øÂ° ¸í·É¾î ÁÙ ÀÎÀÚ = $3"

echo

set `uname -a`
# À§Ä¡ ÀÎÀÚ¸¦ 'uname -a' ¸í·É¾îÀÇ °á°ú·Î ¼¼Æ®

echo "set \'uname -a\' ÇÑ ´ÙÀ½ÀÇ À§Ä¡ ÀÎÀÚ :"
# $1, $2, $3, µîµîÀÌ 'uname -a' ÀÇ °á°ú·Î ´Ù½Ã ÃʱâÈ­ µË´Ï´Ù.
echo "'uname -a' ÀÇ Ã¹¹øÂ° Çʵå = $1"
echo "'uname -a' ÀÇ µÎ¹øÂ° Çʵå = $2"
echo "'uname -a' ÀÇ ¼¼¹øÂ° Çʵå = $3"
echo

exit 0
unset

unset´Â ³»ºÎ ½ºÅ©¸³Æ® º¯¼ö¸¦ Áö¿öÁÝ´Ï´Ù. ÃÖ±Ù¿¡ »ç¿ëÇÑ set¸¦ Ãë¼Ò½ÃŰ´Â ¹æ¹ýÀ̳ª À§Ä¡ ÀÎÀÚ¿¡ ´ëÇØ¼­´Â µ¿ÀÛÇÏÁö ¾Ê´Â´Ù´Âµ¥ ÁÖÀÇÇϼ¼¿ä.

export

export ¸í·É¾î´Â ÇöÀç ½ºÅ©¸³Æ®³ª ½©ÀÇ ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º°¡ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù. ºÒÇàÇϰԵµ ½ºÅ©¸³Æ®³ª ½©À» ºÎ¸¥ ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô º¯¼ö¸¦ exportÇÒ ¹æ¹ýÀº ¾ø½À´Ï´Ù. export´Â ½ÃÀÛ ÆÄÀÏ¿¡¼­ ȯ°æ º¯¼öµîÀ» ¸¸µé¾î ÃʱâÈ­ÇÑÈÄ À¯Àú ÇÁ·Î¼¼½ºµéÀÌ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ¾ÆÁÖ Áß¿äÇÑ ¿ëµµ·Î ¾²ÀÔ´Ï´Ù (3.23절 Âü°í).

readonly

declare -r°ú ¶È°°ÀÌ º¯¼ö¸¦ Àбâ Àü¿ëÀ¸·Î ¸¸µé¾î Áִµ¥ ½ÇÁ¦·Î´Â »ó¼ö·Î ¾²°Ú´Ù´Â °ÍÀÌÁö¿ä. ÀÌ·± º¯¼ö °ªÀ» ¹Ù²Ù·Á°í ÇÑ´Ù¸é ¿¡·¯ ¸Þ¼¼Áö¸¦ ¸¸³ª°Ô µË´Ï´Ù. C¿¡¼­ const ÇüÁöÁ¤ÀÚ¿Í ºñ½ÁÇÑ °ÍÀ¸·Î º¸½Ã¸é µË´Ï´Ù.

basename

ÆÄÀÏ À̸§¿¡¼­ °æ·Î Á¤º¸¸¦ Àß¶ó³»°í ¿ÀÁ÷ ÆÄÀÏ À̸§¸¸ º¸¿©ÁÝ´Ï´Ù. basename $0À̶ó°í ÇÏ¸é ½ºÅ©¸³Æ®°¡ ½©¿¡¼­ ¾î¶»°Ô ºÒ·È´ÂÁö ¾Ë°Ô ÇØ ÁÝ´Ï´Ù(ÀÚ±â À̸§ÀÌ ¹«¾ùÀÎÁö). ÀÎÀÚ¸¦ »©¸Ô°í ½ºÅ©¸³Æ®¸¦ ºÒ·¶À» °æ¿ì "»ç¿ë¹ý"À» Ãâ·ÂÇÒ ¶§ À¯¿ëÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù.
echo "»ç¿ë¹ý: `basename $0` arg1 arg2 ... argn"
	  

dirname

ÆÄÀÏ À̸§¿¡¼­ basenameÀ» Àß¶ó³»°í °æ·Î Á¤º¸¸¸ º¸¿©ÁÝ´Ï´Ù.

참고: basename°ú dirnameÀº ¾î¶² ¹®ÀÚ¿­¿¡µµ µ¿ÀÛÀ» Çϱ⠶§¹®¿¡ ²À ½ÇÁ¦ Á¸ÀçÇÏ´Â ÆÄÀÏ À̸§À» ÀÎÀÚ¸¦ ³Ñ°ÜÁÖÁö ¾Ê¾Æµµ µË´Ï´Ù.

예 3-41. basename°ú dirname

#!/bin/bash

a=/home/heraclius/daily-journal.txt

echo "/home/heraclius/daily-journal.txt ÀÇ basename = `basename $a`"
echo "/home/heraclius/daily-journal.txt ÀÇ dirname = `dirname $a`"

exit 0
read

Ç¥ÁØ ÀԷ¿¡¼­ º¯¼ö°ªÀ» Àоîµå¸³´Ï´Ù. Áï, Űº¸µå¿¡¼­ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ¹Þ¾Æ ó¸®ÇÕ´Ï´Ù. -a ¿É¼ÇÀº º¯¼ö¸¦ ¹è¿­·Î ó¸®ÇÏ°Ô ÇÕ´Ï´Ù(예 3-89 Âü°í).

예 3-42. read·Î º¯¼ö°ª ÀоîµéÀ̱â

#!/bin/bash

echo -n "'var1' º¯¼ö°ªÀ» ³ÖÀ¸¼¼¿ä: "
# -n ¿É¼ÇÀº ´º¶óÀÎÀ» Á¦°ÅÇØ ÁÝ´Ï´Ù.

read var1
# ¿©±â¼­ ¼¼Æ®µÇ±â ¶§¹®¿¡ var1 ¾Õ¿¡ '$'°¡ ¾øÀ½¿¡ ÁÖÀÇÇϼ¼¿ä.

echo "var1 = $var1"


# ÇϳªÀÇ 'read' ¹®À¸·Î ¿©·¯°³ÀÇ º¯¼ö¸¦ ¼¼Æ®ÇÒ ¼ö ÀÖ½À´Ï´Ù.

echo

echo -n "'var2'¿Í 'var3' ÀÇ º¯¼ö°ªÀ» ³ÖÀ¸¼¼¿ä(ºóÄ­À̳ª ÅÇÀ¸·Î ±¸ºÐ): "
read var2 var3
echo "var2 = $var2      var3 = $var3"
# ÇÑ °³ °ª¸¸ ÁØ´Ù¸é ´Ù¸¥ º¯¼ö(µé)Àº ¼¼Æ®°¡ ¾È µÈ »óÅ·Π³²°Ô µË´Ï´Ù(null).

exit 0

read´Â ÆÄÀÏ¿¡¼­ °ªÀ» ÀоîµéÀÏ ¼ö ÀÖ½À´Ï´Ù (Ç¥ÁØÀÔ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ, 3.13절 Âü°í). ÀÔ·Â ÆÄÀÏÀÌ ÇÑ ÁÙ ÀÌ»óÀ̶ó¸é ¿ÀÁ÷ ù ¹øÂ° ÁÙÀÌ º¯¼ö °ªÀÌ µË´Ï´Ù. ¸¸¾à¿¡ read°¡ ÀÎÀÚ¸¦ ÇÑ °³ ÀÌ»ó °®´Â´Ù¸é °¢ º¯¼ö´Â °ø¹é ¹®ÀÚ·Î ³ª´²Áø ¹®ÀÚ¿­À» °ªÀ¸·Î °¡Áú °Ì´Ï´Ù. Á¶½ÉÇϼ¼¿ä.

read var1 <data-file
echo "var1 = $var1"
# var1 °ªÀº "data-file"ÀÇ Ã¹¹øÂ° ÁÙ Àüü

read var2 var3 <data-file
echo "var2 = $var2   var3 = $var3"
# "read"ÀÇ ÀÌ»óÇÑ µ¿ÀÛ
# 1) ÀÔ·Â ÆÄÀÏÀÇ Á¦ÀÏ Ã³À½À¸·Î µ¹¾Æ°¡¼­
# 2) °¢ º¯¼ö´Â °ø¹é¹®ÀÚ·Î ³ª´²Áø ¹®ÀÚ¿­·Î ¼¼Æ®µÊ
# 3) ¸¶Áö¸· º¯¼ö´Â ±× ÁÙÀÇ ³ª¸ÓÁö·Î ¼¼Æ®
# 4) º¯¼ö °¹¼ö°¡ °ø¹é¹®ÀÚ·Î ³ª´²Áø ¹®ÀÚ¿­º¸´Ù ¸¹´Ù¸é ³ª¸ÓÁö º¯¼öµéÀº ¼¼Æ® µÇÁö ¾ÊÀ½ 

true

´Ü¼øÈ÷ ¼º°øÀûÀÎ Á¾·á »óÅÂ(0)¸¦ ¸®ÅÏ.

# Endless loop
while true
# : ¿Í µ¿ÀÏ
do
   operation-1
   operation-2
   ...
   operation-n
   # ·çÇÁ¸¦ ºüÁ® ³ª°¥ ¹æ¹ýÀÌ ÇÊ¿ä.
done

false

´Ü¼øÈ÷ ºñÁ¤»óÀû Á¾·á »óŸ¦ ¸®ÅÏÇÔ.

# Null loop
while false
do
   # ÀÌ ºÎºÐÀº ½ÇÇàµÇÁö ¾ÊÀ½.
   operation-1
   operation-2
   ...
   operation-n
   # ¾Æ¹« Àϵµ ¾È ÀϾ´Ï´Ù.
done   

factor

Á¤¼öÀÇ ¼ÒÀμö¸¦ ¸¸µé¾î ³¿.

bash$ factor 27417
27417: 3 13 19 37
	      

hash [cmds]

ÁÖ¾îÁø ¸í·É¾îÀÇ °æ·Î¸íÀ» ½© ÇØ½¬ Å×ÀÌºí¿¡ ÀúÀå. µû¶ó¼­ ³ªÁß¿¡ ±× ¸í·É¾î¸¦ ´Ù½Ã ºÎ¸¦ ¶§ $PATH¿¡¼­ ¾È ã¾Æµµ µË´Ï´Ù. hash ´Üµ¶À¸·Î ¾²À̸é ÇöÀç ÀÚ½ÅÀÌ ÇØ½¬Çϰí ÀÖ´Â ¸ðµç ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù.

pwd

ÀÛ¾÷ µð·ºÅ丮 Ãâ·Â. »ç¿ëÀÚ(³ª ½ºÅ©¸³Æ®)ÀÇ ÇöÀç µð·ºÅ丮¸¦ ¾Ë·ÁÁÝ´Ï´Ù(예 3-43 Âü°í). ³»Àå º¯¼öÀÎ $PWD ¸¦ Àд°Ͱú °°½À´Ï´Ù(3.7절 Âü°í).

pushd, popd, dirs

ÀÌ ¸í·É¾îµéÀº ÀÛ¾÷ µð·ºÅ丮¸¦ ±â¾ï½ÃŰ´Â ¸ÞÄ«´ÏÁòÀ¸·Î, µð·ºÅ丮µé°£¿¡ ¼ø¼­´ë·Î ¿Ô´Ù °¬´Ù ÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù. µð·ºÅ丮 À̸§À» ±â¾ïÇϱâ À§Çؼ­ Ǫ½¬´Ù¿î ½ºÅÃÀ» »ç¿ëÇÕ´Ï´Ù. ¿É¼ÇÀ» Á༭ µð·ºÅ丮 ½ºÅÿ¡ ´ëÇÑ ´Ù¾çÇÑ Á¶ÀÛÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.

pushd dir-nameÀº dir-name À» µð·ºÅ丮 ½ºÅÿ¡ Áý¾î ³Ö°í dir-name·Î ÇöÀç µð·ºÅ丮¸¦ ¿Å°Ü ÁÝ´Ï´Ù.

popd´Â µð·ºÅ丮 ½ºÅÿ¡¼­ Á¦ÀÏ À§¿¡ ÀÖ´Â µð·ºÅ丮¸¦ Áö¿ì¸é¼­ ±× µð·ºÅ丮·Î ¿Å°Ü °©´Ï´Ù.

dirsÀº µð·ºÅ丮 ½ºÅÃÀÇ ³»¿ëÀ» º¸¿©ÁÝ´Ï´Ù. pushd³ª popd°¡ ¼º°øÇϸé ÀÚµ¿À¸·Î dirs¸¦ ºÎ¸¨´Ï´Ù.

Çϵå ÄÚµù¾øÀÌ ÇöÀç µð·ºÅ丮¸¦ °è¼Ó ¹Ù²Ù´Â ½ºÅ©¸³Æ®°¡ ÀÌ ¸í·É¾îµéÀ» ¾²¸é ¾ÆÁÖ ÁÁ½À´Ï´Ù. ½ºÅ©¸³Æ®¾È¿¡¼­ µð·ºÅ丮 ½ºÅÃÀÇ ³»¿ëÀ» °®°í ÀÖ´Â DIRSTACK ¹è¿­ º¯¼ö¿¡ Á¢±ÙÇÒ ¼öµµ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇϼ¼¿ä.

예 3-43. ÇöÀç µð·ºÅ丮 º¯°æÇϱâ

#!/bin/bash

dir1=/usr/local
dir2=/var/spool

pushd $dir1
# ÀÚµ¿À¸·Î 'dirs'¸¦ ½ÇÇàÇÕ´Ï´Ù(µð·ºÅ丮 ½ºÅÃÀÇ ³»¿ëÀ» Ç¥ÁØÃâ·ÂÀ¸·Î »Ñ¸²).
echo "Áö±ÝÀº `pwd` µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù."
# ¿ªµû¿ÈÇ¥µÈ `pwd` ¸¦ ¾²¼¼¿ä.
# 'dir1'¿¡¼­ ¾Æ¹« ÀÏÀ̳ª Çϼ¼¿ä.
pushd $dir2
echo "Áö±ÝÀº `pwd` µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù."
# 'dir2'¿¡¼­ ¾Æ¹« ÀÏÀ̳ª Çϼ¼¿ä.
echo "DIRSTACK ¹è¿­ÀÇ Á¦ÀÏ Ã³À½ Ç׸ñÀº $DIRSTACK ÀÔ´Ï´Ù."
popd
echo "ÀÌÁ¦ `pwd` µð·ºÅ丮·Î µ¹¾Æ¿Ô½À´Ï´Ù."
# 'dir1'¿¡¼­ ¾Æ¹« ÀÏÀ̳ª Çϼ¼¿ä.
popd
echo "ÀÌÁ¦ ¿ø·¡ÀÇ `pwd` µð·ºÅ丮·Î µ¹¾Æ¿Ô½À´Ï´Ù."

exit 0
source, . (Á¡ ¸í·É¾î), dirs

ÀÌ ¸í·É¾î¸¦ ¸í·É¾î ÁÙ¿¡¼­ ºÎ¸£¸é ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ°í ½ºÅ©¸³Æ® ¾È¿¡¼­ source file-name¶ó°í ºÎ¸£¸é file-name À» ÀоîµéÀÔ´Ï´Ù. C/C++¿¡¼­ #include Áö½ÃÀÚ¿Í °°½À´Ï´Ù. ¿©·¯°³ÀÇ ½ºÅ©¸³Æ®°¡ µ¥ÀÌŸ ÆÄÀÏÀ̳ª ÇÔ¼ö ¶óÀ̺귯¸®¸¦ ¾µ ¶§ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù.

예 3-44. µ¥ÀÌŸ ÆÄÀÏ "Æ÷ÇÔÇϱâ"

#!/bin/bash

# µ¥ÀÌŸ ÆÄÀÏ ·ÎµåÇϱâ
. data-file
# "source data-file"°ú °°½À´Ï´Ù.

# "data-file" ÆÄÀÏÀº ÇöÀç µð·ºÅ丮¿¡ ²À ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÁÖÀÇÇϼ¼¿ä.

# ÀÌÁ¦ ÀÐÀº µ¥ÀÌŸ ÆÄÀÏ¿¡¼­ ¸î °³ÀÇ µ¥ÀÌŸ¸¦ ÂüÁ¶ÇØ º¸°Ú½À´Ï´Ù.

echo "variable1 (data-file ¿¡ ÀÖ´Â º¯¼ö) = $variable1"
echo "variable3 (data-file ¿¡ ÀÖ´Â º¯¼ö) = $variable3"

#echo $variable2
#echo $variable4

let "sum = $variable2 + $variable4"
echo "variable2 + variable4 (data-file ¿¡ ÀÖ´Â º¯¼ö) ÀÇ ÇÕ = $sum"
echo "message1 (data-file ¿¡ ÀÖ´Â º¯¼ö) ´Â \"$message1\" ÀÔ´Ï´Ù."
# ÁÖÀÇ:                            À̽ºÄÉÀÌÇÁ ó¸®µÈ Àοë(quote)

print_message data-file ÀÇ print ÇÔ¼ö°¡ ºÎ¸¥ ¸Þ¼¼ÁöÀÔ´Ï´Ù.


exit 0

À§ÀÇ 예 3-44¿¡¼­ data-fileÀº °°Àº µð·ºÅ丮¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

# error free
# (¿Å±äÀÌ:
# Á¦ÀÏ À­ÁÙ¿¡ ÇѱÛÀÌ µé¾î°¡ ÀÖÀ¸¸é file data-file À̶ó°í ÇßÀ» ¶§ 
# data-file: International language text
# ¶ó°í ³ª¿À³×¿ä. ÀÌ°Í ¶§¹®ÀÎÁö ¿¹Á¦¿¡¼­ ÀÌ ÆÄÀÏÀ» . ÇÏ¸é ¿¡·¯°¡ ³³´Ï´Ù.
# ¸Ç À§ÀÇ ¹«ÀǹÌÇÑ ¿µ¹®Àº ÀÌ ¿¡·¯¸¦ ÇÇÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù.)
# 
# ½ºÅ©¸³Æ®°¡ ÀÐÀ» µ¥ÀÌŸ ÆÄÀÏÀÔ´Ï´Ù.
# ÀÌ·± Á¾·ùÀÇ ÆÄÀÏÀº º¯¼ö³ª ÇÔ¼öµîÀ» °®°í ÀÖ½À´Ï´Ù.
# ½© ½ºÅ©¸³Æ®°¡ 'source'³ª '.' ¸í·É¾î·Î ·ÎµåÇÒ ¼ö ÀÖ½À´Ï´Ù.

# º¯¼ö ¸î °³¸¦ ÃʱâÈ­ ÇսôÙ.

variable1=22
variable2=474
variable3=5
variable4=97

message1="¾È³ç, ³Í ´©±¸´Ï?"
message2="Áö±ÝÀº µÆ¾î, ¾È³ç."

print_message ()
{
# ³Ñ¾î¿Â ¾î¶² ¸Þ¼¼Áöµµ ´Ù ¿¡ÄÚ½ÃÅ´.

  if [ -z $1 ]
  then
    return 1
    # ÀÎÀÚ ¾øÀÌ ºÒ·È´Ù¸é ¿¡·¯.
  fi

  echo

  until [ -z "$1" ]
  do
    # ÇÔ¼ö·Î ³Ñ¾î¿Â ÀÎÀÚ¸¦ ¸ðµÎ ó¸®
    echo -n "$1"
    # Çѹø¿¡ Çϳª¾¿ ó¸®, ¶óÀÎÇǵå´Â Á¦°Å
    echo -n " "
    # ³¹¸» »çÀÌ¿¡ ºó Ä­À» Áý¾î ³ÖÀ½
    shift
    # ´ÙÀ½
  done  

  echo

  return 0
}  

3.9.1. ÀÛ¾÷ Á¦¾î ¸í·É¾îµé

wait

¹é±×¶ó¿îµå·Î µµ´Â ¸ðµç ÀÛ¾÷À̳ª ¿É¼ÇÀ¸·Î ÁÖ¾îÁø ÀÛ¾÷ÀÌ ³¡³¯ ¶§±îÁö ½ºÅ©¸³Æ®¸¦ ÁߴܽÃŵ´Ï´Ù. ¹é±×¶ó¿îµå ÀÛ¾÷ÀÌ ³¡³ª±â Àü¿¡ ½ºÅ©¸³Æ®°¡ ³¡³ª´Â °ÍÀ» ¸·±â À§ÇØ ¾²À̱⵵ ÇÕ´Ï´Ù(°í¾Æ ÇÁ·Î¼¼½º »ý¼ºÀ» ¸·À½).

예 3-45. ÇÁ·Î¼¼½º°¡ ³¡³ª´Â °Í ±â´Ù¸®±â

#!/bin/bash

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

echo "'locate' µ¥ÀÌŸº£À̽º ¾÷µ¥ÀÌÆ®Áß..."
echo "½Ã°£ÀÌ Á» °É¸± ¼öµµ ÀÖ½À´Ï´Ù."
updatedb /usr &
# ·çÆ®·Î ½ÇÇàÇØ¾ß ÇÕ´Ï´Ù.

wait
# 'updatedb' °¡ ³¡³ª±â Àü±îÁö ½ºÅ©¸³Æ® µÞ ºÎºÐÀÌ µ¹Áö ¾Ê°Ô ÇÔ

locate $1

# wait ´Â ÃÖ¾ÇÀÇ ½Ã³ª¸®¿ÀÀÎ 'updatedb'°¡ ½ÇÇàÁß¿¡ ½ºÅ©¸³Æ®°¡ Á¾·áµÆÀ» °æ¿ì,
# 'updatedb'¸¦ °í¾Æ ÇÁ·Î¼¼½º·Î ³²°ÜµÎ´Â ¾àÁ¡À» °®°í ÀÖ½À´Ï´Ù.

exit 0
suspend

Æ÷±×¶ó¿îµå ÀÛ¾÷À» Àá½Ã Áß´Ü ½ÃŰ´Â Control-Z¿Í °°½À´Ï´Ù.

stop

suspend¿Í °°Áö¸¸ ¹é±×¶ó¿îµå ÀÛ¾÷¿¡ ´ëÇØ¼­ ¾¹´Ï´Ù.

disown

½©ÀÇ È°¼ºÈ­µÈ ÀÛ¾÷ Å×ÀÌºí¿¡¼­ ƯÁ¤ ÀÛ¾÷À» Áö¿ö¹ö¸³´Ï´Ù.

jobs

¹é±×¶ó¿îµå·Î µµ´Â ÀÛ¾÷ ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù. ps¸¸Å­ ¾µ¸¸ÇÏÁø ¾Ê½À´Ï´Ù.

times

¸í·É¾î¸¦ ½ÇÇàÇÏ´Â µ¥ ¾²ÀÎ ½Ã½ºÅÛ ½Ã°£¿¡ ´ëÇÑ Åë°è Á¤º¸¸¦ ´ÙÀ½ Çü½ÄÀ¸·Î º¸¿©ÁÝ´Ï´Ù.
0m0.020s 0m0.020s
Á¦ÇÑµÈ ¹üÀ§ÀÇ °ª¸¸ º¸¿©Áֱ⠶§¹®¿¡ ½© ½ºÅ©¸³Æ®¸¦ ÇÁ·ÎÆÄÀÏÇϰųª º¥Ä¡¸¶Å©Çϴµ¥ ¾²ÀÌÁö´Â ¾Ê½À´Ï´Ù.

kill

Àû´çÇÑ Á¾·á ½Ã±×³ÎÀ» ÁÖ¾î ÇÁ·Î¼¼½º¸¦ °­Á¦·Î ³¡³»°Ô ÇÕ´Ï´Ù(예 3-68 Âü°í).

참고: kill -l¸¦ ÇÏ¸é ¸ðµç "½Ã±×³Î"À» º¼ ¼ö ÀÖ½À´Ï´Ù(½Ã±×³Î¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº 3.26절 Âü°í).

주석

[1]

Ç÷¡±×¶õ ÀÏÁ¾ÀÇ ½Åȣó·³ µ¿ÀÛÇÏ´Â ÀÎÀÚ·Î ½ºÅ©¸³Æ®ÀÇ ÇൿÀ» Ű°Å³ª ²ô´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.