Bash使用cut来分隔IP和端口

时间:2019-05-23 12:45:23

标签: bash

我正在尝试从设备列表中将ip和端口传递到我的bash脚本,但是该脚本将其读取为多个设备而不是端口。因此,在下面的示例中,它尝试将telnet连接到4个设备,因为它正在将端口读取为设备。

for device in `cat device-list.txt`;
do
  hostname=$(echo $device | cut -d : -f 1)
  port=$(echo $port | cut -d : -f 2)
  ./script.exp $device $username $password $port ;
done

我正在尝试使用cut来获取端口并将其作为变量传递,因此我的telnet应该是abc.abc.com 30040作为一台设备,依此类推。

 # Telnet
spawn telnet $hostname $port

这是我的设备列表

abc.abc.com 30040
abc.abc.com 30041

我已经尝试在该网站上搜索答案。

3 个答案:

答案 0 :(得分:2)

我看到两个错误(第4和第5行)。应该是

 for device in `cat device-list.txt`;
 do
   hostname=$(echo $device | cut -d : -f 1)
   port=$(echo $device | cut -d : -f 2)
   ./script.exp $hostname $username $password $port ;
 done

答案 1 :(得分:1)

您可以使用Bash内置的read函数从循环中的行中提取hostnameport

while read -r hostname port || [[ -n $hostname ]] ; do
    ./script.exp "$hostname" "$username" "$password" "$port"
done <device-list.txt

答案 2 :(得分:0)

@pjh的答案正确。

但是这里有一些关于脚本的注释:

  1. 您遍历文件的所有 words ,而不是其 lines

  2. 使用cut -d :,将字段之间的分隔符指定为:。 但是,在文件中,您不使用:作为分隔符,而是使用空格(

  3. 您可以通过解析$hostname来计算$device变量,但是随后在调用脚本时使用$device

  4. 您可以通过解析$port变量来计算$port变量,这没有任何意义。

下面是一个如何使用cut解析每一行的示例:

cat device-list.txt | while read device; do
  hostname=$(echo $device | cut -d" " -f 1)
  port=$(echo $device | cut -d" " -f 2)
  ./script.exp $hostname $username $password $port
done