如何将给定文本拆分为bash中的3个变量并发送到端口的主机?

时间:2016-03-20 20:35:49

标签: linux bash netcat

我想编写一个侦听某个端口(比如端口22222)的命令,接收单行文本,然后按空格将该行按空格拆分为端口,主机和文本。文本中也可以包含空格。因此,例如,1234 localhost blah de blah将被拆分为1234用于端口,localhost用于主机,而blah de blah用于文本。如果端口为0,则程序退出。否则,程序将文本的值发送到端口的主机并循环回监听。

所以我在终端:

nc -k -l localhost 22222|some code goes here I think

echo 2016 localhost blah blah|nc localhost 22222

将导致在2016年港口发送到本地主机的等等 和

echo 0 localhost blah blah|nc localhost 22222

将导致程序退出

我的问题是究竟是什么进入了"有些代码在这里我认为"部分?

2 个答案:

答案 0 :(得分:2)

收到nc后会将数据回显给stdout,因此您可以按如下方式处理:

nc -k -l localhost 22222 | while read line
do
    # "$line" contains the received text, do whatever you need with it
    ...
done

答案 1 :(得分:1)

由于你将netcat(nc)的输出管道化为“我认为某些代码在这里”,“我认为某些代码在这里”需要是一个读取标准输入的程序或脚本,并按照你的需要做数据。 在命令行上使用管道不是唯一的方法或获取netcat的输出并使用它做一些事情。既然你提到你正在使用bash,可能最简单的做法是在nc上取输出然后将其存储在变量中,然后你可以使用另一个程序如cut或awk来分割字符串:

raw=`nc -k -l localhost 22222`
part1=`echo $raw | cut -f 1`
part2=`echo $raw | cut -f 2`
part3=`echo $raw | cut -f 3-`

哪个应该为你提供你想要存储在bash环境变量中的部分,你可以在以后做你喜欢的事情(例如,如果$ part1 = 0则退出)。 请注意,这些是我的示例中的反引号,而不是引号。 bash中的反引号将命令的结果记录在其中并将其作为字符串返回。