if else代码中的csh awk语法错误

时间:2012-12-13 00:41:29

标签: awk csh

我有以下脚本:

#!/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逻辑。不幸的是我一直得到错误无与伦比' 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

csh更改为shbash

#!/bin/sh
...

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

答案 1 :(得分:2)

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

有关使用csh进行脚本编写的问题的讨论,请参阅"Csh Programming Considered Harmful"

但是可以使用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选项具有完全不同的含义。)