home *** CD-ROM | disk | FTP | other *** search
/ PC-Online 1996 May / PCOnline_05_1996.bin / linux / source / n / bind / bind-4.001 / bind-4~ / bind-4.9.3-BETA9 / conf / bsdinstall.sh next >
Linux/UNIX/POSIX Shell Script  |  1994-04-08  |  4KB  |  252 lines

  1. #! /bin/sh
  2.  
  3. ## (From INN-1.4, written by Rich Salz)
  4. ##  $Revision: 1.9 $
  5. ##  A script to install files and directories.
  6.  
  7. PROGNAME=`basename $0`
  8.  
  9. ##  Paths to programs.  CHOWN and WHOAMI are checked below.
  10. CHOWN=chown
  11. CHGRP=chgrp
  12. CHMOD=chmod
  13. CP=cp
  14. LN=ln
  15. MKDIR=mkdir
  16. MV=mv
  17. RM=rm
  18. STRIP=strip
  19. WHOAMI=whoami
  20.  
  21. ##  Some systems don't support -x, so we have to use -f.
  22. if [ ${CHOWN} = chown ] ; then
  23.     if [ -f /etc/chown ] ; then
  24.     CHOWN=/etc/chown
  25.     else
  26.     if [ -f /usr/etc/chown ] ; then
  27.         CHOWN=/usr/etc/chown
  28.     fi
  29.     fi
  30. fi
  31.  
  32. if [ ${WHOAMI} = whoami ] ; then
  33.     if [ -f /usr/ucb/whoami ] ; then
  34.     WHOAMI=/usr/ucb/whoami
  35.     fi
  36. fi
  37.  
  38. ##  Defaults.
  39. CHOWNIT=false
  40. CHGROUPIT=false
  41. CHMODIT=false
  42. STRIPIT=false
  43. BACKIT=false
  44. TOUCHIT=true
  45. SAVESRC=false
  46. ROOT=unknown
  47.  
  48. ##  Process JCL.
  49. MORETODO=true
  50. while ${MORETODO} ; do
  51.     case X"$1" in
  52.     X-b)
  53.     BACKIT=true
  54.     BACKUP="$2"
  55.     shift
  56.     ;;
  57.     X-b*)
  58.     BACKIT=true
  59.     BACKUP=`expr "$1" : '-b\(.*\)'`
  60.     ;;
  61.     X-c)
  62.     SAVESRC=true
  63.     ;;
  64.     X-g)
  65.     GROUP="$2"
  66.     CHGROUPIT=true
  67.     shift
  68.     ;;
  69.     X-g*)
  70.     GROUP=`expr "$1" : '-g\(.*\)'`
  71.     CHGROUPIT=true
  72.     ;;
  73.     X-G)
  74.     case ${ROOT} in
  75.     unknown)
  76.         case `${WHOAMI}` in
  77.         root)
  78.         ROOT=true
  79.         ;;
  80.         *)
  81.         ROOT=false
  82.         ;;
  83.         esac
  84.         ;;
  85.     esac
  86.     GROUP="$2"
  87.     shift
  88.     ${ROOT} && CHGROUPIT=true
  89.     ;;
  90.     X-G*)
  91.     case ${ROOT} in
  92.     unknown)
  93.         case `${WHOAMI}` in
  94.         root)
  95.         ROOT=true
  96.         ;;
  97.         *)
  98.         ROOT=false
  99.         ;;
  100.         esac
  101.         ;;
  102.     esac
  103.     if ${ROOT} ; then
  104.         GROUP=`expr "$1" : '-g\(.*\)'`
  105.         CHGROUPIT=true
  106.     fi
  107.     ;;
  108.     X-m)
  109.     MODE="$2"
  110.     CHMODIT=true
  111.     shift
  112.     ;;
  113.     X-m*)
  114.     MODE=`expr "$1" : '-m\(.*\)'`
  115.     CHMODIT=true
  116.     ;;
  117.     X-n)
  118.     TOUCHIT=false
  119.     ;;
  120.     X-o)
  121.     OWNER="$2"
  122.     CHOWNIT=true
  123.     shift
  124.     ;;
  125.     X-o*)
  126.     OWNER=`expr "$1" : '-o\(.*\)'`
  127.     CHOWNIT=true
  128.     ;;
  129.     X-O)
  130.     case ${ROOT} in
  131.     unknown)
  132.         case `${WHOAMI}` in
  133.         root)
  134.         ROOT=true
  135.         ;;
  136.         *)
  137.         ROOT=false
  138.         ;;
  139.         esac
  140.         ;;
  141.     esac
  142.     OWNER="$2"
  143.     shift
  144.     ${ROOT} && CHOWNIT=true
  145.     ;;
  146.     X-O*)
  147.     case ${ROOT} in
  148.     unknown)
  149.         case `${WHOAMI}` in
  150.         root)
  151.         ROOT=true
  152.         ;;
  153.         *)
  154.         ROOT=false
  155.         ;;
  156.         esac
  157.         ;;
  158.     esac
  159.     if ${ROOT} ; then
  160.         OWNER=`expr "$1" : '-o\(.*\)'`
  161.         CHOWNIT=true
  162.     fi
  163.     ;;
  164.     X-s)
  165.     STRIPIT=true
  166.     ;;
  167.     X--)
  168.     shift
  169.     MORETODO=false
  170.     ;;
  171.     X-*)
  172.     echo "${PROGNAME}:  Unknown flag $1" 1>&2
  173.     exit 1
  174.     ;;
  175.     *)
  176.     MORETODO=false
  177.     ;;
  178.     esac
  179.     ${MORETODO} && shift
  180. done
  181.  
  182. ##  Process arguments.
  183. if [ $# -ne 2 ] ; then
  184.     echo "Usage:  ${PROGNAME} [flags] source destination"
  185.     exit 1
  186. fi
  187.  
  188. ##  Making a directory?
  189. if [ X"$1" = X. ] ; then
  190.     DEST="$2"
  191.     if [ ! -d "${DEST}" ] ; then
  192.     ${MKDIR} "${DEST}" || exit 1
  193.     fi
  194.     if ${CHOWNIT} ; then
  195.     ${CHOWN} "${OWNER}" "${DEST}" || exit 1
  196.     fi
  197.     if ${CHGROUPIT} ; then
  198.     ${CHGRP} "${GROUP}" "${DEST}" || exit 1
  199.     fi
  200.     if ${CHMODIT} ; then
  201.     umask 0
  202.     ${CHMOD} "${MODE}"  "${DEST}" || exit 1
  203.     fi
  204.     exit 0
  205. fi
  206.  
  207. ##  Get the destination and a temp file in the destination diretory.
  208. if [ -d "$2" ] ; then
  209.     DEST="$2/$1"
  210.     TEMP="$2/$$.tmp"
  211. else
  212.     DEST="$2"
  213.     TEMP="`expr "$2" : '\(.*\)/.*'`/$$.tmp"
  214. fi
  215.  
  216. ##  If not given the same name, we must try to copy.
  217. if [ X"$1" != X"$2" -o $SAVESRC ] ; then
  218.     if cmp -s "$1" "${DEST}" ; then
  219.     ##  Files are same; touch or not.
  220.     ${TOUCHIT} && touch "${DEST}"
  221.     else
  222.     ##  If destination exists and we wish to backup, link to backup.
  223.     if [ -f "${DEST}" ] ; then
  224.         if ${BACKIT} ; then
  225.         ${RM} -f "${DEST}${BACKUP}"
  226.         ${LN} "${DEST}" "${DEST}${BACKUP}"
  227.         fi
  228.     fi
  229.     ##  Copy source to the right dir, then move to right spot.
  230.     ##  Done in two parts so we can hope for atomicity.
  231.     ${RM} -f "${TEMP}" || exit 1
  232.     ${CP} "$1" "${TEMP}" || exit 1
  233.     ${MV} -f "${TEMP}" "${DEST}" || exit 1
  234.     fi
  235. fi
  236.  
  237. ##  Strip and set the modes.
  238. if ${STRIPIT} ; then
  239.     ${STRIP} "${DEST}" || exit 1
  240. fi
  241. if ${CHOWNIT} ; then
  242.     ${CHOWN} "${OWNER}" "${DEST}" || exit 1
  243. fi
  244. if ${CHGROUPIT} ; then
  245.     ${CHGRP} "${GROUP}" "${DEST}" || exit 1
  246. fi
  247. if ${CHMODIT} ; then
  248.     umask 0
  249.     ${CHMOD} "${MODE}"  "${DEST}" || exit 1
  250. fi
  251. exit 0
  252.