부록 A. ±âÁõµÈ ½ºÅ©¸³Æ®µé(Contributed Scripts)

ÀÌ ½ºÅ©¸³Æ®µéÀº ÀÌ ¹®¼­ÀÇ ÁÖÁ¦¿¡ µü µé¾î ¸ÂÁö´Â ¾ÊÁö¸¸ ½© ÇÁ·Î±×·¡¹Ö Å×Å©´ÐÀÇ Àç¹Õ´Â ºÎºÐµéÀ» º¸¿©ÁÝ´Ï´Ù. ¶Ç, ¾ÆÁÖ ¾µ¸¸ÇÕ´Ï´Ù. ºÐ¼®ÇØ º¸°í ½ÇÇà½ÃÄÑ º¸¸é¼­ Àç¹Ì¸¦ ´À²¸ º¸¼¼¿ä.

예 A-1. manview: Æ÷¸ËµÈ ¸Ç ÆäÀÌÁö¸¦ º¸´Â ½ºÅ©¸³Æ®

#!/bin/bash

# »ç¿ëÀÚ µð·ºÅ丮¿¡ ÀÖ´Â ¸Ç ÆäÀÌÁö ¼Ò½º¸¦ Æ÷¸ËÈ­ÇØ¼­ º¸¿©ÁÝ´Ï´Ù.
# ¸Ç ÆäÀÌÁö ¼Ò½º¸¦ ÀÛ¼ºÇÏ´Â µµÁß¿¡ Áï½Ã °á°ú¸¦ º¸°í ½ÍÀ» ¶§¿¡ ¾²¸é 
# ¾ÆÁÖ ÁÁ½À´Ï´Ù.

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

groff -Tascii -man $1 | less
# ¸Ç ÆäÀÌÁö¸¦ groff ·Î º¸±â

exit 0

예 A-2. rn: °£´ÜÇÑ ÆÄÀÏ À̸§ ¹Ù²Ù´Â À¯Æ¿¸®Æ¼

ÀÌ ½ºÅ©¸³Æ®´Â 예 3-57ÀÇ º¯°æÆÇÀÔ´Ï´Ù.

#! /bin/bash
#
# ¾ÆÁÖ °£´ÜÇÑ ÆÄÀÏ À̸§À» "¹Ù²Ù´Â" À¯Æ¿¸®Æ¼
# "lowercase.sh"À» ±âÃÊ·Î ¸¸µé¾ú½À´Ï´Ù.


