我正在尝试从设备列表中将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
我已经尝试在该网站上搜索答案。
答案 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
函数从循环中的行中提取hostname
和port
:
while read -r hostname port || [[ -n $hostname ]] ; do
./script.exp "$hostname" "$username" "$password" "$port"
done <device-list.txt
答案 2 :(得分:0)
@pjh的答案正确。
但是这里有一些关于脚本的注释:
您遍历文件的所有 words ,而不是其 lines 。
使用cut -d :
,将字段之间的分隔符指定为:
。
但是,在文件中,您不使用:
作为分隔符,而是使用空格()
您可以通过解析$hostname
来计算$device
变量,但是随后在调用脚本时使用$device
您可以通过解析$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