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

时间:2017-01-17 08:48:31

标签: linux bash

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

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

我得到了

  

意外令牌`netstat'附近的语法错误

来自控制台

我想做的是:

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

OS:debian:jessie

请帮我纠正一下......我查了很多文件

2 个答案:

答案 0 :(得分:2)

您的测试语法不正确。请查看手册页以供使用,或查看整个Internet上的示例。

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

答案 1 :(得分:2)

最好使用lsof

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