表达式中的bash脚本语法错误

时间:2018-02-25 08:42:42

标签: bash syntax expression

在bash脚本中,我必须找到进程的运行时间,我使用此命令执行:

PROCCESS_TIME=$(ps -eo pid,etimes | grep $(ps -ef | grep SCREEN | grep PROCCESS | head -1 | awk '{print $2}') | awk '{print $2}')

这给了我几秒钟的运行时间,然后我需要将其转换为分钟

PROCCESS_TIME_MIN=$(( $PROCCESS_TIME / 60 ))

它大部分时间都有效,但有时会给我这个错误并且脚本退出

0 / 60 : syntax error in expression (error token is "0 / 60 ")

或:

1893 / 60 : syntax error in expression (error token is "1893 / 60 ")

我的问题在哪里,如何解决?

2 个答案:

答案 0 :(得分:2)

在这种情况下,您将收到该错误消息:

PROCCESS_TIME="0
0"
PROCCESS_TIME_MIN=$(( $PROCCESS_TIME / 60 ))

检查

PROCCESS_TIME=$(ps -eo pid,etimes | grep something | awk '{print $2}')

这可以返回超过1个结果。您可以在命令中添加|head -1,也可以更改awkawk '{print $2; exit}' 当您将变量更改为小写,更正proccess_time的拼写并使用大括号时,命令将如下所示

process_time=$(ps -eo pid,etimes | 
   grep $(ps -ef | grep SCREEN | grep PROCCESS | awk '{print $2;exit}') |
   awk '{print $2; exit}')

我会尝试更改此命令,以便您需要1 ps和1 awk,但我有一个不同的ps命令(没有-o etimes但是{ {1}},返回时间为-o etime) 另请尝试使用hh:mm:ssgrep -E "SCREEN.*PROCCESS"

答案 1 :(得分:0)

尝试使用60的变量(我只是将其命名为60,您可以根据需要更改它)并尝试遵循:

sixty=60
var=$((PROCCESS_TIME / sixty))