bash - 执行批处理脚本时出现 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 脚本专家,只需要这样做来完成一些任务。谢谢
解决方案
当您尝试输入以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`
语法。
推荐阅读
- javascript - 在 Reactjs 中使用 Splice 删除所需的元素 onClick
- java - AlarmManager:设置停止通知的时间
- jquery - 在网络服务器上发布时,jQuery 提交会成倍增加
- c# - Rider“外部别名”和“使用”支持
- linq - 如何使用包含布尔值和子列表的 linq 合并行?
- javascript - 在 React Native Maps 中的组件上使用方法
- javascript - 使用 d3.js v4 加载大型 json 文件时出现问题
- sql - 是否有一个Oracle函数来确定重复字符的数量
- wordpress - WordPress 其他帖子类别重定向到主要类别
- docker-compose - 为什么 testcafe-docker.sh 忽略 app-init-delay 参数?