34.2. ½© ·¡ÆÛ(Shell Wrappers)

"·¡ÆÛ"¶õ ½Ã½ºÅÛ ¸í·É¾î³ª À¯Æ¿¸®Æ¼µéÀ» ÇØ´ç ¸Å°³º¯¼öµé°ú ÇÔ²² ½© ½ºÅ©¸³Æ®·Î ¸¸µé¾î µÎ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ¸í·É¾îÁÙ¿¡¼­ ¾ÆÁÖ º¹ÀâÇÏ°Ô ºÎ¸¦ ¸í·É¾î¸¦ ½ºÅ©¸³Æ®·Î ¸¸µé¾î µÎ¸é ½ÇÇà ½Ãų ¶§ ¾ÆÁÖ °£´ÜÇØ Áý´Ï´Ù. ƯÈ÷ sed¿Í awk¿¡ ÀÌ ½© ·¡ÆÛ¸¦ ¾²¸é ¾ÆÁÖ ÁÁ½À´Ï´Ù.

sed ³ª awk ½ºÅ©¸³Æ®´Â ¸í·É¾î ÁÙ¿¡¼­ sed -e 'commands'¶ó°í Ä¡°Å³ª awk 'commands'À̶ó°í Ãļ­ ½ÇÇà ½Ãų ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± ½ºÅ©¸³Æ®¸¦ Bash ½ºÅ©¸³Æ® ¾È¿¡¼­ »ç¿ëÇÏ°Ô µÇ¸é Á» ´õ °£´ÜÇÏ°Ô ¾µ ¼ö ÀÖ°í "Àç»ç¿ë"ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î sedÀÇ Ãâ·Â°ú awkÀÇ ÀÔ·ÂÀ» ÆÄÀÌÇÁ·Î ¿¬°áÇÏ´Â °Íó·³ sed¿Í awkÀÇ ±â´ÉÀ» ¿¬°áÇؼ­µµ ¾µ ¼öµµ ÀÖ½À´Ï´Ù. ÀúÀåµÈ ½ÇÇà ÆÄÀÏÀ̶ó¸é ´Ù½Ã Ä¡´Â ºÒÆíÇÔ ¾øÀÌ ¿ø·¡ Çüųª ¾à°£ º¯°æµÈ ÇüÅ·Π°è¼Ó ½ÇÇà ½Ãų¼ö°¡ ÀÖ½À´Ï´Ù.

¿¹ 34-1. ½© ·¡ÆÛ(shell wrapper)

#!/bin/bash

# ÆÄÀÏ¿¡¼­ ºó ÁÙÀ» Áö¿öÁÖ´Â °£´ÜÇÑ ½ºÅ©¸³Æ®.
# ÀÎÀÚ È®ÀÎ ¾È ÇÔ.

# ¸í·É¾îÁÙ¿¡¼­ 
#    sed -e '/^$/d' filename
# À̶ó°í ÇÏ´Â °Í°ú ¶È°°À½.

sed -e /^$/d "$1"
# '-e'´Â ´ÙÀ½¿¡ ³ª¿À´Â °ÍÀ» "ÆíÁý" ¸í·É¾î·Î Çؼ®(¿©±â¼­´Â ³Ö¾îµµ µÇ°í ¾È ³Ö¾îµµ µÊ).
# '^'´Â Á٠óÀ½, '$'´Â ÁÙ ³¡.
# Á٠óÀ½°ú ÁÙ ³¡ »çÀÌ¿¡ ¾Æ¹« °Íµµ ¾ø´Â °Í(ºó ÁÙ)°ú ÀÏÄ¡.
# 'd' ´Â »èÁ¦ ¸í·É¾î.

#  ¸í·É¾îÁÙ ÀÎÀÚ¸¦ Äõ¿ìÆ® ÇØ ÁÖ¸é ÆÄÀÏÀ̸§¿¡
#+ °ø¹é¹®ÀÚ³ª Ư¼ö¹®ÀÚ°¡ µé¾î°¡µµ »ó°ü¾ø½À´Ï´Ù.

exit 0

¿¹ 34-2. Á¶±Ý º¹ÀâÇÑ ½© ·¡ÆÛ(shell wapper)

#!/bin/bash

# "subst", ÆÄÀÏ¿¡¼­ ¾î¶² ÆÐÅÏÀ» ´Ù¸¥ ÆÐÅÏÀ¸·Î ¹Ù²ãÁÖ´Â ½ºÅ©¸³Æ®.
# Áï, "subst Smith Jones letter.txt".

ARGS=3
E_BADARGS=65   # ÇÊ¿äÇÑ ÀÎÀÚ°¡ ºüÁ®ÀÖÀ½.

