Bash 简单的;“如果-那么”;案例

Bash 简单的;“如果-那么”;案例,bash,Bash,我需要创建一个特定的工作流,即: 检查某些TCP端口是否可用 如果可用-执行命令A,然后执行命令B 否则-跳过A,立即运行B 你们能帮我吗 注意:命令A只是占用端口的应用程序的kill开关 例如,我可以从以下内容开始: lsof -wni tcp:20000 | grep listen 让我们说,这将返回我类似的东西 ruby 5055 ag 9u IPv4 0x1f65a8e25318d67d 0t0 TCP 127.0.0.1:dnp (LISTEN)

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

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

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

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

你们能帮我吗

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

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

lsof -wni tcp:20000 | grep listen
让我们说,这将返回我类似的东西

ruby    5055   ag    9u  IPv4 0x1f65a8e25318d67d      0t0  TCP 127.0.0.1:dnp (LISTEN)
现在,我如何获取PID并将其传递到
kill
?我如何知道第一个命令是否没有结果(即20000上没有任何内容被监听)?

这个如何

nc -z localhost 3900 # 3900 -> your port
if [[ "$?" -eq "1" ]]; then
  do_a
fi
do_b
编辑:你改变了你的问题-现在如果你真的想得到PID,那是另一个故事。。。试试这个(摘自):


我更新了答案,包括获取PidChen-这似乎也是一个正确的解决方案,而不是单独检查退出代码,第一个脚本可以是
if!nc-zlocalhost 3900;然后
#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