3.2. ½© ½ºÅ©¸³Æ®ÀÇ Æ¯¼ö ¹®ÀÚµé

#

ÁÖ¼®. #À¸·Î ½ÃÀÛÇÏ´Â ÁÙÀº ÁÖ¼® 󸮵˴ϴÙ. (#!¸¸ »©°í)

# ÀÌ ÁÙÀº ÁÖ¼®ÀÔ´Ï´Ù.

¸í·É¾î ³¡¿¡´Ù ÁÖ¼®À» ÀûÀ» ¼öµµ ÀÖ½À´Ï´Ù.

echo "µÚ¿¡ ÁÖ¼®ÀÌ ºÙ½À´Ï´Ù." # ¿©±â¿¡ ÁÖ¼® ´Þ±â.
		

ÁÙ ¸Ç ¾ÕÀÇ ºó Ä­ µÚ¿¡¼­ºÎÅÍ ¾µ ¼öµµ ÀÖ½À´Ï´Ù.

	# ÅÇÀÌ ÀÌ ÁÖ¼® ¾Õ¿¡ ÀÖ½À´Ï´Ù.
		

경고

°°Àº ÁÙ¿¡¼­´Â ÁÖ¼® µÚ¿¡ ¸í·É¾î°¡ ¿Ã ¼ö ¾ø½À´Ï´Ù. ÁÖ¼®°ú "½ÇÁ¦ ÄÚµå"¸¦ ±¸ºÐÇÒ ¹æ¹ýÀÌ ¾ø±â ¶§¹®¿¡ ´ÙÀ½ ¸í·É¾î´Â ´ÙÀ½ ÁÙ¿¡¼­ ¾²½Ê½Ã¿À.

;

¸í·É¾î ±¸ºÐÀÚ. ÇÑ ÁÙ¿¡ 2°³ ÀÌ»óÀÇ ¸í·É¾î¸¦ ¾µ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.

echo hello; echo there

;Àº °¡²û À̽ºÄÉÀÌÇÁ(¿Å±äÀÌ: Ư¼öÇÑ Àǹ̸¦ °®´Â ¹®ÀÚ¿¡¼­ Ư¼öÇÑ Àǹ̸¦ ¾ø¾Ö°í ¹®ÀÚ ±× ÀÚü·Î ÀνĽÃŰ´Â ÀÏ)½Ãų Çʿ䰡 ÀÖ½À´Ï´Ù(\).

.

"Á¡(dot)" ¸í·É¾î. source¶õ ¸í·É¾î¿Í °°½À´Ï´Ù(예 3-44 Âü°í).

:

³Î ¸í·É¾î. Á¾·á »óÅ 0, Âü°ú °°À½

¹«ÇÑ ·çÇÁ:

while :
do
   operation-1
   operation-2
   ...
   operation-n
done

if/then Å×½ºÆ® ¹®¿¡¼­ Placeholder:

if condition
then :   # ¾Æ¹«°Íµµ ¾È ÇÏ°í °è¼Ó ÁøÇà
else
   ¾î¶²-ÀÛ¾÷
fi

ÀÌÁø ¿¬»êÀÌ ÇÊ¿äÇÒ ¶§ placeholder¸¦ Á¦°ø, 3.3.1절 Âü°í.

: ${username=`whoami`}
# ${username=`whoami`}   ¸Ç ¾ÕÀÇ : °¡ ¾øÀ¸¸é ¿¡·¯
            

"ÀÎÀÚ ¹Ù²Ù±â"¸¦ ½á¼­ º¯¼öµéÀÇ ¹®ÀÚ¿­À» °è»êÇÒ ¶§, 예 3-6 Âü°í:

: ${HOSTNAME?} ${USER?} ${MAIL?}

ÇʼöÀûÀΠȯ°æ º¯¼ö°¡ Çϳª¶óµµ ¼¼Æ®µÇ¾î ÀÖÁö ¾Ê´Ù¸é ¿¡·¯ ¸Þ¼¼Áö¸¦ Ãâ·Â.

()

¸í·É¾î ±×·ì.
(a=hello; echo $a)

참고: °ýÈ£·Î ¹­ÀÎ ¸í·É¾îµéÀº ¼­ºê ½©¿¡¼­ µ¿ÀÛÇÕ´Ï´Ù(3.16절 Âü°í).

${}

