2013-07-08 117 views
1

我得到了一個if語句錯誤,我不熟悉如何使用數組和if語句的CShell。Chsell with Arrays and Ifs

我的文件,我正在讀的

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?即使我之前說過設置,每次使用信函時是否都需要包含設置?如果語句在CShell中工作,該怎麼辦? CShell中的數組像在java中一樣工作嗎?我知道在Java中,我會做第一個月,但是,從我的研究中,我已經讀了數組從1開始,而不是0。這是真的嗎?誰能告訴我爲什麼我得到一個如果錯誤?

回答

1

(您的標題說csh,可是你卻用rc-shell此標記注意追隨者的低數rc-shell,還具有比原來更csh互動功能,似乎仍然有稍微新tcsh變種以下)

是月的值是一個字符串還是一個數字,我可以直接比較該值與1的值?

csh僅具有一種類型的數據,這是字符串。你可以調用理解字符串數字的外部程序,例如bcdc,當然還有awk,perl,python等語言,但是當你傳遞一個值給要處理的程序時,它是一個字符串。也就是說,您正確使用csh的@「複雜賦值」語法。

如果你只是問,你能從名爲$ month的變量減1,那麼答案是肯定的,使用@ month-=1。當$ month =「02」時會發生什麼?,不確定,只是做一個測試,你會看到;-)。

即使我之前說過設置,每次使用字母時都需要包括設置嗎?

是,set是設置變量

怎麼辦else if語句在CShell工作csh的語法的一部分?

?? ??像其他語言一樣?你知道他們如何用另一種語言工作嗎?如果以前的if測試失敗,它們只會被評估(並執行代碼)。

在CShell中的數組像在java中一樣工作嗎?我知道在Java中,我會做第一個月,但是,從我的研究中,我已經讀了數組從1開始,而不是0。這是真的嗎?

我很確定csh是一個基於索引的索引。不幸的是(或不是),我無論在家中還是在工作中都無法使用csh,所以我不能做一個簡單的測試。只要依靠你找到的證據。

誰能告訴我爲什麼我得到一個如果錯誤?

沒有看到確切的錯誤信息,你會得到,這將是很難說。擁有上下文將會有所幫助。 Fortuantely,你可以通過使用set -vx可用的調試/跟蹤選項來看到自己。如果腳本在輸出失敗的情況下可能更明顯。或者如果腳本拒絕運行,則註釋掉腳本的大部分內容,只是爲了讓腳本運行,然後取消註釋邏輯部分,直到找到違規代碼部分。 (如果您想發佈確切的錯誤信息,請編輯您的問題以包含該信息,請勿將此信息作爲評論發佈)。

IHTH