执行批处理脚本时,Ubuntu grep选项错误

时间:2018-09-10 14:30:36

标签: bash grep

  #!/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"

shell脚本旨在显示我的两个openstack实例的IP地址,但是我收到grep命令选项错误: 用法:grep [OPTION] ... PATTERN [FILE] ...

请尝试使用“ grep --help”以获取更多信息。

用法:grep [选项] ...模式[文件] ...

请尝试使用“ grep --help”以获取更多信息。

VM1 IP地址:

VM2 IP地址:

这里有没有人可以帮助我,因为我不是bash脚本专家,只需要这样做就可以完成一些任务。谢谢

1 个答案:

答案 0 :(得分:1)

当您尝试grep输入以破折号开头的字符串时,通常会出现此消息。

直接的解决方法是使用grep -e "$variable",但实际上,您想在此处避免使用useless use of 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`替代。