Bash脚本:测试与问题

时间:2014-04-21 20:07:29

标签: linux bash shell

我正在尝试编写一个简单的脚本来检查当前流程的好处。

以下工作没有任何问题:

test "$(ps axl | grep '[m]y_process' | awk '{print $6}')" != '-10' && (echo test)

然而,我做的不仅仅是一个简单的回声,我希望将其分解为if语句。话虽如此,使用完全相同的测试,它每次都失败。这是代码:

if [ "$(ps axl | grep '[m]y_process' | awk '{print $6}')" != '-10' ];
  then
    echo "test"
    # other stuff goes here
fi

结果,我确定我的语法有问题。我也尝试使用-ne比较并使用双引号作为好的级别(例如,-10)。

提前感谢您的帮助。

编辑添加:

当我尝试跑步时:

ps axl | grep '[m]y_process' | awk '{print $6}'

从脚本中,它返回一个空白字符串而不是进程漂亮级别,所以我把它缩小到这个......

编辑添加2:

测试命令仅从控制台运行,因此语法可能/可能不适用于脚本...

2 个答案:

答案 0 :(得分:1)

这是常见问题解答。 if语句处理UNIX命令的退出状态,包括test命令。只需使用您尝试处理的命令的自然退出状态,而不是尝试在test内测试捕获表达式的字符串输出。例如:

if ps axl | awk '/[m]y_process/{ if ($6 == -10) { exit 1 } else { exit 0 } }' …

答案 1 :(得分:0)

否认。我发现了这个问题。我没有在我的脚本中执行grep,而是输入了pgrep。这就是为什么我讨厌成为我项目中唯一的软件人员。

:(