我必须为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
答案 0 :(得分:0)
您缺少与第一个相对应的结束语句。
你也使用fi而不是endif。
“then”关键字需要与它们所属的“if”在同一行。
答案 1 :(得分:0)
您的脚本似乎是tcsh
和bash
语法的混合。
正如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。