.sh 文件有问题

.sh 文件有问题

我没有编写 .sh 文件的经验。我想运行 pvm2raw 实用程序这个应用程序来自卷库

在 Ubuntu 10.10 中运行 build.sh 时出现以下错误。

在此处输入图片描述

build.sh如下:# make 命令set mmfile=V3Makefileset make="make -f $mmfile"

set rule=$1
if ($rule == "") set rule="all" // line 16

if ($rule == "deps") then
   if ($HOSTTYPE == "iris4d") $make MAKEDEPEND="CC -M" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=IRIX depend
   if ($HOSTTYPE == "i386") $make MAKEDEPEND="c++ -M -I/usr/X11R6/include" OPTS="-DHAVE_CONFIG_H -DVIEWER_HAVE_DCMTK" TARGET=LINUX depend

那儿有什么问题?

编辑:我按照 kniwor 的建议安装了 csh。现在我收到以下错误:

在此处输入图片描述

我该如何解决这个未定义变量的问题?

答案1

这看起来像一个 c-shell 脚本。使用

sudo apt-get install csh

然后尝试在 c-shell 中运行该脚本。您可以通过运行韓軟體来自 bash shell。

答案2

通过声明应在哪个 shell 中运行脚本来启动所有 shell 脚本是一种很好的方式,可以减少混淆。 Borne shell(您称为“.sh”)的第一行是“ #!/bin/sh”。这有助于消除对使用哪个 shell 的所有混淆,因为每个 shell 的语法和命令结构都有细微差别。

对于 Borne shell,if命令看起来更像这样: if [ $rule = "deps" ]; then # process based on HOSTTYPE fi

还有其他一些建议,它们现在可能不是问题,但随着时间的推移可能会给您带来麻烦。

1- 定义一致的变量命名约定,例如全部大写,以便您可以更轻松地阅读代码和识别变量。2- 使用花括号引用变量,这样它们就不会“混淆”。3- 比较字符串时,也将变量放在引号中。

因此,让我们将第一行从

if ($rule == "") set rule="all"

if [ "${rule}XXX" = "XXX" ]; rule="all"

花括号避免了与 XXX 混淆,该语法表示变量“rule”的值末尾附加了“XXX”。因此,如果结果只有 XXX,那么您就知道变量为空或为 null。

对于主机类型,您可以尝试添加另一行,就像规则一样:

set HOSTTYPE=$2

然后在启动脚本时添加第二个参数,输入主机类型,例如build.sh deps i386

相关内容