Linux 如何在bash文件中编写while循环

Linux 如何在bash文件中编写while循环,linux,bash,Linux,Bash,我试图在bash中编写while循环,如下所示: while [!(netstat -pnlt | grep ":9393" | wc -l)]; do echo "server not ready... waiting..." sleep 2 done 我明白了 意外标记“netstat”附近出现语法错误 从控制台 我想做的是: 要grep使用端口9393的服务,请计算其行数。如果行数为0, 这意味着服务没有运行,所以我会让它等待 OS:debian:jessie 请帮我纠正

我试图在bash中编写
while
循环,如下所示:

while [!(netstat -pnlt | grep ":9393" | wc -l)];
do
    echo "server not ready... waiting..."
    sleep 2
done
我明白了

意外标记“netstat”附近出现语法错误

从控制台

我想做的是:

要grep使用端口9393的服务,请计算其行数。如果行数为0, 这意味着服务没有运行,所以我会让它等待

OS:debian:jessie


请帮我纠正一下。。。我查阅了很多文档

您的测试语法不正确。查看手册页的用法,或查看互联网上的示例

while [[ $(netstat -pnlt | grep -c ":9393 .*LISTEN") -eq '1' ]]; do
    echo "server not ready... waiting..."
    sleep 2
done
但通过对问题进行编辑,以下内容会更好:

while ! netstat -pnlt | grep -q ":9393 .*LISTEN"; do
    echo "server not ready... waiting..."
    sleep 2
done

最好使用lsof

while ! lsof -iTCP:9393 -sTCP:LISTEN >/dev/null; do
    echo "server not ready... waiting..."
    sleep 2
done

一个命令而不是3个。更低的资源使用率,更快的运行时间,更易于人类阅读。