Ошибка опции Ubuntu grep при выполнении пакетного скрипта - PullRequest
0 голосов
/ 10 сентября 2018
  #!/bin/bash
  vm1_MAC=`virsh -c qemu:///system domiflist instance-00000009 -e | grep virbr0 | awk '{print $5}'`
  vm2_MAC=`virsh -c qemu:///system domiflist instance-0000000d -e | grep -i  virbr0 | awk -e '{print $5}'`
  vm1_IP=`arp -e | grep $vm1_MAC | awk '{print $1}'`
  vm2_IP=`arp -e | grep $vm2_MAC | awk '{print $1}'`
  echo "VM1 IP Address: $vm1_IP"
  echo "VM2 IP Address: $vm2_IP"

Сценарий оболочки предназначался для отображения IP-адресов моих двух экземпляров openstack, но я получаю сообщение об ошибке команды grep: Использование: grep [OPTION] ... PATTERN [FILE] ...

Попробуйте 'grep --help' для получения дополнительной информации.

Использование: grep [ОПЦИЯ] ... ШАБЛОН [ФАЙЛ] ...

Попробуйте 'grep --help' для получения дополнительной информацииинформация.

IP-адрес VM1:

IP-адрес VM2:

Есть здесь кто-нибудь, кто может мне помочь, поскольку я не эксперт по bash-скрипту, просто нужно сделать эточтобы выполнить некоторые задачи.Спасибо

1 Ответ

0 голосов
/ 10 сентября 2018

Это сообщение обычно появляется, когда вы пытаетесь набрать grep для строки, начинающейся с тире.

Непосредственный обходной путь - использовать grep -e "$variable", но на самом деле вы хотите избежать бесполезного использования grep здесь.

#!/bin/bash
vm1_MAC=$(virsh -c qemu:///system domiflist instance-00000009 -e | awk "/virbr0/"'{print $5}')
vm2_MAC=$(virsh -c qemu:///system domiflist instance-0000000d -e | awk -e 'tolower($0) ~ /vibr0/ {print $5}')
vm1_IP=$(arp -e | awk -v mac="$vm1_MAC" '$0 ~ mac {print $1}')
vm2_IP=$(arp -e | awk -v mac="$vm2_MAC" '$0 ~ mac {print $1}')

Кстати, это также демонстрирует три разных способа передачи регулярного выражения в Awk. Также обратите внимание, как мы предпочитаем современную замену $(command) над синтаксисом динозавра `backtick`.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...