3.7. º¯¼ö ´Ù½Ã º¸±â

Àû´çÈ÷ Àß ¾²ÀÎ º¯¼ö´Â ½ºÅ©¸³Æ®¿¡ °­·ÂÇÔ°ú À¯¿¬ÇÔÀ» ÁÙ ¼ö Àֱ⠶§¹®¿¡ º¯¼öÀÇ ¹Ì¹¦ÇÑ Â÷ÀÌÁ¡°ú ´µ¾Ó½º¿¡ ´ëÇØ ÀÚ¼¼È÷ ¹è¿ï Çʿ䰡 ÀÖ½À´Ï´Ù.

³»ºÎ(³»Àå) º¯¼ö

ȯ°æ º¯¼ö´Â ½ºÅ©¸³Æ®ÀÇ µ¿ÀÛ¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.

$IFS

ÀÔ·Â ÇÊµå ±¸ºÐÀÚ

±âº»Àº °ø¹é ¹®ÀÚÁö¸¸ ½°Ç¥·Î ºÐ¸®µÈ µ¥ÀÌŸ ÆÄÀÏÀ» ÆÄ½ÌÇÏ·Á°í ÇÒ °æ¿ìó·³ º¯°æÀÌ °¡´ÉÇÕ´Ï´Ù.

$HOME

»ç¿ëÀÚÀÇ È¨ µð·ºÅ丮, º¸Åë /home/username (예 3-6 Âü°í)

$PATH

½ÇÇà ÆÄÀÏÀÇ °æ·Î, º¸Åë /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, µîµî..

참고: º¸Åë, ÇöÀç "ÀÛ¾÷ µð·ºÅ丮", ./ ´Â º¸¾È Â÷¿ø¿¡¼­ $PATH ¿¡¼­ Á¦¿Ü ½Ãŵ´Ï´Ù.

$PS1

¸í·É¾î ÁÙ¿¡¼­ ¾²ÀÌ´Â ¸ÞÀÎ ÇÁ·ÒÇÁÆ®ÀÔ´Ï´Ù.

$PS2

Ãß°¡ ÀÔ·Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÒ ¶§ ¾²ÀÌ´Â 2Â÷ ÇÁ·ÒÇÁÆ®ÀÔ´Ï´Ù. ">", ÀÌ·¸°Ô º¸ÀÔ´Ï´Ù.

$PS3

3Â÷ ÇÁ·ÒÇÁÆ®·Î select ·çÇÁ¿¡¼­ ¾²ÀÔ´Ï´Ù (예 3-37 Âü°í).

$PS4

4Â÷ ÇÁ·ÒÇÁÆ®·Î, ½ºÅ©¸³Æ®¸¦ -x ¿É¼ÇÀ¸·Î ºÒ·¶À» ¶§, Ãâ·Â ÁÙ¸¶´Ù "+"¸¦ ÁÙ ¾Õ¿¡ ºÙ¿© ÁÝ´Ï´Ù.

$PWD

ÇöÀç ÀÛ¾÷ µð·ºÅ丮

#!/bin/bash

WRONG_DIRECTORY=33

clear # ½ºÅ©¸°À» Áö¿ò.

TargetDirectory=/home/bozo/projects/GreatAmericanNovel

cd $TargetDirectory
echo "$TargetDirectory ¿¡ ÀÖ´Â ¾È ¾²´Â ÆÄÀϵéÀ» Áö¿ó´Ï´Ù."

if [ $PWD != $TargetDirectory ]  # ½Ç¼ö·Î ´Ù¸¥ µð·ºÅ丮¸¦ ³¯·Á ¹ö¸®Áö ¾Ê°Ô Çϱâ À§Çؼ­
then
  echo "´Ù¸¥ µð·ºÅ丮ÀÔ´Ï´Ù!"
  echo "ÇöÀç $TargetDirectory °¡ ¾Æ´Ï°í $PWD ¿¡ ÀÖ½À´Ï´Ù!"
  echo "±×³É Á¾·áÇÕ´Ï´Ù!"
  exit $WRONG_DIRECTORY
fi  

rm -rf *
rm .[A-Za-z0-9]*    # µµÆ® ÆÄÀϵé(dotfiles)À» Áö¿ì±â.

# ÇÊ¿äÇÏ´Ù¸é ¿©±â¼­ ´Ù¸¥ ÀÛ¾÷µéÀ» ¼öÇà

echo
echo "³¡."
echo "$TargetDirectory ¿¡ ÀÖ´Â ÆÄÀÏÀ» ´Ù Áö¿ü½À´Ï´Ù."
echo


exit 0

$OLDPWD

¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮

$EDITOR

½ºÅ©¸³Æ®°¡ ºÎ¸¦ ±âº» ¿¡µðÅÍ·Î º¸Åë vi ³ª emacs ÀÔ´Ï´Ù.

$TMOUT