if [ $# -ne "$ARGS" ]
# ½ºÅ©¸³Æ®·Î ³Ñ°ÜÁø ÀÎÀÚÀÇ °¹¼ö¸¦ È®ÀÎ(Ç×»ó ÀÌ·¸°Ô Çϼ¼¿ä).
then
  echo "»ç¿ë¹ý: `basename $0` old-pattern new-pattern filename"
  exit $E_BADARGS
fi

old_pattern=$1
new_pattern=$2

if [ -f "$3" ]
then
    file_name=$3
else
    echo "\"$3\" Àº ¾ø´Â ÆÄÀÏÀÔ´Ï´Ù."
    exit $E_BADARGS
fi

# ¿©±â°¡ °¡Àå Áß¿äÇÑ ºÎºÐÀÔ´Ï´Ù.
sed -e "s/$old_pattern/$new_pattern/g" $file_name
# 's'´Â sedÀÇ Ä¡È¯(substitution) ¸í·É¾îÀÌ°í,
# /pattern/ Àº ÁÖ¼Ò ¸ÅĪÀ» ½ÇÇà½Ãŵ´Ï´Ù.
#  Àü¿ª(global) Ç÷¡±×ÀÎ "g"¸¦ ¾²¸é ´ÜÁö ù¹ø° ÀÏÄ¡ÇÏ´Â $old_pattern¸¸ 
#+ ġȯ½ÃÅ°Áö ¾Ê°í °¢ ÁÙ¿¡¼­ ÀÏÄ¡ÇÏ´Â "¸ðµç" $old_patternÀ» ġȯ½Ãŵ´Ï´Ù.
# ´õ ÀÚ¼¼ÇÑ ¼³¸íÀº 'sed' ¹®¼­¸¦ Àо¼¼¿ä.

exit 0    # ½ºÅ©¸³Æ®ÀÇ ½ÇÇàÀÌ ¼º°øÀ̶ó¸é 0À» ¸®ÅÏ.

¿¹ 34-3. awk ½ºÅ©¸³Æ® ½© ·¡ÆÛ(shell wrapper)

#!/bin/bash

# ´ë»ó ÆÄÀÏ¿¡¼­ ÁÖ¾îÁø ¿­À» ´Ù ´õÇϱâ.

ARGS=2
E_WRONGARGS=65

if [ $# -ne "$ARGS" ] # ¸í·É¾îÁÙ ÀÎÀÚ ¼ö°¡ Àû´çÇÑÁö È®ÀÎ.
then
   echo "»ç¿ë¹ý: `basename $0` filename column-number"
   exit $E_WRONGARGS
fi

filename=$1
column_number=$2

# ½© º¯¼ö¸¦ awk ¿¡°Ô ³Ñ±â´Â °ÍÀº ¾à°£ ±î´Ù·Ó½À´Ï´Ù.
# ´õ ÀÚ¼¼ÇÑ °ÍÀº awk ¹®¼­¸¦ Âü°íÇϼ¼¿ä.

# ¿©·¯ÁÙÂ¥¸® awk ½ºÅ©¸³Æ®´Â    awk ' ..... '   ó·³ ºÎ¸£¸é µË´Ï´Ù.


# awk ½ºÅ©¸³Æ® ½ÃÀÛ.
# -----------------------------
awk '

{ total += $'"${column_number}"'
}
END {
     print total
}     

' "$filename"
# -----------------------------
# awk ½ºÅ©¸³Æ® ³¡.


#   ½© ½ºÅ©¸³Æ®¿¡ ³»ÀåµÈ awk ½ºÅ©¸³Æ®¿¡°Ô ½© º¯¼ö¸¦ ³Ñ±â´Â °ÍÀº 
#   ¾ÈÀüÇÏÁö ¾ÊÀ» ¼ö°¡ Àֱ⠶§¹®¿¡, Stephane Chazelas °¡ ´ÙÀ½°ú °°Àº ´ë¾ÈÀ» 
#   Á¦¾ÈÇØ ÁÖ¾ú½À´Ï´Ù:
#   ---------------------------------------
#   awk -v column_number="$column_number" '
#   { total += $column_number
#   }
#   END {
#       print total
#   }' "$filename"
#   ---------------------------------------


exit 0

Çϳª·Î µÈ ¸¸´É ÅøÀ̳ª ½ºÀ§½º ±º¿ë Ä® °°Àº ±â´ÉÀÌ ÇÊ¿äÇÑ ½ºÅ©¸³Æ®µéÀ» À§ÇØ ÆÞÀÌ ÀÖ½À´Ï´Ù. ÆÞÀº sed¿Í awkÀÇ ±â´ÉÀ» ¹­¾î C ÀÇ Å« ¼­ºê¼ÂÀ¸·Î ¸¸µì´Ï´Ù. ¸ðµâ·Î µ¿ÀÛÇÏ¸ç °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹Ö¿¡¼­ ºÎ¾ý ½ÌÅ©´ë±îÁö ¸ðµç °ÍÀ» Áö¿øÇÕ´Ï´Ù. ªÀº ÆÞ ½ºÅ©¸³Æ®´Â ½© ½ºÅ©¸³Æ® »ó¿¡¼­ È¿°úÀûÀ¸·Î ¾²ÀÏ ¼ö ÀÖ°í, ÆÞÀÌ ½© ½ºÅ©¸³Æ®¸¦ ¿ÏÀüÈ÷ ´ëüÇÒ ¼ö ÀÖÀ» °Å¶õ ¾ê±âµµ ÀÖÁö¸¸ ÀúÀÚ´Â ±×·¸°Ô »ý°¢ÇÏÁö ¾Ê½À´Ï´Ù.

¿¹ 34-4. Bash ½ºÅ©¸³Æ®¿¡ ³»ÀåµÈ ÆÞ

#!/bin/bash

# ÆÞ ½ºÅ©¸³Æ®º¸´Ù ½© ½ºÅ©¸³Æ®°¡ ¸ÕÀú ¿Ã ¼ö ÀÖ½À´Ï´Ù.
echo "\"$0\" ¿¡¼­ ³»ÀåµÈ ÆÞ ½ºÅ©¸³Æ®º¸´Ù ¸ÕÀú µîÀå."
echo "==============================================================="

perl -e 'print "³»ÀåµÈ ÆÞ ½ºÅ©¸³Æ® ºÎºÐ.\n"'
# sed ó·³ ÆÞµµ "-e" ¿É¼ÇÀ» ¾¹´Ï´Ù.

echo "==============================================================="
echo "ÇÏÁö¸¸, ½ºÅ©¸³Æ®¿¡´Â ½©À̳ª ½Ã½ºÅÛ ¸í·É¾î°¡ ¿Ã ¼öµµ ÀÖ½À´Ï´Ù."

exit 0

½ÉÁö¾î´Â Bash ½ºÅ©¸³Æ®¿Í ÆÞ ½ºÅ©¸³Æ®¸¦ ÇÑ ÆÄÀÏ¿¡¼­ °°ÀÌ ¾µ ¼öµµ ÀÖ½À´Ï´Ù. ±× ½ºÅ©¸³Æ®°¡ ¾î¶»°Ô ºÒ¸®³Ä¿¡ µû¶ó Bash ºÎºÐÀÌ ½ÇÇàµÉÁö ÆÞ ºÎºÐÀÌ ½ÇÇàµÉÁö°¡ °áÁ¤µË´Ï´Ù.

¿¹ 34-5. Çϳª·Î ¹­ÀÎ Bash ½ºÅ©¸³Æ®¿Í ÆÞ ½ºÅ©¸³Æ®

#!/bin/bash
# bashandperl.sh

echo "½ºÅ©¸³Æ®ÀÇ Bash ÂÊ¿¡¼­ º¸³»´Â ÃàÇÏ ¸Þ¼¼Áö."
# ÀÌ ´ÙÀ½¿¡ Bash ¸í·É¾î°¡ ´õ ¿Ã ¼ö ÀÖ½À´Ï´Ù.

exit 0
# Bash ºÎºÐÀÇ ³¡.

# =======================================================

#!/usr/bin/perl
# ÀÌ ºÎºÐÀº -x ¿É¼ÇÀ» Áà¾ß ½ÇÇàµË´Ï´Ù.

print "½ºÅ©¸³Æ®ÀÇ ÆÞ ÂÊ¿¡¼­ º¸³»´Â ÃàÇÏ ¸Þ¼¼Áö.\n";
# ÀÌ ´ÙÀ½¿¡ ÆÞ ¸í·É¾î°¡ ´õ ¿Ã ¼ö ÀÖ½À´Ï´Ù.

# ÆÞ ºÎºÐÀÇ ³¡.

bash$ bash bashandperl.sh
½ºÅ©¸³Æ®ÀÇ Bash ÂÊ¿¡¼­ º¸³»´Â ÃàÇÏ ¸Þ¼¼Áö.


bash$ perl -x bashandperl.sh
½ºÅ©¸³Æ®ÀÇ ÆÞ ÂÊ¿¡¼­ º¸³»´Â ÃàÇÏ ¸Þ¼¼Áö.