所以我正在编写一个计算器 c shell 脚本,它从文件中读取数字,然后 shell 返回答案。例如,在数字文本文件中,我会:
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 *=
所以在文本文件中的放置不是问题。这是表达的问题。