我收到一个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错误?
答案 0 :(得分:1)
(您的标题为csh
,但您已使用rc-shell
对此进行了标记。请注意rc-shell
的关注者数量较少。还有一些较新的tcsh
具有比原始csh
更多交互功能的变体,并且似乎仍然具有以下内容)
月份的值是字符串还是数字,我可以直接将该值与值1进行比较吗?
csh
只有一种数据类型,那就是字符串。您可以调用了解字母数字的外部程序,例如bc
,dc
,当然还有awk
,perl
,python
等语言,但是你将一个值传递给要处理的程序,它是一个字符串。也就是说,您正在使用csh的@
“复杂赋值”语法。
如果您只是问,可以从名为$ month的变量中减去1,那么答案是肯定的,使用@ month-=1
。当$ month =“02”时会发生什么?,不确定,只是做一个测试,你会看到; - )。
即使我之前说过设置,每次使用字母时都需要包括设置吗?
是的,set
是用于设置变量
if语句如何在CShell中起作用?
??像任何其他语言一样?你知道他们是如何用另一种语言工作的吗?如果之前的if
测试失败,它们只会被评估(并且内部执行的代码)。
CShell中的数组是否像在java中一样工作?我知道在java中我会做第1个月,但是,根据我的研究,我已经读过数组从1开始而不是0.这是真的吗?
我很确定csh
是一个基于单一的索引。不幸的是(或者不是),我无法在家中或工作中访问csh,因此我无法进行简单的测试。只要依靠你找到的证据。
任何人都可以告诉我为什么我会收到if错误?
如果没有看到您收到的确切错误消息,将很难说清楚。具有上下文也会有所帮助。 Fortuantely,您可以通过使用set -vx
调试/跟踪选项来自行查看。如果脚本在输出失败的地方可能更明显。或者,如果脚本完全拒绝运行,请注释掉脚本的大部分内容,只是为了让它运行,然后取消注释逻辑部分,直到找到有问题的代码部分。 (如果你想发布确切的错误消息,那么请编辑你的问题以包含它,不要发表评论作为对这个答案的评论,请。)
IHTH