所以我正在寫一個計算器c shell腳本,它從文件中讀取數字,然後shell返回答案。例如,在數字文本文件,我將有:csh錯誤「set:No match」。
1129 3100 +
和我的CSH文件,一旦運行,將返回
Input from line 1 : 1129 3100 +
ARG1: 1129
ARG2: 3100
ARG3: +
4229
我的問題是,當我到了28日線的28行的文件,輸出是:
Input from line 28 : 7 4 *=
set: No match.
根據我的代碼,我本應該返回:
Input from line 28 : 7 4 *=
ARG1: 7
ARG2: 4
ARG3: *=
Invalid Input in line 28
這裏是我的代碼:
#!/bin/csh
# Usage: Performs math operations
@ linenum=0
foreach line ("`cat calc_input.txt`")
@ linenum += 1
echo "Input from line $linenum : $line"
set argv = ($line)
set var1 = $1
set var2 = $2
set var3 = $3
echo "ARG1: $var1"
echo "ARG2: $var2"
echo "ARG3: $var3"
switch ($var3)
case +:
@ ans = $var1 + $var2
echo $ans
breaksw
case -:
@ ans = $var1 - $var2
echo $ans
breaksw
case x:
@ ans = $var1 * $var2
echo $ans
breaksw
case /:
if ($var2 == 0) then
echo "Error: Divide by Zero"
continue
endif
@ ans = $var1/$var2
echo $ans
breaksw
case %:
@ ans = $var1 % $var2
echo $ans
breaksw
default:
echo "Invalid Input in line $linenum"
breaksw
endsw
end
這裏是我要讀的數字
1129 3100 +
-19 6 +
9 3 -
-7 6 -
9 3/
4 8/
35 6/
12 3 %
13 3 %
4 19 %
11 9 x
4294967296 1024 x
-9 7 x
1024 0/
14 63 <<
1234 5678 >>
1 2 3 4 +
1 +
3 -
7 x
12/
91 %
7 ++
3 1 +=
6 2 -=
4 6 *
-11 7 *
7 4 *=
我只需要擔心+,文件 - ,x,/和%。任何格式不正確的我都會顯示錯誤消息。
感謝您的幫助!
是的,這是一個家庭作業問題,我知道csh是一個可怕的,可怕的事情,大多數人不使用它。告訴我的老師,不是我。
更新:剛剛嘗試將它遇到麻煩的行移動到數字文件中的不同行。它仍然有問題,但每當腳本遇到了它只是發生:
7 4 *=
所以它不是在文本文件中的位置問題。這是表達的問題。
感謝您的回覆。默認情況下是冒號嗎?我剛添加它,它仍然無法工作。 – user2060214 2013-02-26 03:14:17
是的,你明白了。我添加了另一個提示。你應該嘗試把你自己的一些額外的測試用例放在一起 - 例如,如果你有'3 4 Y'會發生什麼? (它應該觸及你的'默認'條款......是嗎?) – Mogsdad 2013-02-26 13:34:33