TMOUT ȯ°æ º¯¼ö¸¦ 0ÀÌ ¾Æ´Ñ °ª timeÀ¸·Î ¼³Á¤ÇÏ¸é ¼¿ ÇÁ·ÒÇÁÆ®´Â ±× ½Ã°£ÀÌ Áö³ª¸é ·Î±×¾Æ¿ôÀÌ µË´Ï´Ù.

참고: ºÒÇàÇϰԵµ TMOUTÀº ÄֻܼóÀÇ ½© ÇÁ·ÒÇÁÆ®³ª xterm(hanterm)¿¡¼­¸¸ µ¿ÀÛÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ½ºÅ©¸³Æ® »ó¿¡¼­ read »ç¿ë½Ã TMOUTÀ» ¾²·Á´Â °æ¿ì¿¡´Â Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.

ŸÀÓ ¾Æ¿ôÀ» ½© ½ºÅ©¸³Æ®¿¡¼­ ±¸ÇöÇÒ ¼ö´Â ÀÖÀ¸³ª ±×·¸°Ô È¿°úÀûÀÌÁö ¾Ê½À´Ï´Ù. ŸÀÓ ¾Æ¿ôÀÌ ³µÀ» ¶§ ŸÀÌ¹Ö ·çÇÁ°¡ ½ºÅ©¸³Æ®¿¡°Ô ½Ã±×³ÎÀ» º¸³»µµ·Ï ¼¼ÆÃÇØ¾ß Çϰí ŸÀÌ¹Ö ·çÇÁ°¡ ¹ß»ý½ÃŲ (예 3-99 Âü°í) ÀÎÅÍ·´Æ®¸¦ ó¸®ÇÒ ½Ã±×³Î ó¸® ·çƾµµ ¸¸µé¾î¾ß ÇÕ´Ï´Ù.(ÈÞ~~ ^^)

#!/bin/bash

# TMOUT=3            ½ºÅ©¸³Æ®¿¡¼­´Â ¾µ¸ð ¾ø½À´Ï´Ù

TIMELIMIT=3  # ¿©±â¼­´Â 3ÃÊ, ´Ù¸¥ °ªÀ¸·Î ¼¼Æ® ÇÒ ¼ö ÀÖ½À´Ï´Ù.

PrintAnswer()
{
  if [ $answer = TIMEOUT ]
  then
    echo $answer
  else       # ´Ù¸¥ ÂÊ¿¡¼­ ºÎ¸£´Â PrintAnswer¿Í Çò°¥¸®Áö ¾Ê±â À§Çؼ­
    echo "´ç½ÅÀÌ °¡Àå ÁÁ¾ÆÇÏ´Â ¾ßä´Â $answer À̱º¿ä."
    kill $!  # ¹é±×¶ó¿îµå¿¡¼­ µµ´Â TimerOn ÇÔ¼ö°¡ ÇÊ¿ä¾ø±â ¶§¹®¿¡ kill ½ÃÅ´.
             #   $! ´Â ¹é±×¶ó¿îµå¿¡¼­ µµ´Â °¡Àå ÃÖ±Ù ÀÛ¾÷ÀÇ PID ÀÔ´Ï´Ù.
  fi

}  



TimerOn()
{
  sleep $TIMELIMIT && kill -s 14 $$ &
  # 3Ãʸ¦ ±â´Ù¸®°í ¾Ë¶÷ ½Ã±×³Î(sigalarm)À» ½ºÅ©¸³Æ®¿¡ º¸³¿
}  

Int14Vector()
{
  answer="TIMEOUT"
  PrintAnswer
  exit 14
}  

trap Int14Vector 14
# ŸÀÌ¸Ó ÀÎÅÍ·´Æ®(14)´Â ¿ì¸® Àǵµ´ë·Î ŸÀӾƿôÀ» ó¸®ÇÔ

echo "Á¦ÀÏ ÁÁ¾ÆÇÏ´Â ¾ßä´Â?"
TimerOn
read answer
PrintAnswer


# ÀÌ´Â ºÐ¸íÈ÷ ŸÀÓ ¾Æ¿ô ÀԷ¿¡ ´ëÇÑ ¹ÌºÀÃ¥ÀÔ´Ï´Ù¸¸,
# bash ·Î ÇÒ ¼ö ÀÖ´Â ÃÖ¼±À» ´ÙÇÑ °ÍÀÔ´Ï´Ù.
# (µ¶Àڵ鿡°Ô µµÀü: ´õ ³ªÀº ÇØ°áÃ¥À» Á¦½ÃÇØ º¸¼¼¿ä.)

# ´õ ¿ì¾ÆÇÑ ´Ù¸¥ °ÍÀÌ ÇÊ¿äÇÏ´Ù¸é C³ª C++¿¡¼­ 'alarm'À̳ª 'setitimer'°°Àº 
# Àû´çÇÑ ¶óÀ̺귯¸® ÇÔ¼ö¸¦ ½á¼­ ±¸ÇöÇϽñ⠹ٶø´Ï´Ù.

