在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 ")
我的问题在哪里,如何解决?
答案 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
,也可以更改awk
:awk '{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:ss
或grep -E "SCREEN.*PROCCESS"
答案 1 :(得分:0)
尝试使用60的变量(我只是将其命名为60,您可以根据需要更改它)并尝试遵循:
sixty=60
var=$((PROCCESS_TIME / sixty))