在shell脚本中将变量传递给awk

时间:2014-02-12 19:31:13

标签: bash shell variables awk

我有一个shell脚本,我正在编写以按名称搜索进程,如果该进程超过给定值则返回输出。

我正在努力寻找指定的流程。该脚本目前看起来像这样:

#!/bin/bash

findProcessName=$1
findCpuMax=$2
#echo "parameter 1: $findProcessName, parameter2: $findCpuMax" 

tempFile=`mktemp /tmp/processsearch.XXXXXX`
#echo "tempDir: $tempFile"

processSnapshot=`ps aux > $tempFile`

findProcess=`awk -v pname="$findProcessName" '/pname/' $tempFile`
echo "process line: "$findProcess

`rm $tempFile`

当我尝试将变量传递给awk命令时发生错误。我检查了我的awk版本,它确实支持-v标志。

如果我替换'/pname/'变量赋值的findProcess部分,则脚本可以正常工作。

我检查了我的语法,看起来是正确的。谁能指出我哪里出错?

1 个答案:

答案 0 :(得分:2)

  1. processSnapshot始终为空:ps输出将转到文件

  2. 将模式作为变量传递时,请使用模式匹配运算符:

    findProcess=$( awk -v pname="$findProcessName" '$0 ~ pname' $tempFile )
    
  3. 仅在需要输出命令时才使用反引号。这个

    `rm $tempFile` 
    

    执行rm命令,将输出返回给shell,输出非空,shell尝试将该输出作为命令执行。

    $ `echo foo`
    bash: foo: command not found
    $ `echo whoami`
    jackman
    

    删除反引号。

  4. 当然,您根本不需要临时文件:

    pgrep -fl $findProcessName