首页 > 解决方案 > 执行批处理脚本时出现 Ubuntu 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 命令选项错误:Usage: grep [OPTION]... PATTERN [FILE]...

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

用法:grep [OPTION]... PATTERN [FILE]...

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

VM1 IP 地址:

VM2 IP 地址:

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

标签: bashgrep

解决方案


当您尝试输入以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`语法。


推荐阅读