exit 0

$SECONDS

½ºÅ©¸³Æ®°¡ ¾ó¸¶³ª µ¹¾Ò´ÂÁö¸¦ ³ªÅ¸³»´Â ÃÊ ´ÜÀ§ ½Ã°£

#!/bin/bash

ENDLESS_LOOP=1

echo
echo "½ºÅ©¸³Æ®¸¦ ³¡³»·Á¸é Control-C ¸¦ ´©¸£¼¼¿ä."
echo

while [ $ENDLESS_LOOP ]
do
  if [ $SECONDS -eq 1 ]
  then
    units=second
  else  
    units=seconds
  fi

  echo "ÀÌ ½ºÅ©¸³Æ®´Â $SECONDS $units µ¿¾È µ¹°í ÀÖ½À´Ï´Ù."
  sleep 1
done


exit 0

$REPLY

read¿¡ º¯¼ö°¡ ¾È ÁÖ¾îÁ³À» ¶§ ÀúÀåµÇ´Â ±âº»°ª. select ¿¡¼­´Â º¯¼öÀÇ °ªÀÌ ¾Æ´Ï¶ó ¼±ÅÃÇÑ ¼ýÀÚ°¡ ÀúÀåµÊ.

#!/bin/bash


echo
echo -n "°¡Àå ÁÁ¾ÆÇÏ´Â ¾ßä´Â? "
read

echo "´ç½ÅÀÌ °¡Àå ÁÁ¾ÆÇÏ´Â ¾ßä´Â $REPLY ÀÔ´Ï´Ù."
# REPLY ´Â ÃÖ±Ù "read"°¡ º¯¼ö ¾øÀÌ ±×³É ¾²ÀÎ °æ¿ì¿¡ ±× °ªÀ» °®°í ÀÖ½À´Ï´Ù.


echo
echo -n "°¡Àå ÁÁ¾ÆÇÏ´Â °úÀÏÀº? "
read fruit
echo "´ç½ÅÀÌ °¡Àå ÁÁ¾ÆÇÏ´Â °úÀÏÀº $fruit ÀÔ´Ï´Ù."
echo "ÇÏÁö¸¸..."
echo "\$REPLY °ªÀº ¿©ÀüÈ÷ $REPLY ÀÔ´Ï´Ù."
# $fruit º¯¼ö°¡ »õ·Î¿î "read" °ªÀ» °¡Á®°¡ ¹ö·È±â ¶§¹®¿¡ $REPLY ´Â ¿©ÀüÈ÷ ±× Àü¿¡
# ¼¼Æ®µÇ¾ú´ø °ªÀ» °®°í ÀÖ½À´Ï´Ù.

echo

exit 0

$BASH

bash ÀÚ½ÅÀÇ °æ·Î¸¦ ³ªÅ¸³»°í º¸ÅëÀº /bin/bashÀÓ.

$BASH_ENV

½ºÅ©¸³Æ®°¡ ½ÇÇàµÉ ¶§ ¾îµð¿¡¼­ bash ½ÃÀÛ ÆÄÀÏÀ» ÀÐÀ» °ÍÀÎÁö¸¦ ³ªÅ¸³»´Â ȯ°æ º¯¼ö.

$0, $1, $2, etc.

À§Ä¡ ÀÎÀڷμ­ ¸í·É¾î ÁÙ¿¡¼­ ½ºÅ©¸³Æ®³ª ÇÔ¼ö·Î Àü´ÞµÇ°Å³ª º¯¼ö¿¡ setÀ» ½ÃÅ´(예 3-20 ¿Í 예 3-40 Âü°í).

$#

¸í·É¾î ÁÙ ÀÎÀÚÀÇ °¹¼ö [1] ³ª À§Ä¡ ÀÎÀÚµé(예 2-4 Âü°í).

$$

½ºÅ©¸³Æ® ÀÚ½ÅÀÇ ÇÁ·Î¼¼½º ID·Î, º¸Åë Àӽà ÆÄÀÏ À̸§À» ¸¸µé¶§ »ç¿ëÇÕ´Ï´Ù (예 A-5 ¿Í 예 3-100 Âü°í).

$?

¸í·É¾î³ª ÇÔ¼ö, ½ºÅ©¸³Æ® ÀÚ½ÅÀÇ Á¾·á »óÅ (예 3-1 ¿Í 예 3-63 Âü°í).

$*

ÇÑ ´Ü¾î·Î Ç¥½ÃµÇ´Â À§Ä¡ ÀÎÀÚµé ¸ðµÎ ´Ù

$@

$*¿Í ¶È°°Áö¸¸ °¢ ÀÎÀÚ´Â µû¿ÈÇ¥·Î ¹­ÀÔ´Ï´Ù. Áï, ÇØ¼®µÇ°Å³ª È®Àå¾øÀÌ ÀÖ´Â ±×´ë·Î ³Ñ°ÜÁý´Ï´Ù. ±× °á°ú·Î °¢ ÀÎÀÚ´Â °¢°¢ÀÌ ¼­·Î ´Ù¸¥ ´Ü¾î·Î ±¸ºÐµÅ¼­ Ç¥½ÃµË´Ï´Ù.

