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

Linux 如何在bash中将给定的文本拆分为3个变量,并在端口发送到主机?,linux,bash,netcat,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 及

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

因此,我在航站楼:

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

将导致blah blah发送到2016端口的本地主机 及

将导致程序退出


我的问题是“我认为这里有一些代码”部分到底是什么

由于您要将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中的Backticks获取其中的命令结果并将其作为字符串返回。

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

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

不要把命令放在变量中。变量保存数据。函数保存代码。此外,请查看此
echo$raw | cut-f1
可以通过参数扩展在Bash中实现。请参见
manbash | less+/Parameter\Expansion
我的示例没有“将命令放入变量”,而是将命令(stdout)的结果存储在变量中。您是正确的。那是我的错误。对此我深表歉意。感谢使用剪切和破折号(-)来获取前两个空间后的其余部分。您可能需要考虑将<代码> -R>代码>添加到<代码> Read < /C> >代码> > Read -R线< /C> >以防止反斜杠从任何字符中逸出。这似乎是迄今为止最接近的。
raw=`nc -k -l localhost 22222`
part1=`echo $raw | cut -f 1`
part2=`echo $raw | cut -f 2`
part3=`echo $raw | cut -f 3-`
nc -k -l localhost 22222 | while read line
do
    # "$line" contains the received text, do whatever you need with it
    ...
done