系统命令bash

时间:2011-11-03 19:28:15

标签: bash awk grep system

我想在bash shell脚本中使用system命令。更具体, 如果awk中的某些条件满足(工作节点数是17)我想要 给我发电子邮件,我写了以下代码:

showq | grep nodes | awk '{if ($3 == 17) system("mailx -s 'Everything is Ok' armando@nodes.com <<EOF Tranquiquis EOF")  ; else  print "some nodes are not working"; fi }'

如果我键入,我收到消息:

awk:{if($ 3 == 17)system(“mailx -s Everything
awk:^ unterminated string

我认为这个问题与如何指定消息正文有关。我不 知道怎么做。我已经尝试了几种方法来修复错误但没有成功。

问候。

4 个答案:

答案 0 :(得分:2)

正如其他2个答案所述,问题是您使用单引号。不幸的是,他们给出的推荐解决方案(反斜杠逃避单引号)不起作用。您不能通过在单个带引号的字符串中转义它来获得单引号。最简单的解决方案是写:

system("mailx -s \"Everything is Ok\" ...

答案 1 :(得分:0)

你正在使用awk命令的单引号,在其中,你应该用反斜杠转义它们的单引号。

答案 2 :(得分:0)

我发现了问题,它与单引号无关。实际上,我使用的命令如'showq',但必须使用整体 这种命令的路径:crontabs中的'/ opt / moab / bin / showq'。

感谢。

答案 3 :(得分:0)

showq | grep nodes | awk '
{
  if ($3 == 17)
    system("mailx -s \47Everything is Ok\47 armando@nodes.com <<eof" RS \
    "Tranquiquis" RS "eof")
  else print "some nodes are not working"
}
'
  1. 使用八进制转义符而不是单引号

  2. 你需要heredoc内的换行符

  3. &#34;连接&#34;对于Awk无效