예 3-17. arglist: $* °ú $@ ·Î ÀÎÀÚ¸¦ ³ª¿­Çϱâ

#!/bin/bash
# ÀÌ ½ºÅ©¸³Æ®¿¡ "one two three" µîÀÇ ÀÎÀÚ¸¦ ³Ñ°Ü¼­ ºÎ¸£¼¼¿ä.

if [ ! -n "$1" ]
then
  echo "»ç¿ë¹ý: `basename $0` argument1 argument2 etc."
  exit 1
fi  


echo

index=1

echo "\"\$*\" ·Î ÀÎÀÚ¸¦ ³ª¿­Çϱâ:"
for arg in "$*"  # "$*" ¸¦ µû¿ÈÇ¥·Î ¹­Áö ¾Ê´Â´Ù¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù.
do
  echo "#$index ¹øÂ° ÀÎÀÚ = $arg"
  let "index+=1"
done   # $* ´Â ¸ðµç ÀÎÀÚ¸¦ ÇϳªÀÇ ´Ü¾î·Î º¾´Ï´Ù.
echo "Àüü ÀÎÀÚ ¸ñ·ÏÀº ÇϳªÀÇ ´Ü¾î·Î ³ªÅ¸³³´Ï´Ù."

echo

index=1

echo "\"\$@\" ·Î ÀÎÀÚ¸¦ ³ª¿­Çϱâ:"
for arg in "$@"
do
  echo "#$index ¹øÂ° ÀÎÀÚ = $arg"
  let "index+=1"
done   # $@ ´Â ÀÎÀÚ¸¦ ºÐ¸®µÈ ´Ü¾î·Î º¾´Ï´Ù.
echo "Àüü ÀÎÀÚ ¸ñ·ÏÀº ºÐ¸®µÈ ´Ü¾î·Î ³ªÅ¸³³´Ï´Ù."

echo

exit 0
$-

½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â Ç÷¡±×

경고

¿ø·¡ ksh ¿¡¼­ ¾²´ø °ÍÀ» Bash¿¡¼­ äÅÃÇÑ °ÍÀε¥ ºÒÇàÈ÷µµ Àß µ¿ÀÛÇÏÁö ¾Ê´Â °Í °°½À´Ï´Ù. ½ºÅ©¸³Æ® ÀÚ½ÅÀÌ ´ëÈ­ÇüÀÎÁö ¾Æ´ÑÁö ½º½º·Î È®ÀÎ ÇÏ·Á°í ÇÏ´Â °æ¿ì¿¡³ª ¾µ¸¸ÇÕ´Ï´Ù(3.29절 Âü°í).

$!

¹é±×¶ó¿îµå·Î µ¹°í ÀÖ´Â °¡Àå ÃÖ±Ù jobÀÇ PID (ÇÁ·Î¼¼½º ID)

º¯¼ö ´ëÀÔ

º¯¼ö °ªÀ» ÃʱâÈ­Çϰųª º¯°æÇϱâ

=

´ëÀÔ ¿¬»êÀÚ(¾Õ µÚ·Î °ø¹éÀÌ ÀÖÀ¸¸é ¾È µË´Ï´Ù. )

test¹®¿¡¼­ = °ú -eq À» Çò°¥¸®Áö ¸¶¼¼¿ä.

경고

= Àº »óȲ¿¡ µû¶ó ´ëÀÔ ¿¬»êÀÚµµ µÉ ¼ö ÀÖ°í test ¿¬»êÀÚµµ µÉ ¼ö ÀÖ½À´Ï´Ù.

예 3-18. º¯¼ö ´ëÀÔ

#!/bin/bash

echo

# º¯¼ö°¡ '$' ¾øÀÌ ¾²ÀÏ ¶§¸¦ ¾Ë¾Æº¾½Ã´Ù.

# ÇÒ´ç
a=879
echo "\"a\" °ªÀº $a ÀÔ´Ï´Ù."

# 'let'À¸·Î ÇÒ´ç
let a=16+5
echo "ÀÚ, ÀÌÁ¦ \"a\" °ªÀº $a ÀÔ´Ï´Ù."

echo

# 'for' ·çÇÁ¿¡¼­ (ÁøÂ¥ ÀÏÁ¾ÀÇ ¼ÓÀÓ¼ö ÇÒ´ç)
echo -n "·çÇÁ ¾È¿¡¼­ \"a\" °ªÀº "
for a in 7 8 9 11
do
  echo -n "$a "
done

echo
echo

# 'read' ¹®¿¡¼­ 
echo -n "Enter \"a\" "
read a
echo "\"a\" °ªÀº ÀÌÁ¦ $a ÀÔ´Ï´Ù."

