2

我有以下脚本:

#!/bin/csh
echo "jones 2143 78 84 77" >! student-marks
echo "Gondrol 2243 88 94 87" >> student-marks

awk '{
if ($3 >=35 && $4 >= 35 && $5 >= 35)
    print $0,"=>","Pass";
else
    print $0,"=>","Fail";
}' student-marks

我直接从 URL http://www.thegeekstuff.com/2010/02/awk-conditional-statements/复制

作为一个例子来学习如何在 awk 中使用 if else 逻辑。不幸的是,我不断收到错误 Unmatched ' 任何建议?

4

2 回答 2

2

DigitalRoss是正确的,csh 处理多行引用字符串的方式与 POSIX shell 不同,并且使用shorbash可能更容易。 csh通常被认为是一个糟糕的脚本选择(尽管有些人更喜欢它,特别是在它的tcsh变体中,用于交互使用)。

有关使用for 脚本编写问题的讨论,请参阅“Csh Programming Considered Harmful” 。csh

但是可以使用 csh 做你想做的事。您只需要在多行引用字符串中的每一行末尾添加一个反斜杠:

#!/bin/csh -f
echo "jones 2143 78 84 77" >! student-marks
echo "Gondrol 2243 88 94 87" >> student-marks

awk '{\
if ($3 >=35 && $4 >= 35 && $5 >= 35)\
    print $0,"=>","Pass";\
else\
    print $0,"=>","Fail";\
}' student-marks

输出:

jones 2143 78 84 77 => Pass
Gondrol 2243 88 94 87 => Pass

我又偷偷做了一个小改动:将-f选项添加到该#!行。这可以防止csh加载任何资源或启动文件,因此脚本 (a) 将启动得更快一些,并且 (b) 将避免意外依赖您自己的文件.cshrc.login文件。(这不适用于shbash脚本;对于那些 shell,该-f选项具有完全不同的含义。)

于 2012-12-13T00:59:37.690 回答
2

更改cshshbash

#!/bin/sh
...

Csh 不像 Posix shell 那样处理多行引用的字符串。

于 2012-12-13T00:47:14.020 回答