0

我必须为 unix 编写一个 tcsh 脚本,它从文本文件中的每一行中提取值,比较它们并决定你是应该买(1)、卖(-1)还是什么都不做(0)。基本上是一个简单的股票利润计算。我认为我的所有逻辑都是正确的,但是当我运行脚本时出现“while 语法错误”并且它永远不会执行。我有下面的完整脚本,是否不能在使用 unix 的 while 循环中嵌套语句?如果是这样,有什么建议如何做到这一点?

#!/bin/tcsh

set lineNum='wc -l testcase.txt'
set i=1
while ($i<$lineNum) 
   set prices='sed -n '$lineNump' testcase.txt'
   set arr=( $price )
   set j='echo ${#arr}'
   set price=0
   set x=0
   set y=0
   set k=0
   while ($k < $j)
      set a=arr[$k]
      set str=""
      if ($a>$price)
      then
          str="$str 1"
          price=$((price-a))
      else if($a<$price)
      then
          str="$str -1"
          price=$((price+a))
      else if($a==$price)
      then
          str="$str 0"
      fi
      str="$str $price"
      if ($str=='sed -n'('expr $lineNum+1'p)' testcase.txt')
      then
          x=$((x+1))
      fi
      y=$((y+1))
    end
lineNum=$((lineNum+2))
end
echo $x/$y
4

2 回答 2

0

您缺少与第一个 while 相对应的 end 语句。
您还使用 fi 而不是 endif。“then”关键字需要与它们所属的“if”在同一行。

于 2013-05-31T22:54:31.257 回答
0

您的脚本似乎是tcshbash语法的混合体。

正如马克的回答所说,then关键字必须与 the 位于同一行if(除非您使用反斜杠拼接两行,但这样做没有多大意义)。

对于变量赋值,set关键字不是可选的;这:

str="$str 1"

是 csh/tcsh 中的语法错误(它可能会查找名称以 . 开头的命令"str="。)将其写为:

set str = "$str 1"

请注意,您可以选择=. settcsh 的语法有点乱:

set foo=bar   # ok
set foo = bar # ok
set foo= bar  # ok
set foo =bar  # error: "Variable name must begin with a letter."

x=$((x+1))语法特定于 bash 和相关的 shell。tcsh@用于算术赋值:

set x = 42
@ x ++        # sets $x to 43
@ x = $x * 2  # sets $x to 86

如果您有选择,我建议您编写脚本以使用 bash 而不是 tcsh(您已经完成了一半)。它的语法更加规则。

可以在这里找到关于 csh/tcsh 编程的经典咆哮。

于 2013-05-31T23:06:21.710 回答