echo

exit 0

예 3-19. Æò¹üÇϰí Àç¹Õ´Â º¯¼ö ´ëÀÔ

#!/bin/bash

a=23
# °£´ÜÇÑ °æ¿ì
echo $a
b=$a
echo $b

# ÀÚ Á» ´õ Àç¹Õ´Â °É º¼±î¿ä...

a=`echo Hello!`
# 'echo' ¸í·É¾îÀÇ °á°ú¸¦ 'a' ¿¡ ÇÒ´çÇÕ´Ï´Ù.
echo $a

a=`ls -l`
# 'ls -l' ¸í·É¾îÀÇ °á°ú¸¦ 'a' ¿¡ ÇÒ´çÇÕ´Ï´Ù.
echo $a

exit 0

$()¸¦ ¾´ º¯¼ö ´ëÀÔ(¿ª µû¿ÈÇ¥º¸´Ù »õ·Î¿î ¹æ¹ý)

# /etc/rc.d/rc.local ¿¡¼­ ¹ßÃé
R=$(cat /etc/redhat-release)
arch=$(uname -m)

Áö¿ª º¯¼ö

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

ȯ°æ º¯¼ö

°æ·Î³ª ½© ÇÁ·ÒÇÁƮó·³ ½©°ú À¯Àú ÀÎÅÍÆäÀ̽º¿¡ ¿µÇâÀ» ÁÖ´Â º¯¼ö¸¦ ȯ°æ º¯¼ö¶ó°í ÇÕ´Ï´Ù.

½ºÅ©¸³Æ®¾È¿¡¼­ ȯ°æ º¯¼ö¿¡ °ªÀ» ¼³Á¤ÇÑ ÈÄ ±× °ªÀÌ ½ºÅ©¸³Æ® ¹Û, ȯ°æ º¯¼ö ¿µ¿ªÀ¸·Î Àü´ÞµÇ°Ô ÇØ¾ß Çϴµ¥ ÀÌ ¶§ ¾²´Â ÇÔ¼ö°¡ exportÀÔ´Ï´Ù.

참고: ½ºÅ©¸³Æ®´Â ¿ÀÁ÷ ÀÚ½ÅÀÇ ÀÚ½Ä ÇÁ·Î¼¼½º(½ºÅ©¸³Æ® ¾È¿¡¼­ ½ÇÇàµÈ ¸í·É¾î³ª ÇÁ·Î¼¼½º)¿¡°Ô¸¸ º¯¼ö¸¦ export ÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­, ¸í·É¾î ÁÙ¿¡¼­ ºÒ¸° ½ºÅ©¸³Æ®´Â ¸í·É¾î Á٠ȯ°æ¿¡ º¯¼ö¸¦ Àü´ÞÇÒ ¼ö ¾ø°í, ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º¿¡°Ô º¯¼ö¸¦ Àü´ÞÇÒ ¼ö ¾ø½À´Ï´Ù.

---

À§Ä¡ ÀÎÀÚ

¸í·É¾î ÁÙ¿¡¼­ ½ºÅ©¸³Æ®·Î ³Ñ¾î¿Â ÀÎÀÚµé, $0, $1, $2, $3... ($0 Àº ½ºÅ©¸³Æ® À̸§, $1 Àº ù¹øÂ° ÀÎÀÚ µîµî)

예 3-20. À§Ä¡ ÀÎÀÚ

#!/bin/bash

echo

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

echo

if [ $1 ]
then
 echo "#1 ÀÎÀÚ´Â $1 ÀÔ´Ï´Ù."
 # # À» À̽ºÄÉÀÌÇÁ ½Ã۱â À§Çؼ­ Àοë(quote)À» ÇØÁà¾ß ÇÕ´Ï´Ù.
fi 

if [ $2 ]
then
 echo "#2 ÀÎÀÚ´Â $2 ÀÔ´Ï´Ù."
fi 

if [ $3 ]
then
 echo "#3 ÀÎÀÚ´Â $3 ÀÔ´Ï´Ù."
fi 

echo

exit 0

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

참고: ¸¸¾à¿¡ ÀÎÀÚ°¡ ÁÖ¾îÁ®¾ß ÇÏ´Â ½ºÅ©¸³Æ®Àε¥ ºüÁ® ÀÖ´Ù¸é °¢°¢ÀÇ À§Ä¡ ÀÎÀڵ鿡°Ô´Â ³Î °ªÀÌ µé¾î°¡¼­ ¿øÄ¡ ¾Ê´Â °á°ú¸¦ °¡Á® ¿Ã°Ì´Ï´Ù. ÀÌ·± »óȲÀ» ÇÇÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº À§Ä¡ ÀÎÀÚ¸¦ º¯¼ö¿¡ ´ëÀÔÇÏ´Â ¹®Àå¿¡¼­ ¾çÂÊ¿¡ ¶È°°Àº ¾Æ¹« ¹®ÀÚ³ª ºÙÀÌ´Â °ÍÀÔ´Ï´Ù.

