LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1078|回复: 9

请教一个shell执行错误问题

[复制链接]
发表于 2004-6-19 16:45:48 | 显示全部楼层 |阅读模式
这是pro/e wildfire for linux安装时的错误list
谢谢帮助!



下面的脚本在执行命令
#sh   setup
: command not found
setup: line 78: syntax error near unexpected token `elif'
'etup: line 78: `  elif [ "$1" = "?" -o "$1" = "-h" -o "$1" = "-help" ]
//所有 elif语句处出错



os:rhel3.0as

setup 内容:
#!/bin/sh -f
#=============================================================
# MODIFICATIONS
# ---------------------------------------------------------
# 06-Oct-97 $$1  JJE  Created.
# 28-Oct-97 $$2  JJE  Use -dirs
# 05-Dec-97 $$3  JJE  Remove -vrdirs, set LC_NUMERIC to C
# 22-Dec-97 $$4  JJE  Check DISPLAY
# 05-Jan-98 $$5  JJE  ignore
# 13-Jan-98 $$6  JJE  Use delta lib
# 22-Jan-98 $$7  JJE  Add . to path on sgi
# 23-Jan-98 $$8  JJE  Add startup messages
# 27-Jan-98 $$9  JJE  Add cr
# 31-Jan-98 $$10 JJE  Don't echo argv
# 23-Feb-98 $$11 ZRL  Added remote install
# 06-Apr-98 $$12 JJE  Add sgi_mips4
# 22-Jun-98 $$13 ZRL  removed galaxy library
# 29-Jun-98 ##14 ZRL  use galaxy library only on sgi_elf2
# 11-Aug-98 $$14 JJE  Fix remote install for mips4
# 22-Oct-98 $$15 TWH  Fixed remote install
# 11-Nov-98      TWH  Fixed cleanup
# 20-Nov-98 $$16 TWH  Fixed Trusted login check for Sun
# 08-Sep-99 $$17 JJE  Migrate to new installer
# 20-Oct-99 $$18 MYA  Add DPS_DIRECTORY
# 07-Aug-00      TWH  Check if hpux11_pa32 exists
# 22-Aug-00 $$19 TWH  rewritten to /bin/sh for multicd
# 18-Sep-00 $$20 TWH  support non \c echo; -multicd iff using redirect
# 09-Oct-00 $$21 TWH  Fix command-line args; fix PROSETUP_EXE bug
# 31-Oct-00 $$22 TWH  Fix for $0 == "setup"
# 17-Jan-01 $$23 TWH  always run sun4_solaris instead of _64 this script
# 16-May-01 $$24 TWH  always run hpux11_pa32 instead of hpux_pa64
# 13-Jun-02 $$25 JJE  Support -64 arg
# 16-Jul-02 $$26 TWH  Set TMP & TEMP if not set
# 20-Aug-02 $$27 TWH  Fix #26
# 26-Aug-02 $$28 TWH  Another fix for #26
# 23-Jan-03 J-03-41  $$29  MAZ  Support PROSETUP_EXE in multicd mode
#=============================================================

rundir=`pwd`
fullscrname=$0
# :t
scrname=`echo $fullscrname | awk -F"/" '{ print $NF}'`
# :h
fullscrpath=`echo $fullscrname | awk -F"/" '{ ORS="/"} { n=split($0,A)} { for (i = 1; i < n; i++) print A }'`
if [ "$fullscrpath" = "" ]
then
  fullscrpath=$0
else
  fullscrpath=`echo $fullscrpath | awk '{ n=length($0)} { n -= 1} { print substr($0,1,n)}'`
fi

if [ "$fullscrpath" = "$fullscrname" ]
then
  fullscrpath=`pwd`
else
  cd $fullscrpath
  fullscrpath=`pwd`
fi

echostr=`echo "test \c"`
if [ "$echostr" = "test \c" ]
then
  alt_echo=true
fi