ÀÎÀÚ ¹Ù²Ù±â.

ÀÚ¼¼ÇÑ »çÇ×Àº 3.3절 Âü°í.

{xxx,yyy,zzz,...}

Áß°ýÈ£ È®Àå.
grep Linux {file?.txt,*.list}
# "fileA.txt", "file2.txt", "word.list", "vegetable.list", µîÀÇ ÆÄÀÏ¿¡¼­ 
# Linux°¡ µé¾î ÀÖ´Â °ÍÀ» ¸ðµÎ ãÀ½

¸í·É¾î´Â Áß°ýÈ£¼Ó, ÄÞ¸¶·Î ºÐ¸®µÈ ÆÄÀÏ ½ºÆå¿¡ µû¶ó µ¿ÀÛÇÒ °ÍÀÔ´Ï´Ù. ÆÄÀÏ ½ºÆåÀº ÆÄÀϸí È®Àå(¿ÍÀÏµå ¹®ÀÚ)ÀÌ Àû¿ëµË´Ï´Ù.

주의

Áß°ýÈ£ ¾È¿¡´Â °ø¹éÀÌ ¾ø¾î¾ß ÇÕ´Ï´Ù.

{}

ÄÚµå ºí·°. "ÀζóÀÎ ±×·ì"À̶ó°íµµ ÇÏ´Â Áß°ýÈ£ ÇÑ ½ÖÀº ½ÇÁ¦´Â À͸í ÇÔ¼ö¸¦ ¸¸µé¾î ³À´Ï´Ù. ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô ½ºÅ©¸³Æ® ³ª¸ÓÁö ºÎºÐµé°ú ºÐ¸®¸¦ ½ÃÄÑÁÝ´Ï´Ù. Áï, ºí·°¾È¿¡¼­¸¸ º¸ÀÌ´Â ÀڽŸ¸ÀÇ ·ÎÄà º¯¼ö¸¦ °®½À´Ï´Ù.

ÀÌ ÄÚµå ºí·°Àº I/O ¿Í ÀçÁöÇâÀ» ÁÖ°í ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. I/O ÀçÁöÇâ¿¡ ´ëÇØ¼­´Â 3.13절¸¦ Âü°íÇϼ¼¿ä.

예 3-2. ÄÚµå ºí·°°ú I/O ÀçÁöÇâ

#!/bin/bash

{
read fstab
} < /etc/fstab

echo "/etc/fstab ÀÇ Ã¹¹øÂ° ÁÙÀº:"
echo "$fstab"

exit 0

예 3-3. ÄÚµå ºí·°ÀÇ °á°ú¸¦ ÆÄÀÏ·Î ÀúÀåÇϱâ

#!/bin/bash

#                rpm-check
#                ---------
# rpm ÆÄÀÏ¿¡ Äõ¸®¸¦ ´øÁ® ¼³¸í, ¸ñ·Ï, ¼³Ä¡ ¿©ºÎ¸¦ ¾Ë¾Æ³À´Ï´Ù.
# °á°ú´Â ÆÄÀÏ·Î ÀúÀåµË´Ï´Ù.
# 
# ÀÌ ½ºÅ©¸³Æ®´Â ÄÚµå ºí·°À» ¾î¶»°Ô ¾²´ÂÁö¸¦ º¸¿©ÁÝ´Ï´Ù.

NOARGS=1

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

{ 
  echo
  echo "¾ÆÄ«ÀÌºê ¼³¸í:"
  rpm -qpi $1  # ¼³¸íÀ» Äõ¸®ÇÔ
  echo
  echo "¾ÆÄ«ÀÌºê ¸ñ·Ï:"
  rpm -qpl $1  # ¸ñ·ÏÀ» Äõ¸®ÇÔ
  echo
  rpm -i --test $1  # rpm ÆÄÀÏÀÌ ¼³Ä¡ µÉ ¼ö ÀÖ´ÂÁö¸¦ Äõ¸®ÇÔ
  if [ ! $? ]
  then
    echo "$1 ´Â ¼³Ä¡ µÉ ¼ö ÀÖ½À´Ï´Ù."
  else
    echo "$1 ´Â ¼³Ä¡ µÉ ¼ö ¾ø½À´Ï´Ù."
  fi  
  echo
} > $1.test  # ÄÚµå ºí·°ÀÇ ¸ðµç °á°ú¸¦ ÆÄÀÏ·Î ÀçÁöÇâ ½Ãŵ´Ï´Ù.

