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

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

  test -f $BUILDEND && . $BUILDEND ||
   test -f $BUILDEND && source $BUILDEND ||
    true;
  echo '===============================================' ;
 " < /dev/null > "$LOGDIR/$logfile" 2>&1 &
}

error(){
 echo "$@" 1>&2
 usage_and_exit 1
}

find_file(){
#语法:
# find_file file program-and-args
#如果找到,返回0,如果找不到返回1
 if test -r "$1"
 then
  PAR="$2"
  PARFILE="$1"
  return 0
 else
  return 1
 fi
}

find_package(){
#语法:
# find_package package-x.y.z
 base=`echo "$1" | sed -e 's/[-_][.]*[0-9].*$//'`
 PAR=
 PARFILE=
 for srcdir in $SRCDIRS
 do
  test "$srcdir" = "." && srcdir="`pwd`"
  for subdir in "$base" ""
  do
  #如果此列表有改变,则更新build_one()内的包设置
  find_file $srcdir/$subdir/$1.tar.gz "tar xfz" && return
  find_file $srcdir/$subdir/$1.tar.Z "tar xfz" && return
  find_file $srcdir/$subdir/$1.tar "tar xf" && return
  find_file $srcdir/$subdir/$1.tar.bz2 "tar xfj" && return
  find_file $srcdir/$subdir/$1.tar.tgz "tar xfz" && return
  find_file $srcdir/$subdir/$1.tar.zip "unzip -q" && return
  find_file $srcdir/$subdir/$1.jar "jar xf" && return
  done
 done
}

set_userhosts(){
#语法:
# set_userhosts file(s)
 for u in "$@"
 do
  if test -r "$u"
  then
   ALTUSERHOSTS="$ALTUSERHOSTS $u"
  elif test -r "$BUILDHOME/$u"
  then
   ALTUSERHOSTS="$ALTUSERHOSTS $BUILDHOME/$u"
  else
   error "File not found: $u"
  fi
 done
}

usage(){
cat <<EOF
 Usage:
  $PROGRAM [ --? ]
    [ --all "..." ]
    [ --check "..." ]
    [ --configure "..." ]
    [ --environment "..." ]
    [ --help ]
    [ --logdirectory dir ]
    [ --on "[user@]host[:dir][,envfile] ..." ]
    [ --source "dir ..." ]
    [ --userhosts "file(s)" ]
    [ --version ]
    package(s)
EOF
}

usage_and_exit(){
 usage
 exit $1
}

version(){
 echo "$PROGRAM version $VERSION"
}

warning(){
 echo "$@" 1>&2
 EXITCODE=`expr $EXITCODE + 1 `
}

ALLTARGETS=
altlogdir=
altsrcdirs=
ALTUSERHOSTS=
BUILDBEGIN=./.build/begin
BUILDEND=./.build/end
BUILDHOME=$HOME/.build
CHECKTARGETS=check
CONFIGUREDIR=.
CONFIGUREFLAGS=