bit_mode_64=false
other_args=""
i=1
while [ "$i" -le $# ]
do
  if [ "$1" = "-display" ]
  then
    shift
    echo "setting DISPLAY to: $1"
    DISPLAY="$1"
    export DISPLAY
    shift
  elif [ "$1" = "?" -o "$1" = "-h" -o "$1" = "-help" ]
  then
    echo ""
    echo "Usage: $scrname [ -display unix:0 ]"
    exit 0
  elif [ "$1" = "-remote" ]
  then
    echo ""
    echo "Sorry, remote installation is not supported in this release."
    exit 1
  elif [ "$1" = "-cdrom" ]
  then
    shift
    echo "setting CDROM path to: $1"
    fullscrpath="$1"
    shift
  elif [ "$1" = "-64" ]
  then
    shift
    bit_mode_64=true
  else
    other_args="$other_args $1"
    shift
  fi
done

cd $rundir
prodir=$fullscrpath
imagedir=$fullscrpath
getpmtscr="getpmt.csh"

if [ ! -x "$imagedir/$getpmtscr" ]
then
  echo ""
  echo "ERROR:  $imagedir/$getpmtscr - file is missing."
  echo "        Check the name of the CD mount directory."
  exit 1
fi

mctype=`$imagedir/$getpmtscr`
if [ "$mctype" = "UNKNOWN" ]
then
  echo ""
  echo "ERROR:  OS name unknown."
  exit 1
fi

test "$TMP"
if [ $? != 0 ]
then
  if [ -x "/tmp" ]
  then
  TMP="/tmp"
  export TMP
  elif [ -x "/var/tmp" ]
  then
  TMP="/var/tmp"
  export TMP
  fi
fi
test "$TEMP"
if [ $? != 0 ]
then
  if [ -x "/tmp" ]
  then
  TEMP="/tmp"
  export TEMP
  elif [ -x "/var/tmp" ]
  then
  TEMP="/var/tmp"
  export TEMP
  fi
fi
test "$DISPLAY"
if [ $? != 0 ]
then
  echo ""
  echo 'ERROR:  The DISPLAY variable is not set - '
  echo ""
  echo "   Options:"
  echo "      o Press <cr> to set DISPLAY to `hostname`:0.0"
  echo "      o Type a value to use for the DISPLAY variable"
  echo "      o Enter 'q' to abort prosetup"
  echo "      o Specify '-display <host>:0' on the command line"
  echo ""
  test "$alt_echo"
  if [ $? = 0 ]
  then
    echo -n "Set it to (`hostname`:0.0): [q to abort] "
  else
    echo "Set it to (`hostname`:0.0): [q to abort] \c"
  fi
  read line
  if [ "$line" = "q*" -o "$line" = "Q*" ]
  then
    exit -1
  elif [ "$line" = "" ]
  then
    DISPLAY="`hostname`:0.0"
    export DISPLAY
  else
    DISPLAY="$line"
    export DISPLAY
  fi
  echo ""
  echo "   DISPLAY has been set to: $DISPLAY"
  echo ""
fi

echo ""
test "$alt_echo"
if [ $? = 0 ]
then
  echo -n "Starting PTC.Setup, please wait ..."
else
  echo "Starting PTC.Setup, please wait ...\c"
fi

if [ "$mctype" = "sun4_solaris_64" -a "$bit_mode_64" = "false" ]
then
  mctype="sun4_solaris"
fi
if [ "$mctype" = "sun4_solaris" ]
then
  PATH=$PATH:/usr/ucb
  export PATH
fi

if [ "$mctype" = "sgi_elf2" -o "$mctype" = "sgi_mips4" ]
then
  PATH=.PATH
  export PATH
fi
if [ "$mctype" = "hpux_pa64" -a "$bit_mode_64" = "false" ]
then
  mctype="hpux11_pa32"
fi
if [ "$mctype" = "hpux11_pa32" ]
then
  if [ ! -d "$imagedir/dsrc/$mctype" ]
  then
    mctype="hp8k"
  fi
fi

PTC_CDHOME=$imagedir
export PTC_CDHOME
PS_DIRECTORY=$imagedir/dsrc
export PS_DIRECTORY
DPS_DIRECTORY=$imagedir/dsrc
export DPS_DIRECTORY
PRO_MACHINE_TYPE=$mctype
export PRO_MACHINE_TYPE
LC_NUMERIC=C
export LC_NUMERIC

test "$PROSETUP_EXE"
if [ $? != 0 ]
then
  PROSETUP_EXE="$imagedir/dsrc/$mctype/obj/ptcsetup"
elif [ -x "$PROSETUP_EXE" ]
then
  echo ""
  test "$alt_echo"
  if [ $? = 0 ]
  then
    echo -n "Using $PROSETUP_EXE ..."
  else
    echo "Using $PROSETUP_EXE ...\c"
  fi
fi

if [ ! -x "$PROSETUP_EXE" ]
then
  echo ""
  echo "ERROR:  $PROSETUP_EXE - file is missing."
  echo "        Check the name of the CD mount directory."
  exit 1
fi

REDIRECT_EXE="$imagedir/dsrc/$mctype/obj/redirect"
if [ -x "$REDIRECT_EXE" ]
then
  ($REDIRECT_EXE $other_args -multicd ) &
else
  ($PROSETUP_EXE $other_args ) &
fi

echo ""
exit 0


:help :help :help
发表于 2004-6-19 21:56:35 | 显示全部楼层
#sh setup
: command not found
setup: line 78: syntax error near unexpected token `elif'
'etup: line 78: ` elif [ "$1" = "?" -o "$1" = "-h" -o "$1" = "-help" ]
//所有 elif语句处出错

首行的-f是多余的,而且elif不是sh的语法,提示的是格式错误嘛
 楼主| 发表于 2004-6-20 13:03:59 | 显示全部楼层
怎么样修改能消除错误???
谢谢!
发表于 2004-6-20 13:12:03 | 显示全部楼层
呵呵,建议你先看看
http://www.linuxsir.cn/bbs/showthread.php?threadid=28945
看完了条件判断,就知道怎么改了~
这是shell入门的基础,建议仔细研读
 楼主| 发表于 2004-6-21 08:04:42 | 显示全部楼层
不是有elif-then 结构吗?????
我看了还是不清楚为什么elif结构sh不支持!
发表于 2004-6-21 08:47:42 | 显示全部楼层
format了一下, 没有修改, 执行通过.

  1. #!/bin/sh

  2. if [ "$1" = "-display" ]; then
  3.         shift
  4.         echo "setting DISPLAY to: $1"
  5.         DISPLAY="$1"
  6.         export DISPLAY
  7.         shift
  8. elif [ "$1" = "?" -o "$1" = "-h" -o "$1" = "-help" ]; then
  9.         echo ""
  10.         echo "Usage: $scrname [ -display unix:0 ]"
  11.         exit 0
  12. elif [ "$1" = "-remote" ]; then
  13.         echo ""
  14.         echo "Sorry, remote installation is not supported in this release."
  15.         exit 1
  16. elif [ "$1" = "-cdrom" ]; then
  17.         shift
  18.         echo "setting CDROM path to: $1"
  19.         fullscrpath="$1"
  20.         shift
  21. elif [ "$1" = "-64" ]; then
  22.         shift
  23.         bit_mode_64=true
  24. else
  25.         other_args="$other_args $1"
  26.         shift
  27. fi
复制代码

lee兄, bash是支持elif的哟 ;) 不过这么多参数, 用case比较合适.
 楼主| 发表于 2004-6-21 10:49:39 | 显示全部楼层
奇怪我也是调整了就是不能执行,怪怪!
不行贴个附件给我吧!!!!!
谢谢
发表于 2004-6-21 11:19:14 | 显示全部楼层
我建议你换成case语句, 清晰又简单. 上面的判断位置参数的结构是case的典型运用. 而且case支持regex正则表达.
case $1 in
       -display) cmds;;
       -h|--help) cmds;;
       ...
esac
发表于 2004-6-21 11:19:22 | 显示全部楼层
我建议你换成case语句, 清晰又简单. 上面的判断位置参数的结构是case的典型运用. 而且case支持regex正则表达.
case $1 in
       -display) cmds;;
       -h|--help) cmds;;
       ...
esac
发表于 2004-6-21 12:01:38 | 显示全部楼层
最初由 yongjian 发表

lee兄, bash是支持elif的哟 ;) 不过这么多参数, 用case比较合适.

:sorry 我记错了,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表