variable1x=$1x
# ÀÌ·¸°Ô Çϸé À§Ä¡ ÀÎÀÚ°¡ ³Î °ªÀÌ¶óµµ ¿¡·¯¸¦ ¸·¾ÆÁÝ´Ï´Ù.

# º¯¼ö¸¦ ¾µ °÷¿¡¼­ ´ÙÀ½Ã³·³ ÇØÁÖ¸é ¿¡·¯ ¹æÁö¿ë ¹®ÀÚ°¡ Àß·Á³ª°©´Ï´Ù.
variable1=${variable1x/x/}
# ¾Õ¿¡¼­ ¾ê±âÇß´ø ÀÎÀÚ ¹Ù²Ù±âÁß ÇÑ °¡Áö ¹æ¹ýÀ¸·Î º¯°æ ÆÐÅÏÀ» »èÁ¦ÇÕ´Ï´Ù.

---

예 3-21. wh, whois µµ¸ÞÀÎ ³×ÀÓ ·è¾÷(domain name lookup)

#!/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 1
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 Àº ¹Ù²îÁö ¾Ê½À´Ï´Ù. À§Ä¡ ÀÎÀÚ °¹¼ö°¡ ¸¹´Ù¸é shift¸¦ ½á¼­ ¿¹Àü 10°³¸¦ ¾µ ¼ö ÀÖ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.

예 3-22. shift »ç¿ëÇϱâ

#!/bin/bash

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

# ¸ðµç À§Ä¡ ÀÎÀÚ¸¦ ó¸®ÇÏ´Â 'shift' »ç¿ë µ¥¸ð

until [ -z "$1" ]
do
  echo -n "$1 "
  shift
done

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

exit 0

3.7.1. º¯¼ö ŸÀÔ ÁöÁ¤: declare ³ª typeset

declare ³ª typeset(µ¿ÀǾî) ´Â º¯¼öÀÇ Æ¯¼ºÀ» Á¦ÇÑÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸î¸î ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­´Â ÀÌ·¸°Ô ¾î¼³Ç ÇüÅ·ΠŸÀÔÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. declare ´Â bash ¹öÀü 1´ë¿¡¼­´Â ¾µ ¼ö ¾ø½À´Ï´Ù.

-r Àбâ Àü¿ë

declare -r var1

(declare -r var1 ´Â readonly var1 ¿Í ¶È°°ÀÌ µ¿ÀÛÇÕ´Ï´Ù.)

C¿¡¼­ const ÇüÇÑÁ¤¾î¿Í °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù. Àбâ Àü¿ëÀÎ º¯¼ö°ªÀ» ¹Ù²Ù·Á°í ÇÏ¸é ¿¡·¯ ¸Þ¼¼Áö°¡ ³ª¿É´Ï´Ù.

-i Á¤¼ö

declare -i var2

ÀÌ ½ºÅ©¸³Æ®´Â ÀÌ ¼±¾ð ÈÄ ³ª¿À´Â var2À» Á¤¼ö·Î ó¸®ÇÕ´Ï´Ù. ÀÌ·¸°Ô Á¤¼ö·Î ¼±¾ðµÈ º¯¼ö´Â expr³ª let¾øÀÌ »ê¼ú ¿¬»êÀÌ °¡´ÉÇØ Áø´Ù´Â °Í¿¡ ÁÖÀÇÇϼ¼¿ä.

-a array

declare -a index

index´Â ¹è¿­·Î Ãë±ÞµË´Ï´Ù.

-f functions

declare -f  # (ÀÎÀÚ ¾øÀ½)

declare -f ´Â ½ºÅ©¸³Æ®¾ÈÀÇ ¸ðµç ÇÔ¼öµéÀÇ ¸ñ·ÏÀ» ³ªÅ¸³À´Ï´Ù.

-x export

declare -x var3

ÀÌ ¼±¾ðÀº ½ºÅ©¸³Æ® ¿ÜºÎ ȯ°æ¿¡¼­µµ ÀÌ º¯¼ö¸¦ º¼ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù(export).

예 3-23. declare ½á¼­ º¯¼ö ŸÀÔ ÁöÁ¤Çϱâ

#!/bin/bash

declare -f
# ´ÙÀ½¿¡ ³ª¿À´Â ÇÔ¼öµéÀÇ ¸ñ·ÏÀ» º¸¿©ÁÜ.

func1 ()
{
echo ¿©±â´Â ÇÔ¼öÀÔ´Ï´Ù.
}

declare -r var1=13.36
echo "var1 Àº $var1 ·Î ¼±¾ð µÇ¾ú½À´Ï´Ù."
# Àбâ Àü¿ë º¯¼ö¸¦ º¯°æÇÏ·Á°í ÇÔ.
var1=13.37
# ¿¡·¯ ¸Þ¼¼Áö ³ª¿À°í.
echo "var1 Àº ¿©ÀüÈ÷ $var1 ÀÔ´Ï´Ù."

