我正在尝试编写一个简单的脚本来检查当前流程的好处。
以下工作没有任何问题:
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:
测试命令仅从控制台运行,因此语法可能/可能不适用于脚本...
答案 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。这就是为什么我讨厌成为我项目中唯一的软件人员。
:(