在if循环中嵌套if语句 - C shell

时间:2013-05-29 19:40:04

标签: while-loop tcsh

我必须为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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

str="$str 1"

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

set str = "$str 1"

请注意,{em>可选在=的{​​{1}}周围有空格。 tcsh的语法有点混乱:

set

set foo=bar # ok set foo = bar # ok set foo= bar # ok set foo =bar # error: "Variable name must begin with a letter." 语法特定于bash和相关shell。 tcsh使用x=$((x+1))进行算术分配:

@

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

关于csh / tcsh编程的经典咆哮can be found here

相关问题