csh错误“设置:不匹配。”

时间:2013-02-26 02:55:09

标签: shell set csh

所以我正在编写一个计算器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 *=

因此,文本文件中的位置不存在问题。这是表达式的一个问题。

1 个答案:

答案 0 :(得分:0)

一个语法问题:您在默认子句中缺少一个字符。检查你的文档,你应该能够弄明白。

考虑到这一点,请考虑*对csh(通配符)的含义。关于*=的特别之处是什么?想想你如何限制csh只把它作为一个角色。

Input from line 27 : -11 7 *
ARG1: -11
ARG2: 7
ARG3: calc_input.txt

找出ARG3为文件名的原因。

Input from line 28 : 7 4 *=
set: No match.

该错误消息非常具体。查一查。

&#34;这是表达式的一个问题。&#34; - 它是关于csh对*做什么的。看看globbing。在脚本中添加一行以指示csh暂停globbing将使其正常工作。