Chsell with Arrays和Ifs

时间:2013-07-08 12:40:48

标签: rc-shell

我收到一个if语句错误,我不熟悉将CShell与数组和if语句一起使用。

我正在阅读的文件是

FGF 101001011000

我的代码是

#!/bin/csh
foreach year (1999 2000 2001)
foreach month (1 2 3 4 5)
echo "" > $year$month
if ($month == 1) then
    set letter = F
else if ($month == 2) then
    set letter = G
else if ($month == 3) then
    set letter = H
else if ($month == 4) then
    set letter = R
else if ($month == 5) then
    set letter = D
else 
    print "Fail"
endif
@ year2 = $year % 100
awk '{split ($2,b,""); if (b["'$month'"] == 1) print $1"'$letter'""'$year2'"}' fileRead >> newFile  
end
end

月份的值是字符串还是数字,我可以直接将该值与值1进行比较吗?即使我之前说过,我每次使用字母时都需要包括设置吗? if语句如何在CShell中工作? CShell中的数组是否像在java中一样工作?我知道在java中我会做第1个月,但是,根据我的研究,我已经读过数组从1开始而不是0.这是真的吗?谁能告诉我为什么我会收到if错误?

1 个答案:

答案 0 :(得分:1)

(您的标题为csh,但您已使用rc-shell对此进行了标记。请注意rc-shell的关注者数量较少。还有一些较新的tcsh具有比原始csh更多交互功能的变体,并且似乎仍然具有以下内容)

  

月份的值是字符串还是数字,我可以直接将该值与值1进行比较吗?

csh只有一种数据类型,那就是字符串。您可以调用了解字母数字的外部程序,例如bcdc,当然还有awkperlpython等语言,但是你将一个值传递给要处理的程序,它是一个字符串。也就是说,您正在使用csh的@“复杂赋值”语法。

如果您只是问,可以从名为$ month的变量中减去1,那么答案是肯定的,使用@ month-=1。当$ month =“02”时会发生什么?,不确定,只是做一个测试,你会看到; - )。

  

即使我之前说过设置,每次使用字母时都需要包括设置吗?

是的,set是用于设置变量

的csh语法的一部分
  

if语句如何在CShell中起作用?

??像任何其他语言一样?你知道他们是如何用另一种语言工作的吗?如果之前的if测试失败,它们只会被评估(并且内部执行的代码)。

  

CShell中的数组是否像在java中一样工作?我知道在java中我会做第1个月,但是,根据我的研究,我已经读过数组从1开始而不是0.这是真的吗?

我很确定csh是一个基于单一的索引。不幸的是(或者不是),我无法在家中或工作中访问csh,因此我无法进行简单的测试。只要依靠你找到的证据。

  

任何人都可以告诉我为什么我会收到if错误?

如果没有看到您收到的确切错误消息,将很难说清楚。具有上下文也会有所帮助。 Fortuantely,您可以通过使用set -vx调试/跟踪选项来自行查看。如果脚本在输出失败的地方可能更明显。或者,如果脚本完全拒绝运行,请注释掉脚本的大部分内容,只是为了让它运行,然后取消注释逻辑部分,直到找到有问题的代码部分。 (如果你想发布确切的错误消息,那么请编辑你的问题以包含它,不要发表评论作为对这个答案的评论,请。)

IHTH