我有一个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
部分,则脚本可以正常工作。
我检查了我的语法,看起来是正确的。谁能指出我哪里出错?
答案 0 :(得分:2)
processSnapshot
将始终为空:ps输出将转到文件
将模式作为变量传递时,请使用模式匹配运算符:
findProcess=$( awk -v pname="$findProcessName" '$0 ~ pname' $tempFile )
仅在需要输出命令时才使用反引号。这个
`rm $tempFile`
执行rm命令,将输出返回给shell,输出非空,shell尝试将该输出作为命令执行。
$ `echo foo`
bash: foo: command not found
$ `echo whoami`
jackman
删除反引号。
当然,您根本不需要临时文件:
pgrep -fl $findProcessName