echo

declare -i var2
var2=2367
echo "var2 Àº $var2 ·Î ¼±¾ð µÇ¾ú½À´Ï´Ù."
var2=var2+1
# Á¤¼ö ¼±¾ðÀº 'let' ÀÌ ÇÊ¿ä¾ø°Ô ÇØÁÝ´Ï´Ù.
echo "1ÀÌ Áõ°¡ÇÑ var2 ´Â $var2 ÀÔ´Ï´Ù."
# Á¤¼ö·Î ¼±¾ðµÈ º¯¼ö¸¦ º¯°æÇÏ·Á°í ÇÔ.
echo "var2 ¸¦ ºÎµ¿Çü °ªÀÎ 2367.1·Î º¯°æÇÏ·Á°í ÇÔ."
var2=2367.1
# º¯¼ö°ªÀº ¹Ù²îÁö ¾Ê°í ¿¡·¯ ¸Þ¼¼Áö¸¸ ³ª¿È.
echo "var2 ´Â ¿©ÀüÈ÷ $var2 ÀÔ´Ï´Ù."

exit 0

3.7.2. º¯¼ö °£Á¢ ÂüÁ¶

¾î´À º¯¼ö°ªÀÌ µÚ¿¡ ³ª¿Ã º¯¼öÀÇ À̸§À̶ó°í °¡Á¤Çغ¾½Ã´Ù. ±×·¸´Ù¸é ±× º¯¼ö·Î µÚ¿¡ ³ª¿Ã º¯¼öÀÇ °ªÀ» ¾Ë¾Æ³¾ ¼ö ÀÖÀ»±î¿ä? ¿¹¸¦ µé¸é a=letter_of_alphabetÀ̰í letter_of_alphabet=z¶ó°í ÇÒ ¶§ a¸¦ ÂüÁ¶Çϸé z °¡ ³ª¿Ã±î¿ä? ÀÌ´Â ¿ì¸® »ý°¢´ë·Î µ¿ÀÛÇϰí À̸¦ °£Á¢ ÂüÁ¶¶ó°í ºÎ¸¨´Ï´Ù. eval var1=\$$var2ó·³ ¾à°£Àº ÀÌ»óÇÏ°Ô »ý±ä ÇüÅ·Π½á¸ÔÀ» ¼ö ÀÖ½À´Ï´Ù.

예 3-24. °£Á¢ ÂüÁ¶

#!/bin/bash

# º¯¼ö °£Á¢ ÂüÁ¶.


a=letter_of_alphabet
letter_of_alphabet=z

# Á÷Á¢ ÂüÁ¶.
echo "a = $a"

# °£Á¢ ÂüÁ¶.
eval a=\$$a
echo "Now a = $a"

echo


# ÀÚ, ÀÌÁ¦ °£Á¢ ÂüÁ¶°ªÀ» ¹Ù²ãº¾½Ã´Ù.

t=table_cell_3
table_cell_3=24
eval t=\$$t
echo "t = $t"
# ¾ÆÁ÷Àº ±¦ÂúÁÒ.

table_cell_3=387
eval t=\$$t
echo "tÀÇ °ªÀÌ $t ·Î ¹Ù²î¾ú½À´Ï´Ù."
# ERROR!
# ÀÌ·± ½ÄÀ¸·Î °£Á¢ ÂüÁ¶µÇ´Â º¯¼öÀÇ °ªÀ» ¹Ù²Ü ¼ö´Â ¾ø½À´Ï´Ù.
# ÀÌ·¸°Ô ÇÏ·Á¸é ${!t} Ç¥±â¹ýÀ» ½á¾ß ÇÕ´Ï´Ù.


exit 0

경고

ÀÌ·± ½ÄÀÇ °£Á¢ ÂüÁ¶¿¡´Â ¾àÁ¡ÀÌ Çϳª Àִµ¥ ¸¸¾à¿¡ µÎ¹øÂ° º¯¼ö°ªÀÌ º¯°æµÈ´Ù¸é ù¹øÂ° º¯¼öÀÇ °£Á¢ ÂüÁ¶´Â ¿¡·¯¸¦ ¹ß»ý½Ãŵ´Ï´Ù. ´ÙÇེ·´°Ôµµ ÀÌ ¹®Á¦´Â Bash ¹öÀü 2¿¡¼­ ${!variable} °°Àº »õ·Î¿î Ç¥½Ã¹ýÀ¸·Î ÇØ°áµÆ½À´Ï´Ù(예 3-102 Âü°í).

3.7.3. $RANDOM: ¹«ÀÛÀ§ Á¤¼ö ¸¸µé±â

참고: $RANDOM Àº Bash ³»ºÎ ÇÔ¼ö·Î(»ó¼ö°¡ ¾Æ´Õ´Ï´Ù) 0¿¡¼­ 32767»çÀÌÀÇ °¡»óÀÇ ¹«ÀÛÀ§ Á¤¼ö °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. $RANDOM Àº ¾Ïȣȭ ۸¦ ¹ß»ý½Ã۴µ¥ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

