1

配列および 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

month の値は文字列または数値ですか? その値を 1 の値と直接比較できますか? 前に set と言いましたが、letter を使用するたびに set を含める必要がありますか? if ステートメントは CShell でどのように機能しますか? CShell の配列は Java のように機能しますか? 私はJavaで月1を行うことを知っていますが、私の調査から、配列は0ではなく1から始まることを読みました.これは本当ですか? そして、ifエラーが発生する理由を誰か教えてもらえますか?

4

1 に答える 1

1

(あなたの見出しには と書かcshれていますが、あなたはこれを でタグ付けしていますrc-shell。 のフォロワー数が少ないことに注意してください。オリジナルよりもインタラクティブな機能を備えrc-shellた少し新しい変種もあり、まだフォローされているようです)tcshcsh

month の値は文字列または数値ですか?その値を 1 の値と直接比較できますか?

cshデータの型は 1 つだけで、それは文字列です。、 などの文字列化された数値を理解する外部プログラムを呼び出すことができます。もちろん、bc、、などdcの言語も使用できますが、プログラムに値を渡して処理する場合、それは文字列です。そうは言っても、csh の「複雑な代入」構文を正しく使用しています。awkperlpython@

$month という名前の変数から 1 を減算できますか@ month-=1? $month = "02" の場合はどうなりますか?、よくわかりません。テストを行うだけでわかります ;-)。

前に set と言いましたが、letter を使用するたびに set を含める必要がありますか?

はい、set変数を設定するための csh 構文の一部です

if ステートメントは CShell でどのように機能しますか?

?? 他の言語のように?それらが別の言語でどのように機能するか知っていますか? if前のテストが失敗した場合にのみ評価されます (および内部のコードが実行されます) 。

CShell の配列は Java のように機能しますか? 私はJavaで月1を行うことを知っていますが、私の調査から、配列は0ではなく1から始まることを読みました.これは本当ですか?

私はそれcshが1ベースのインデックスであると確信しています。残念ながら (またはそうではない)、私は自宅でも職場でも csh にアクセスできないため、簡単なテストを行うことができません。あなたが見つけた証拠に頼るだけです。

そして、ifエラーが発生する理由を誰か教えてもらえますか?

表示される正確なエラー メッセージを見ないと、判断が難しいでしょう。また、コンテキストがあると役立ちます。set -vx幸いなことに、利用可能な debug/trace オプションを使用して、それを自分で確認できます。その出力でスクリプトが失敗している場所がより明確になる場合があります。または、スクリプトがまったく実行を拒否する場合は、スクリプトを実行するためだけにスクリプトの大部分をコメント アウトしてから、問題のあるコード セクションが見つかるまで、論理セクションのコメントを解除します。(正確なエラーメッセージを投稿したい場合は、質問を編集してそれを含めてください。この回答へのコメントとして投稿しないでください)。

IHTH

于 2013-07-09T22:58:42.897 に答える