Bash, используя cut для разделения IP и порта - PullRequest
2 голосов
/ 23 мая 2019

Я пытаюсь передать ip и порт в мой bash-скрипт из списка устройств, но скрипт читает его как несколько устройств вместо порта. Таким образом, в приведенном ниже примере он пытается подключиться к 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 ]

2 голосов
/ 23 мая 2019

Я вижу две ошибки (строки 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 голос
/ 23 мая 2019

Вы можете использовать встроенную функцию Bash read для извлечения hostname и port из строк в цикле:

while read -r hostname port || [[ -n $hostname ]] ; do
    ./script.exp "$hostname" "$username" "$password" "$port"
done <device-list.txt
0 голосов
/ 23 мая 2019

@ pjh имеет правильный ответ.

Но вот некоторые примечания к вашему сценарию:

  1. вы перебираете все слова файла, а не его строк .

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...