echo "rpm È®ÀÎ °á°ú°¡ $1.test ÆÄÀÏ¿¡ ÀúÀåµÇ¾ú½À´Ï´Ù."

# rpm ¿É¼Ç¿¡ ´ëÇÑ ¼³¸íÀº rpm ¸Ç ÆäÀÌÁö¸¦ Âü°íÇϼ¼¿ä.

exit 0
/{}

ÆÄÀÏ °æ·Î¸í. ÁÖ·Î 'find'¿¡¼­ ¾²ÀÔ´Ï´Ù.

> >& >> <

ÀçÁöÇâ.

scriptname >filename Àº scriptname ÀÇ Ãâ·ÂÀ» filenameÀ¸·Î ÀçÁöÇâÇÕ´Ï´Ù. filename ÀÌ ÀÌ¹Ì ÀÖ´Ù¸é µ¤¾î ¾¹´Ï´Ù.

command >&2 Àº command ÀÇ Ãâ·ÂÀ» Ç¥ÁØ¿¡·¯·Î ÀçÁöÇâÇÕ´Ï´Ù.

scriptname >>filename Àº scriptname ÀÇ Ãâ·ÂÀ» filename ¿¡ µ¡ºÙÀÔ´Ï´Ù. filename ÀÌ ¾ø´Ù¸é »õ·Î ¸¸µé°ÍÀÔ´Ï´Ù.

´õ ÀÚ¼¼ÇÑ »çÇ×Àº 3.13절¸¦ Âü°íÇϽʽÿÀ.

<<

"here document"¿ë ÀçÁöÇâ. 3.24절¸¦ Âü°íÇϼ¼¿ä.

|

ÆÄÀÌÇÁ. ¿©·¯ ¸í·É¾îµéÀ» ¹­À» ¶§ ¾²´Âµ¥, ¸í·É¾îÀÇ Ãâ·ÂÀ» ´ÙÀ½ ¸í·É¾î³ª ½©¿¡°Ô ³Ñ°ÜÁÝ´Ï´Ù.

echo ls -l | sh
"ls -l" ÀÇ Ãâ·ÂÀ» ½©¿¡°Ô ³Ñ±â´Âµ¥ ±×³É "ls -l" À̶ó°í ÇßÀ» ¶§¶û ¶È°°½À´Ï´Ù.

cat *.lst | sort | uniq
.lst ÀÇ °á°ú¸¦ Á¤·ÄÇϰí Áߺ¹µÇ´Â ÁÙµéÀ» Á¦°ÅÇÕ´Ï´Ù.

참고: ÆÄÀÌÇÁ·Î ¿¬°áµÈ ¸í·É¾îÁß Çϳª°¡ Ãë¼ÒµÈ´Ù¸é Àüü ½ÇÇàÀÌ Ãë¼ÒµÇ´Âµ¥ À̸¦ broken pipe¶ó°í ÇÕ´Ï´Ù. ÀÌ ¶§ SIGPIPE ½Ã±×³ÎÀ» ¹ß»ý½Ãŵ´Ï´Ù.(½Ã±×³Î¿¡ ´ëÇØ¼­´Â 3.26절 Âü°í)

>|

°­Á¦ ÀçÁöÇâ(ȯ°æ º¯¼ö noclobber°¡ ÄÑÀú ÀÖ´õ¶óµµ). ÆÄÀÏÀÌ ÀÖ´õ¶óµµ °­Á¦·Î µ¤¾î ¾²°Ô ÇÕ´Ï´Ù.

-

Ç¥ÁØ ÀԷ¿¡¼­ ȤÀº Ç¥ÁØ Ãâ·ÂÀ¸·Î ÀçÁöÇâ .

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
# ÇÑ µð·ºÅ丮ÀÇ Àüü ÆÄÀÏ ±¸Á¶¸¦ ´Ù¸¥ µð·ºÅ丮·Î ¿Å±è
# [¾Ë¶õ ÄÛ½º(Alan Cox, a.cox@swansea.ac.uk)¿¡ °¨»ç]
#
# °á±¹ °°Àº µ¿ÀÛÀÌÁö¸¸ ´õ ¿ì¾ÆÇÑ ¹æ¹ý:
# cd source-directory
# tar cf - . | (cd ../target-directory; tar xzf -)

