简单"如果 - 那么"案件

时间:2014-12-14 12:00:23

标签: bash

我需要创建一个特定的工作流程,即:

  • 检查某个TCP端口是否可用

  • 如果可用 - 执行命令A然后执行命令B

  • 否则 - 跳过A,立即运行B

你们可以帮助我吗?

注意:命令A只是占用端口的应用程序的kill-switch

例如,我可以从以下内容开始:

lsof -wni tcp:20000 | grep listen

让我们说这会给我带来像

这样的东西
ruby    5055   ag    9u  IPv4 0x1f65a8e25318d67d      0t0  TCP 127.0.0.1:dnp (LISTEN)

现在我如何抓取并将该PID传递到kill?如何知道第一个命令是否没有结果(即没有任何内容正在侦听20000)?

1 个答案:

答案 0 :(得分:1)

这个怎么样?

nc -z localhost 3900 # 3900 -> your port
if [[ "$?" -eq "1" ]]; then
  do_a
fi
do_b

编辑:你改变了你的问题 - 现在如果你想真正获得另一个故事的PID ...尝试这个(取自here):

#change 80 to your port
pid=$(netstat -tlnp | awk '/:80 */ {split($NF,a,"/"); print a[2],a[1]}')

if [[ "$pid" -neq "0" ]]; then
  kill -9 "$pid"
fi
do_something