if [ $# -ne 2 ]
then
  echo "»ç¿ë¹ý: `basename $0` old-pattern new-pattern"
  # ¿¹¸¦ µé¾î "rn gif jpg" ó·³ Çϸé, ÇöÀç ÀÛ¾÷ µð·ºÅ丮ÀÇ ¸ðµç gif ÆÄÀÏÀ» jpg ÆÄÀÏ·Î À̸§À» ¹Ù²ãÁÝ´Ï´Ù.
  exit 1
fi

number=0    # ½ÇÁ¦·Î ¾ó¸¶³ª ¸¹Àº ÆÄÀÏ À̸§ÀÌ ¹Ù²î¾ú´ÂÁö ÃßÀûÇϰí ÀÖÀ» º¯¼ö


for filename in *$1*  # µð·ºÅ丮¿¡¼­ ÀÏÄ¡ÇÏ´Â ¸ðµç ÆÄÀÏÀ» ã¾Æ¼­
do
   if [ -f $filename ]  # ã¾Ò´Ù¸é...
   then
     fname=`basename $filename`            # °æ·Î¸¦ ¶¼¾î³»°í
     n=`echo $fname | sed -e "s/$1/$2/"`   # »õ À̸§À¸·Î ¹Ù²Û ´ÙÀ½
     mv $fname $n                          # À̸§À» ¹Ù²ß´Ï´Ù.
     let "number += 1"
   fi
done   

if [ $number -eq 1 ]   # ¹®¹ý¿¡ ¸Â°Ô ÇÏ·Á°í
then
 echo "$number °³ÀÇ ÆÄÀÏ À̸§ÀÌ ¹Ù²î¾ú½À´Ï´Ù."
else 
 echo "$number °³ÀÇ ÆÄÀÏ À̸§µéÀÌ ¹Ù²î¾ú½À´Ï´Ù."
fi 

exit 0


# µ¶ÀÚµéÀ» À§ÇÑ ¿¬½À¹®Á¦:
# ¾î¶² Á¾·ùÀÇ ÆÄÀÏ¿¡ ´ëÇØ¼­ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ»±î¿ä?
# ¾î¶»°Ô °íÄ¡ÁÒ?

예 A-3. encryptedpw: ÀڽŠ½Ã½ºÅÛ¿¡(locally) ¾Ïȣȭ µÇ¾î ÀÖ´Â ÆÐ½º¿öµå·Î ftp »çÀÌÆ®¿¡ ÆÄÀÏÀ» ¾÷·ÎµåÇÏ´Â ½ºÅ©¸³Æ®

#!/bin/bash

# ¿¹ 3-71 À» ¾ÏȣȭµÈ ÆÐ½º¿öµå¸¦ »ç¿ëÇϵµ·Ï °íÃÆ½À´Ï´Ù.

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

Username=bozo
# ¾Ë¸Â°Ô °íÄ¡¼¼¿ä.

Filename=`basename $1`
# ÆÄÀÏ À̸§¿¡¼­ °æ·Î À̸§À» ¶¼¾î ³À´Ï´Ù.

Server="XXX"
Directory="YYY"
# ½ÇÁ¦ ¼­¹ö¿Í µð·ºÅ丮 À̸§À¸·Î ¹Ù²Ù¼¼¿ä.


password=`cruft <pword`
# "pword" ´Â ¾ÏȣȭµÈ ÆÐ½º¿öµå°¡ ´ã±ä ÆÄÀÏÀÔ´Ï´Ù.
# 1ȸ¿ë ¾Ïȣǥ¸¦ ¾²´Â ¾Ë°í¸®Áò¿¡ ±â¹ÝÇÑ ÀúÀÚÀÇ "cruft" ¶õ ÆÄÀÏ ¾Ïȣȭ 
# ÆÐŰÁö¸¦ ¾²´Âµ¥, ¿©±â¼­ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
# ¸ÞÀÎ »çÀÌÆ®:   ftp://metalab.unc.edu /pub/Linux/utils/file
#                cruft-0.2.tar.gz [16k]


ftp -n $Server <<End-Of-Session
# -n ¿É¼ÇÀº ÀÚµ¿ ·Î±×ÀÎÀ» ¸·¾ÆÁÝ´Ï´Ù.

user $Username $Password
binary
bell
# ÆÄÀÏ Àü¼ÛÀÌ ÀϾ ¶§¸¶´Ù 'bell'À» ¿ï¸®±â
cd $Directory
put $Filename
bye
End-Of-Session

exit 0

+

´ÙÀ½ µÎ ½ºÅ©¸³Æ®´Â Åä·ÐÅä ´ëÇÐÀÇ Mark Moraes°¡ ¸¸µé¾ú½À´Ï´Ù. Çã°¡ »çÇ×°ú Á¦ÇÑ »çÇ׿¡ ´ëÇØ¼­´Â ÀÌ ¹®¼­¿Í °°ÀÌ ¹èÆ÷µÇ´Â "Moraes-COPYRIGHT" ÆÄÀÏÀ» Âü°íÇϱ⠹ٶø´Ï´Ù.

예 A-4. behead: ¸ÞÀϰú ´º½º ¸Þ¼¼Áö Çì´õ¸¦ Á¦°ÅÇØ ÁÖ´Â ½ºÅ©¸³Æ®

#! /bin/sh
# ¸ÞÀÏÀ̳ª ´º½º ¸Þ¼¼Áö¿¡¼­ Çì´õ¸¦ ¶¼¾î ³» ÁÖ´Â ½ºÅ©¸³Æ®.
# Áï, ù¹øÂ° ºó ÁÙÀÌ ³ª¿Ã ¶§±îÁö
# Åä·ÐÅä ´ëÇÐÀÇ Mark Moraes

# --> ÀÌ ÁÖ¼®Àº HOWTO ÀúÀÚ°¡ ºÙÀÎ °ÍÀÔ´Ï´Ù.

if [ $# -eq 0 ]; then
# --> ¸í·É¾î ÁÙ ÀÎÀÚ°¡ ¾ø´Ù¸é Ç¥ÁØÀԷ¿¡¼­ ÀçÁöÇâµÇ¾î µé¾î¿À´Â ÆÄÀÏ¿¡ ´ëÇØ¼­ µ¿ÀÛÇÔ.
	sed -e '1,/^$/d' -e '/^[ 	]*$/d'
	# --> °ø¹é ¹®ÀÚ·Î ½ÃÀÛÇϴ ù¹øÂ° ÁÙÀÌ ³ª¿Ã ¶§±îÁö
	# --> ºó ÁÙ°ú ¸ðµç ÁÙÀ» Áö¿ó´Ï´Ù.
else
# --> ¸í·É¾î ÁÙ ÀÎÀÚ°¡ ÀÖ´Ù¸é ±× ÁÖ¾îÁø ÆÄÀÏ¿¡ ´ëÇØ¼­ µ¿ÀÛÇÔ
	for i do
		sed -e '1,/^$/d' -e '/^[ 	]*$/d' $i
		# --> À§¿Í °°½À´Ï´Ù.
	done
fi

# --> µ¶ÀÚ¸¦ À§ÇÑ ¿¬½À¹®Á¦: ¿¡·¯ üũ¸¦ ÇÏ°í ´Ù¸¥ ¿É¼ÇÀ» ´õÇØ º¸¼¼¿ä.
# -->
# --> ÀÛÀº sed ½ºÅ©¸³Æ®°¡ ÀÎÀÚ¸¦ ³Ñ±â´Â °Í¸¸ »©°í ¹Ýº¹µÇ´Â°ÍÀ» À¯½ÉÈ÷ »ìÆì º¸¼¼¿ä.
# --> ÀÌ ºÎºÐÀ» ÇÔ¼ö·Î »©´Â°Ô ÀÌÄ¡¿¡ ¸ÂÀ»±î¿ä? ±× ´ë´ä¿¡ ´ëÇØ¼­ ¼³¸íÇØ º¸¼¼¿ä.

예 A-5. ftpget: ftp¿¡¼­ ÆÄÀÏÀ» ´Ù¿î·ÎµåÇØ ÁÖ´Â ½ºÅ©¸³Æ®

#! /bin/sh 
# $Id: ftpget,v 1.2 91/05/07 21:15:43 moraes Exp $ 
# À͸í ftp¿¡ ¹èÄ¡ ÀÛ¾÷À» ½ÇÇàÇÏ´Â ½ºÅ©¸³Æ®. ±âº»ÀûÀ¸·Î ¸í·É¾î ¶óÀÎ ÀÎÀÚµéÀ»
# ftpÀÇ ÀÔ·ÂÀ¸·Î ¹Ù²ãÁÖ´Â ÀÏÀ» ÇÕ´Ï´Ù.
# °£´ÜÇÏ°í ºü¸¨´Ï´Ù - ftplist¿Í ÇÑ ½ÖÀÌ µÇµµ·Ï ÀÛ¼ºµÆ½À´Ï´Ù.
# -h ´Â Á¢¼ÓÇÒ È£½ºÆ®¸¦ ³ªÅ¸³À´Ï´Ù(±âº»°ªÀº prep.ai.mit.edu)
# -d ´Â Á¢¼ÓÈÄ cd ·Î ¿Å°Ü°¥ µð·ºÅ丮¸¦ ³ªÅ¸³À´Ï´Ù. -d ¸¦ ¿©·¯¹ø ¾µ ¼öµµ 
# Àִµ¥, ÀÌ·¸°Ô Çϸé ÁÖ¾îÁø ¼ø¼­´ë·Î µð·ºÅ丮¸¦ ¿Å°Ü°¥ °ÍÀÔ´Ï´Ù.
# ¸¸¾à¿¡ ÇØ´ç µð·ºÅ丮°¡ »ó´ë °æ·Î¶ó¸é ¼ø¼­¸¦ Àß ¸Å°Ü¾ß ÇÕ´Ï´Ù. 
# ¿äÁò¿£ ³Ê¹« ¸¹Àº ½Éº¼¸¯ ¸µÅ©°¡ Á¸ÀçÇϱ⠶§¹®¿¡ ¾ÆÁÖ Á¶½ÉÇØ¼­ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.
# (±âº»°ªÀº ftp ·Î±×ÀÎ µð·ºÅ丮)
# -v ´Â ftpÀÇ verbose¸ðµå¸¦ ÄѼ­, ftp ¼­¹öÀÇ ¸ðµç ÀÀ´äÀ» º¸¿©ÁÝ´Ï´Ù.
# -f remotefile[:localfile] Àº remote ÆÄÀÏÀ» local ÆÄÀÏ·Î À̸§À» ¹Ù²ã 
# °¡Á®¿É´Ï´Ù.
# -m pattern Àº ÁÖ¾îÁø ÆÐÅÏ¿¡ ÇØ´çÇÏ´Â ÆÄÀϵéÀ» mgetÀ¸·Î °¡Á®¿É´Ï´Ù.
# ½© ¹®ÀÚµéÀ» Àοë(quote)ÇØ¾ß ÇÏ´Â °ÍÀ» ±â¾ïÇϼ¼¿ä.
# -c ´Â ÇöÀç ÀÚ½ÅÀÇ ½Ã½ºÅÛ¿¡¼­ ÁÖ¾îÁø µð·ºÅ丮·Î cd ¸¦ ½ÇÇàÇÕ´Ï´Ù.
# ¿¹¸¦ µé¸é,
# 	ftpget -h expo.lcs.mit.edu -d contrib -f xplaces.shar:xplaces.sh \
#		-d ../pub/R3/fixes -c ~/fixes -m 'fix*' 
# ´Â expo.lcs.mit.edu ÀÇ ~ftp/contrib ¿¡¼­ xplaces.shar ¸¦ ÇöÀç µð·ºÅ丮¿¡
# xplaces.sh ·Î °¡Á®¿À°í, ~ftp/pub/R3/fixes ¿¡¼­ ¸ðµç ¼öÁ¤ ÆÄÀÏ('fix*')µéÀ»
# Àڱ⠽ýºÅÛÀÇ ~/fixes µð·ºÅ丮·Î °¡Á®¿É´Ï´Ù.
# ftp ¿¡¼­ ÇØ´ç ¸í·É¾î°¡ ÁÖ¾îÁø ¼ø¼­´ë·Î ½ÇÇàµÇ±â ¶§¹®¿¡ ¿É¼Ç ¼ø¼­°¡ 
# Áß¿äÇÏ´Ù´Â °ÍÀº ¾ÆÁÖ È®½ÇÇÕ´Ï´Ù.
#
# Mark Moraes (moraes@csri.toronto.edu), Feb 1, 1989 
# --> Docbook¿¡¼­ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ºÎµîÈ£ °ýÈ£¸¦ ¼Ò°ýÈ£·Î ¹Ù²Ù¾ú½À´Ï´Ù.
#

# --> ÀÌ·± ÁÖ¼®Àº HOWTO ÀúÀÚ°¡ µ¡ºÙÀÎ ÁÖ¼®ÀÔ´Ï´Ù.

# PATH=/local/bin:/usr/ucb:/usr/bin:/bin
# export PATH
# --> ¿ø·¡ ½ºÅ©¸³Æ®¿¡ ÀÖ´ø À§ÀÇ µÎ ÁÙÀº ¾µµ¥¾øÀÌ µé¾î°¡ ÀÖ´Â °Í °°½À´Ï´Ù.

TMPFILE=/tmp/ftp.$$
# --> ½ºÅ©¸³Æ®ÀÇ ÇÁ·Î¼¼½º ID($$)¸¦ °¡Áö°í Àӽà ÆÄÀÏÀ» ¸¸µé¾î ³À´Ï´Ù.

SITE=`domainname`.toronto.edu
# --> 'domainname' Àº 'hostname' °ú ºñ½ÁÇÕ´Ï´Ù.
# --> Á» ´õ ÀϹÝÀûÀ¸·Î ¾²·Á¸é ÀÌ ºÎºÐÀº ÀÎÀÚ·Î ¹Þ¾Æ µéÀϼö ÀÖµµ·Ï ´Ù½Ã ÀÛ¼ºµÇ¾î¾ß ÇÕ´Ï´Ù.

usage="»ç¿ë¹ý: $0 [-h remotehost] [-d remotedirectory]... [-f remfile:localfile]... \
		[-c localdirectory] [-m filepattern] [-v]"
ftpflags="-i -n"
verbflag=
set -f 		# -m ¿É¼Ç¿¡¼­ ÆÄÀϸí È®ÀåÀ» Çϱâ À§Çؼ­
set x `getopt vh:d:c:m:f: $*`
if [ $? != 0 ]; then
	echo $usage
	exit 1
fi
shift
trap 'rm -f ${TMPFILE} ; exit' 0 1 2 3 15
echo "user anonymous ${USER-gnu}@${SITE} > ${TMPFILE}"
# --> Àοë(quote)À» Ãß°¡(º¹ÀâÇÑ echo ¹®¿¡¼­´Â ÀÌ·¸°Ô Çϱ⠹ٶø´Ï´Ù)
echo binary >> ${TMPFILE}
for i in $*
# --> ¸í·É¾î ÁÙ ÀÎÀÚ¸¦ ÆÄ½Ì
do
	case $i in
	-v) verbflag=-v; echo hash >> ${TMPFILE}; shift;;
	-h) remhost=$2; shift 2;;
	-d) echo cd $2 >> ${TMPFILE}; 
	    if [ x${verbflag} != x ]; then
	        echo pwd >> ${TMPFILE};
	    fi;
	    shift 2;;
	-c) echo lcd $2 >> ${TMPFILE}; shift 2;;
	-m) echo mget "$2" >> ${TMPFILE}; shift 2;;
	-f) f1=`expr "$2" : "\([^:]*\).*"`; f2=`expr "$2" : "[^:]*:\(.*\)"`;
	    echo get ${f1} ${f2} >> ${TMPFILE}; shift 2;;
	--) shift; break;;
	esac