bunzip2 linux-2.4.3.tar.bz2 | tar xvf -
# --¾ÐÃàµÈ tar ÆÄÀÏÀ» Ǭ ´ÙÀ½ --    | --"tar"¿¡°Ô ³Ñ°ÜÁÜ--
# "tar" °¡ bunzip2¸¦ ó¸®ÇÏÁö ¸øÇÑ´Ù¸é 
# ÆÄÀÌÇÁ¸¦ ½á¼­ µÎ ´Ü°è·Î ³ª´« ´ÙÀ½ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
# ¿©±â¼­´Â bzipÀ¸·Î ¹­ÀÎ Ä¿³Î ¼Ò½º¸¦ Ǫ´Â °ÍÀ» º¸¿©ÁÝ´Ï´Ù.

"-" ´Â Bash ¿¬»êÀÚ°¡ ¾Æ´ÏÁö¸¸ ¸î¸î À¯´Ð½º À¯Æ¿¸®Æ¼¿¡¼­ ÀνÄÇÏ´Â ¿É¼ÇÀÔ´Ï´Ù.

ÆÄÀϸíÀ¸·Î Ãâ·ÂÀÌ µÉ °ÍÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î ÀçÁöÇâ ½Ãŵ´Ï´Ù. (º¸Åë tar cf¿¡¼­)

예 3-4. ÇÏ·ç ¾È¿¡ º¯°æµÈ ÆÄÀϵéÀ» ¹é¾÷Çϱâ

#!/bin/bash

# ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÁß ÃÖ±Ù 24 ½Ã°£¾È¿¡ º¯°æµÈ ÆÄÀϵéÀ» 
# Ÿ¸£·Î ¹­°í gzipÀ¸·Î ¾ÐÃàÇØ¼­ ¹é¾÷

if [ $# = 0 ]
then
  echo "»ç¿ë¹ý: `basename $0` filename"
  exit 1
fi  

tar cvf - `find . -mtime -1 -type f -print` > $1.tar
gzip $1.tar

exit 0
-

¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮. cd - ´Â ¹Ù·Î Àü ÀÛ¾÷ µð·ºÅ丮·Î ¿Å°Ü°©´Ï´Ù. $OLDPWD ȯ°æ º¯¼ö°¡ Àü ÀÛ¾÷ µð·ºÅ丮 Á¤º¸¸¦ °®°í ÀÖ½À´Ï´Ù(3.7절 Âü°í).

경고

ÀçÁöÇâ ¿¬»êÀÚÀÎ "-" ¿Í Çò°¥¸®¸é ¾È µË´Ï´Ù. Bash°¡ »óȲ¿¡ µû¶ó ¾Ë¸Â°Ô ÇØ¼®À» ÇØ ÁÝ´Ï´Ù.

~

Ȩ µð·ºÅ丮. ~terminus ´Â terminusÀÇ È¨ µð·ºÅ丮¸¦ ³ªÅ¸³»°í ls ~terminus ´Â terminus Ȩ µð·ºÅ丮 ³»¿ëÀ» º¸¿©ÁÝ´Ï´Ù. ~/ ´Â ÇöÀç »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮¸¦ ³ªÅ¸³»°í ls ~/ ´Â ÇöÀç »ç¿ëÀÚ È¨ µð·ºÅ丮 ³»¿ëÀ» º¸¿©ÁÝ´Ï´Ù.

°ø¹é ¹®ÀÚ

±â´ÉÀÇ ºÐ¸®, ¸í·É¾î³ª º¯¼öÀÇ ±¸ºÐ. °ø¹é ¹®ÀÚ´Â ºó Ä­, ÅÇ, ºó ÁÙÀÇ Á¶ÇÕµé·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù. º¯¼ö ´ëÀÔ°°Àº »óȲ¿¡¼­´Â °ø¹é ¹®ÀÚ°¡ µé¾î°£´Ù¸é ¹®¹ý ¿¡·¯°¡ »ý±æ °Ì´Ï´Ù.

ºó ÁÙ

ºó ÁÙÀº ½ºÅ©¸³Æ®¿¡¼­ Àǹ̰¡ ¾ø±â ¶§¹®¿¡ ±â´Éº°·Î ±¸ºÐÀ» ½ÃÄѼ­ º¸±â ÆíÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.