예 3-25. ¹«ÀÛÀ§ ¼ýÀÚ ¸¸µé±â

#!/bin/bash

# $RANDOM Àº ºÒ¸± ¶§¸¶´Ù ´Ù¸¥ ¹«ÀÛÀ§ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.
# ¸íĪ»óÀÇ ¹üÀ§: 0 - 32767 (¾çÀÇ Á¤¼ö).

MAXCOUNT=10
count=1

echo
echo "$MAXCOUNT °³ÀÇ ¹«ÀÛÀ§ °ª:"
echo "-----------------"
while [ $count -le $MAXCOUNT ]      # 10 ($MAXCOUNT) ¹«ÀÛÀ§ Á¤¼ö¸¦ ¹ß»ý.
do
  number=$RANDOM
  echo $number
  let "count += 1"  # Ä«¿îÅÍ Áõ°¡.
done
echo "-----------------"

# ¾î¶² ¼ö º¸´Ù ÀÛÀº ¹«ÀÛÀ§ Á¤¼ö°¡ ÇÊ¿äÇÏ´Ù¸é 
# '³ª¸ÓÁö(modulo)' ¿¬»êÀÚ¸¦ ¾²¸é µË´Ï´Ù.

RANGE=500

echo

number=$RANDOM
let "number %= $RANGE"
echo "$RANGE º¸´Ù ÀÛÀº ¹«ÀÛÀ§ ¼ýÀÚ  -->  $number"

echo

# ƯÁ¤ÇÑ ÇÏÇѰªº¸´Ù Å« ¹«ÀÛÀ§ Á¤¼ö°¡ ÇÊ¿äÇÏ¸é ±× ÇÏÇѰªº¸´Ù ÀÛÀº ¼ö´Â 
# ¹«½ÃÇÏ´Â test ¹®À» °É¸é µË´Ï´Ù.

FLOOR=200

number=0   # ÃʱâÈ­
while [ $number -le $FLOOR ]
do
  number=$RANDOM
done
echo "$FLOOR º¸´Ù Å« ¹«ÀÛÀ§ ¼ýÀÚ  -->  $number"
echo


# »óÇѰª°ú ÇÏÇѰª »çÀÌÀÇ ¼ö°¡ ÇÊ¿äÇÏ´Ù¸é À§ÀÇ µÎ Å×Å©´ÐÀ» °°ÀÌ ¾²¸é µË´Ï´Ù.
number=0   # ÃʱâÈ­
while [ $number -le $FLOOR ]
do
  number=$RANDOM
  let "number %= $RANGE"
done
echo "$FLOOR °ú $RANGE »çÀÌÀÇ ¹«ÀÛÀ§ ¼ýÀÚ  -->  $number"
echo


# "Âü"À̳ª "°ÅÁþ"Áß¿¡ Çϳª¸¦ °í¸£µµ·Ï ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
BINARY=2
number=$RANDOM
let "number %= $BINARY"
if [ $number -eq 1 ]
then
  echo "Âü"
else
  echo "°ÅÁþ"
fi  

echo


# ÁÖ»çÀ§ ´øÁö±â¸¦ Èä³»³» º¼±î¿ä?
SPOTS=7
DICE=2
die1=0
die2=0

# Á¤È®ÇÑ È®·üÀ» À§Çؼ­ µÎ °³ÀÇ ÁÖ»çÀ§¸¦ µû·Î µû·Î ´øÁý½Ã´Ù.

  while [ $die1 -eq 0 ]   # ÁÖ»çÀ§¿¡ 0Àº ¾øÁÒ.
  do
    let "die1 = $RANDOM % $SPOTS"
  done  

  while [ $die2 -eq 0 ]
  do
    let "die2 = $RANDOM % $SPOTS"
  done  

let "throw = $die1 + $die2"
echo "µÎ ÁÖ»çÀ§¸¦ ´øÁø °á°ú = $throw"
echo


exit 0

주석

[1]

"¾Æ±Ô¸ÕÆ®(argument)"³ª "ÆÄ¶ó¹ÌÅÍ(parameter)"´Â ÈçÈ÷ ¼­·Î ¹Ù²ã°¡¸é¼­ ¾²À̱⠶§¹®¿¡ ÀÌ ¹®¼­¿¡¼­´Â ½ºÅ©¸³Æ®³ª ÇÔ¼ö¿¡ ³Ñ°ÜÁö´Â º¯¼ö¸¦ ³ªÅ¸³»´Â ¿ë¾î·Î °°ÀÌ »ç¿ëÇϰڽÀ´Ï´Ù(¿Å±äÀÌ: ¸ðµÎ "ÀÎÀÚ"¶ó°í ¹ø¿ªÇÕ´Ï´Ù).