我有以下脚本:
#!/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逻辑。不幸的是我一直得到错误无与伦比' 有什么建议吗?
答案 0 :(得分:2)
将csh
更改为sh
或bash
。
#!/bin/sh
...
Csh不像Posix shell那样处理多行引用的字符串。
答案 1 :(得分:2)
DigitalRoss是正确的,csh处理多行引用字符串的方式与POSIX shell不同,使用sh
或bash
可能更容易。 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
文件。 (不适用于sh
和bash
脚本;对于这些shell,-f
选项具有完全不同的含义。)