Bash 执行批处理脚本时出现Ubuntu grep选项错误

Bash 执行批处理脚本时出现Ubuntu grep选项错误,bash,grep,Bash,Grep,shell脚本旨在显示我的两个openstack实例的IP地址,但我收到了grep命令选项错误: 用法:grep[选项]。。。模式[文件] 有关更多信息,请尝试“grep--help” 用法:grep[选项]。。。模式[文件] 有关更多信息,请尝试“grep--help” VM1 IP地址: VM2 IP地址: 这里有没有人可以帮助我,因为我不是bash脚本专家,只需要这样做就可以完成一些任务。谢谢当您尝试对以破折号开头的字符串执行grep时,通常会出现此消息 最直接的解决方法是使用grep-e

shell脚本旨在显示我的两个openstack实例的IP地址,但我收到了grep命令选项错误: 用法:grep[选项]。。。模式[文件]

有关更多信息,请尝试“grep--help”

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

有关更多信息,请尝试“grep--help”

VM1 IP地址:

VM2 IP地址:


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

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

最直接的解决方法是使用
grep-e“$variable”
,但实际上,您希望避免出现这种情况


顺便说一句,这还演示了将正则表达式传递给Awk的三种不同方法。另外请注意,我们更喜欢现代的
$(命令)
替换,而不是恐龙
`backtick`
语法。

批处理文件
标记是针对Windows.bat文件的。我相信您想使用
BASH
标记。我认为您没有将windows
batch file
作为标记引用?检查
vm1\u MAC
和/或
vm2\u MAC
是否包含某些内容,即不是空的。打印(
echo
)相关变量,这很容易理解。如前一条评论中所述,vm1_MAC(或2)字符串中包含空格这假设
$5
是正确的,但我认为您最初的错误是因为它包含了您认为不正确的内容。如果结果是这样的话,请进行相应的调整。我认为应该有一种方法避免同时运行
arp-e
两次……我非常感谢您在@tripleee上的努力。在从代码的第一行和第二行删除-e选项后,我现在能够执行脚本,但没有显示输出。我可以确认两个虚拟机正在运行,但仍然没有显示输出。你知道可能是什么原因吗?我漏掉了打印件。另外,我想说的是,我找不到关于
awk-e
的文档,但假设它对你的系统有用。
  #!/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"
#!/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}')