done
if [ $# -ne 0 ]; then
	echo $usage
	exit 2
fi
if [ x${verbflag} != x ]; then
	ftpflags="${ftpflags} -v"
fi
if [ x${remhost} = x ]; then
	remhost=prep.ai.mit.edu
	# --> ¿©·¯ºÐÀÌ ÁÁ¾ÆÇÏ´Â ftp »çÀÌÆ®·Î ¹Ù²ã ³ÖÀ¸¼¼¿ä
fi
echo quit >> ${TMPFILE}
# --> ¸ðµç ¸í·É¾î´Â Àӽà ÆÄÀÏ·Î ÀúÀåµË´Ï´Ù.

ftp ${ftpflags} ${remhost} < ${TMPFILE}
# --> ÀÌÁ¦ ÀÓ½ÃÆÄÀÏ¿¡ ÀúÀåµÇ¾ú´ø ¸í·É¾îµéÀÌ ftp¿¡ ÀÇÇØ¼­ ÇÑ ¹ø¿¡ 󸮵˴ϴÙ.

rm -f ${TMPFILE}
# --> ³¡À¸·Î, Àӽà ÆÄÀÏÀ» Áö¿ó´Ï´Ù(·Î±×¸¦ À§ÇØ ÇÊ¿äÇÏ´Ù¸é ÀúÀåÇÒ ¼öµµ ÀÖ½À´Ï´Ù).


# --> µ¶ÀÚ¸¦ À§ÇÑ ¿¬½À¹®Á¦:
# --> 1) ¿¡·¯ üũ¸¦ Ãß°¡Çϼ¼¿ä.
# --> 2) ´Ù¸¥ Ưº°ÇÑ ±â´ÉµéÀ» ³Ö¾îº¸¼¼¿ä.

+

Antek Sawicki°¡ ´ÙÀ½ ½ºÅ©¸³Æ®¸¦ Á¦°øÇØ ÁÖ¾ú½À´Ï´Ù. ÀÌ ½ºÅ©¸³Æ®´Â 3.3.1절¿¡¼­ ³íÀÇµÈ ÀÎÀÚ ¹Ù²Ù±â ¿¬»êÀÚÀÇ ±ò²ûÇÑ »ç¿ë¹ýÀ» º¸¿©ÁÝ´Ï´Ù.

예 A-6. password: ¹«ÀÛÀ§·Î 8±ÛÀÚÀÇ ÆÐ½º¿öµå¸¦ ¸¸µé¾î ³»´Â ½ºÅ©¸³Æ®

#!/bin/bash
# ¸î¸î ½Ã½ºÅÛ¿¡¼­´Â #!/bin/bash2 ·Î ¹Ù²ãÁà¾ß µÉÁöµµ ¸ð¸¨´Ï´Ù.
#
# ¹«ÀÛÀ§·Î ÆÐ½º¿öµå ¸¸µé¾î ³»±â´Â Antek Sawicki <tenox@tenox.tc> °¡ 
# ÀÌ HOWTO¿¡¼­ ¾µ ¼ö ÀÖµµ·Ï ÀνÉÁÁ°Ô Çã¶ôÇØ ÁÖ¾ú½À´Ï´Ù.
#
# ==> HOWTO ÀúÀÚ¿¡ ÀÇÇÑ ÁÖ¼® ==>


MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
LENGTH="8"
# ==> ´õ ±ä ÆÐ½º¿öµå¸¦ ¿øÇÑ´Ù¸é 'LENGTH'¸¦ ´Ã¸®¼¼¿ä.


while [ ${n:=1} -le $LENGTH ]
# ==> := °¡ "±âº» ¹Ù²Ù±â" ¿¬»êÀÚ¿´´ø°Å ±â¾ïÇϽÃÁÒ?
# ==> ±×·¡¼­, ¸¸¾à¿¡ 'n'ÀÌ ÃʱâÈ­ ¾È µÆ´Ù¸é 1·Î ¼¼Æ®µË´Ï´Ù.
do
	PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
	# ==> ¾ÆÁÖ ÈǸ¢Çѵ¥ ¾à°£ Çò°¥¸®³×¿ä.

	# ==> Á¦ÀÏ ¾ÈÂʺÎÅÍ »ìÆì º¾½Ã´Ù...
	# ==> ${#MATRIX} ´Â MATRIX ¹è¿­ÀÇ ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù.
	# ==> $RANDOM%${#MATRIX} ´Â 1ºÎÅÍ MATRIX ±æÀ̱îÁö ¼ýÀÚ Áß¿¡¼­ ¹«ÀÛÀ§ ¼ýÀÚ¸¦ ¸®ÅÏÇÕ´Ï´Ù.

	# ==> ${MATRIX:$(($RANDOM%${#MATRIX})):1}
	# ==> ´Â MATRIX ÀÓÀÇÀÇ À§Ä¡¿¡¼­ ±æÀ̰¡ 1ÀÎ ¹®ÀÚ¿­À» ¸®ÅÏÇÕ´Ï´Ù.
	# ==> 3.3.1ÀýÀÇ {var:pos:len} À§Ä¡ ¹Ù²Ù±â¿Í ¿¹Á¦µéÀ» Âü°íÇϼ¼¿ä.

	# ==> PASS=... °á°ú¸¦ ¹Ù·Î Àü PASS¿¡ µ¡ºÙÀÔ´Ï´Ù.

	# ==> ÀÌ °úÁ¤À» Á» ´õ È®½ÇÇÏ°Ô º¸°í ½Í´Ù¸é ´ÙÀ½ ÁÙÀÇ ÁÖ¼®À» Ç®¾î º¸¼¼¿ä.
	# ==> 		echo "$PASS"
	# ==> ·çÇÁ¸¦ ÇÑ ¹ø µ¹¶§¸¶´Ù PASS°¡ ÇÑ ±ÛÀÚ¾¿ ¸¸µé¾îÁö´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

	let n+=1
	# ==> ´ÙÀ½À» À§Çؼ­ 'n'À» Áõ°¡
done

echo "$PASS"
#== ÇÊ¿äÇÏ´Ù¸é ÆÄÀÏ·Î ÀçÁöÇâ.

+

James R. Van Zandt°¡ ÀÌ ½ºÅ©¸³Æ®¸¦ Á¦°øÇØ ÁÖ¾ú½À´Ï´Ù. ÀÌ ½ºÅ©¸³Æ®´Â ³×ÀÓµå ÆÄÀÌÇÁ¸¦ »ç¿ëÇϴµ¥ ±×ÀÇ ¸»¿¡ µû¸£¸é "Á¤¸»·Î Àοë(quoting)°ú À̽ºÄÉÀÌÇÎ(escaping) ¿¬½À¿ë"À̾ú´ä´Ï´Ù.

예 A-7. fifo: ³×ÀÓµå ÆÄÀÌÇÁ¸¦ ½á¼­ ¸ÅÀÏ ¹é¾÷ÇØ ÁÖ´Â ½ºÅ©¸³Æ®

#!/bin/bash
# ==> James R. Van Zandt °¡ ÀÛ¼ºÇÏ°í ±×ÀÇ Çã¶ôÀ» ¹Þ¾Æ ÀÌ °÷¿¡¼­ ¾²ÀÓ

# ==> HOWTO ÀúÀÚ°¡ µ¡ºÙÀÎ ÁÖ¼®

  
  HERE=`uname -n`
  # ==> È£½ºÆ® À̸§
  THERE=bilbo
  echo "$THERE ·Î `date +%r`¿¡  ¹é¾÷À» ½ÃÀÛÇÕ´Ï´Ù."
  # ==> `date +%r` Àº 12½Ã°£ Æ÷¸Ë(08:08:34 PM)À¸·Î ½Ã°£À» ¸®ÅÏÇÕ´Ï´Ù.
  
  # /pipe °¡ ÀÏ¹Ý ÆÄÀÏÀÌ ¾Æ´Ñ ÁøÂ¥ ÆÄÀÌÇÁÀΰÍÀ» È®½ÇÈ÷ Çϱâ À§Çؼ­
  rm -rf /pipe
  mkfifo /pipe
  # ==> "/pipe"¶õ "³×ÀÓµå ÆÄÀÌÇÁ" ¸¸µé±â
  
  # ==> 'su xyz' ´Â ¸í·É¾î¸¦ "xyz"¶õ »ç¿ëÀÚ·Î ½ÇÇà½Ãŵ´Ï´Ù.
  # ==> 'ssh' ´Â secure shellÀ» ¶ç¿ó´Ï´Ù(¿ø°ÝÁö ·Î±×ÀΠŬ¶óÀ̾ðÆ®).
  su xyz -c "ssh $THERE \"cat >/home/xyz/backup/${HERE}-daily.tar.gz\" < /pipe"&
  cd /
  tar -czf - bin boot dev etc home info lib man root sbin share usr var >/pipe
  # ==> ³×ÀÓµå ÆÄÀÌÇÁ(/pipe)¸¦ ½á¼­ ÇÁ·Î¼¼½º³¢¸® Åë½ÅÀ» ÇÔ
  # ==> 'tar/gzip' Àº /pipe·Î ¾²°í, 'ssh'Àº /pipe¿¡¼­ ÀÐÀ½

  # ==> ÃÖÁ¾ °á°ú´Â / ÀÌÇÏÀÇ ¸ÞÀÎ µð·ºÅ丮µéÀÌ ¹é¾÷ µË´Ï´Ù.

  # ==> Áö±Ý °°Àº »óȲ¿¡¼­ "À͸íÀÇ ÆÄÀÌÇÁ"ÀÎ | ´ë½Å "³×ÀÓµå ÆÄÀÌÇÁ"¸¦ ¾´ °ÍÀÌ 
  # ==> ¾î¶² ÀÌÁ¡ÀÌ ÀÖÀ»±î¿ä?
  # ==> ÀÍ¸í ÆÄÀÌÇÁµµ Á¦´ë·Î µ¿ÀÛÇÒ±î¿ä?


  exit 0

+

Jordi Sanfeliu´Â ÀÌ ±Ù»çÇÑ tree ½ºÅ©¸³Æ®¸¦ ¾²µµ·Ï Çã¶ôÇØ ÁÖ¾ú½À´Ï´Ù.

예 A-8. tree: µð·ºÅ丮 ±¸Á¶¸¦ º¸¿©ÁÖ´Â ½ºÅ©¸³Æ®

#!/bin/sh
#         @(#) tree      1.1  30/11/95       by Jordi Sanfeliu
#                                         email: mikaku@arrakis.es
#
#         Initial version:  1.0  30/11/95
#         Next version   :  1.1  24/02/97   ½Éº¼¸¯ ¸µÅ©µµ Áö¿ø
#         Patch by       :  Ian Kjos, ãÀ» ¼ö ¾ø´Â µð·ºÅ丮 Áö¿ø
#                           email: beth13@mail.utexas.edu
#
#         Tree ´Â µð·ºÅ丮 Æ®¸®¸¦ º¸¿©ÁÖ´Â ÅøÀÔ´Ï´Ù.(È®½ÇÈ÷ º¸¿©ÁÝ´Ï´Ù :-) )
#

# ==> 'Tree' ´Â ¿øÀúÀÚ, Jordi SanfeliuÀÇ Çã¶ôÀ» ¹Þ¾Æ¼­ ¿©±â¿¡ ¾²¿©Á³½À´Ï´Ù.
# ==> HOWTO ÀúÀÚ°¡ µ¡ºÙÀÎ ÁÖ¼®


search () {
   for dir in `echo *`
   # ==> `echo *` ´Â ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀϵéÀ» ÇÑ ÁÙ¿¡ Ç¥½ÃÇØ ÁÝ´Ï´Ù.
   # ==> for dir in *    ¿Í °°½À´Ï´Ù.
   do
      if [ -d $dir ] ; then   # ==> µð·ºÅ丮¶ó¸é(-d)...
         zz=0   # ==> µð·ºÅ丮 ±íÀ̸¦ °®°í ÀÖÀ» Àӽà º¯¼ö
         while [ $zz != $deep ]   # ¾ÈÂÊ ·çÇÁÀÎÁö
         do
            echo -n "|   "    # ==> ¼öÁ÷ ¿¬°áÀÚ¸¦ Ç¥½Ã
	                      # ==> Á¤·Ä(indent)À» À§ÇÑ ¶óÀÎ ÇÇµå ¾ø´Â µÎ°³ÀÇ ºó Ä­
            zz=`expr $zz + 1` # ==> zz ¸¦ Áõ°¡.
         done
         if [ -L $dir ] ; then    # ==> µð·ºÅ丮°¡ ½Éº¼¸¯ ¸µÅ©¶ó¸é...
            echo "+---$dir" `ls -l $dir | sed 's/^.*'$dir' //'`
	    # ==> ¼öÆò ¿¬°áÀÚ¿Í µð·ºÅ丮 À̸§À» Ç¥½ÃÇÏÁö¸¸ ±ä Ç¥½Ã(long listing) 
		# ==> Çü½ÄÀÇ ³¯Â¥/½Ã°£ ºÎºÐÀ» Áö¿ò
         else
            echo "+---$dir"    # ==> ¼öÆò ¿¬°áÀÚ¿Í µð·ºÅ丮 À̸§À» Ç¥½Ã
            if cd $dir ; then  # ==> ÇÏÀ§ µð·ºÅ丮·Î µé¾î°¥ ¼ö ÀÖÀ¸¸é...
               deep=`expr $deep + 1`   # ==> ±íÀ̸¦ Áõ°¡
               search    # Àç±Í ÇÔ¼ö ;-)
	                 # ==> ÀÚ±â ÀÚ½ÅÀ» ºÎ¸£´Â ÇÔ¼ö
               numdirs=`expr $numdirs + 1`   # ==> µð·ºÅ丮 ¼ýÀÚ¸¦ Áõ°¡
            fi
         fi
      fi
   done
   cd ..   # ==> ºÎ¸ð µð·ºÅ丮·Î ¿Ã¶ó°¨
   if [ $deep ] ; then  # ==> depth = 0 À̸é (ÂüÀ» ¸®ÅÏ)...
      swfi=1            # ==> Ž»öÀÌ ³¡³µÀ½À» ¾Ë¸®´Â Ç÷¡±×¸¦ ¼¼Æ®
   fi
   deep=`expr $deep - 1`   # ==> ±íÀ̸¦ °¨¼Ò
}

# - ¸ÞÀÎ -
if [ $# = 0 ] ; then
   cd `pwd`    # ==> ÀÎÀÚ¾øÀÌ ºÒ·È´Ù¸é ÇöÀç µð·ºÅ丮¿¡¼­ ½ÃÀÛ
else
   cd $1       # ==> ¾Æ´Ï¶ó¸é ÁÖ¾îÁø µð·ºÅ丮·Î À̵¿
fi
echo "½ÃÀÛ µð·ºÅ丮 = `pwd`"
swfi=0      # ==> Ž»ö Á¾·á Ç÷¡±×
deep=0      # ==> º¸¿©ÁÙ ±íÀÌ
numdirs=0
zz=0

while [ $swfi != 1 ]   # Ç÷¡±×°¡ ¼¼Æ® ¾È µÈ µ¿¾È¿¡...
do
   search  # ==> º¯¼öµéÀ» ÃʱâÈ­Çϰí ÇÔ¼ö¸¦ ºÎ¸§
done
echo "Àüü µð·ºÅ丮 ¼ö = $numdirs"



# ==> µ¶Àڵ鿡°Ô µµÀü: ÀÌ ½ºÅ©¸³Æ®°¡ Á¤È®È÷ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Ë¾Æ³» º¸¼¼¿ä.