shell脚本学习指南[三](Arnold Robbins & Nelson H.F. Beebe著)

2019-09-23 09:42:11王冬梅

DATEFLAGS="+%Y.%m.%d.%H.%M.%S"
EXITCODE=0
EXTRAENVIRONMENT=
INDENT="awk '{ print "ttt" $0 }'"
JOINLINES="tr 'n' '40'"
LOGDIR=
PROGRAM=`basename $0`
SCP=scp
SSH=ssh
SSHFLAGS=${SSHFLAGS--x}
STRIPCOMMENTS='sed -e s/#.*$//'
userhosts=
VERSION=1.0

#默认的初始化文件
defaultdirectories=$BUILDHOME/directories
defaultuserhosts=$BUILDHOME/userhosts

#要寻找包分发的位置列表,如果用户未提供个人化列表,则使用默认列表:
SRCDIRS="`$STRIPCOMMENTS $defaultdirectories 2> /dev/null`"
test -z "$SRCDIRS" &&
 SRCDIRS=".
  /usr/local/src
  /usr/local/gnu/src
  $HOME/src
  $HOME/gnu/src
  /tmp
  /usr/tmp
  /var/tmp"
while test $# -gt 0
do
 case $1 in
 --all | --al | --a | -all | -al | -a )
  shift
  ALLTARGETS="$1"

 --cd | -cd )
  shift
  CONFIGUREDIR="$1"

 --check | --chec | --che | --ch | -check | -chec | -che | -ch )
  shift
  CHECKTARGETS="$1"

 --configure | --conf | --co | -configure | -conf | -co )
  shift
  CONFIGUREFLAGS="$1"

 --environment | --environ | -- envir | --e | -environment |
  -environ | -envir | -e )
  shift
  EXTRAENVIRONMENT="$1"

 --help | --h | '--?' | -help | -h | '-?' )
  usage_and_exit 0

 --logdirectory | --log | --l | -logdirectory | -log | -l )
  shift
  altlogdir="$1"

 --on | --o | -on | -o )
  shift
  userhosts="$userhosts $1"

 --source | --s | -source | -s )
  shift
  altsrcdirs="$altsrcdirs $1"

 --userhosts | --u | -userhosts | -u )
  shift
  set_userhosts $1

 --version | --v | -version | -v )
  version
  exit 0

 -* )
  error "Unrecognized option: $1"

 * )
  break

 esac
 shift
done

#寻找适当的邮件客户端程序
for MAIL in /bin/mailx /usr/bin/mailx /usr/sbin/mailx /usr/ucb/mailx
  /bin/mail /usr/bin/mail
do
 test -x $MAIL && break
done
test -x $MAIL || error "Cannot find mail client"

#命令行来源目录优先于默认值
SRCDIRS="$altsrcdirs $SRCDIRS"

if test -n "$userhosts"
then
 test -n "$ALTUSERHOSTS" &&
   userhosts="$userhosts `$STRIPCOMMENTS $ALTUSERHOSTS 2> /dev/null`"
else
 test -z "$ALTUSERHOSTS" && ALTUSERHOSTS="$defaultuserhosts"
 userhosts="`$STRIPCOMMENTS $ALTUSERHOSTS 2> /dev/null`"
fi

#检查是否要执行某些操作
test -z "$userhosts" && usage_and_exit 1

for p in "$@"
do
 find_package "$p"

 if test -z "$PARFILE"
 then