shell - 在 shell 脚本中读取文件
问题描述
我想通过与给定的用户数据进行比较来读取 shell 脚本中的文件
前任:-
文件: vm_list.txt 具有以下数据
vm1,vm2,vm3
用户作为参数 vm2,vm4
首先它将读取 vm_list.txt 文件并比较用户给定的参数 vm2、vm4。如果它是有效的 vm,则输出有效,如果不是,则此 vm 不存在或给出错误的 vm 名称。
我尝试了以下逻辑,但无法获得正确的结果。
代码:
for vm_name in "${vm_names[@]}"
do
VM_LIST_FILE="/tmp/$AZ_ACCOUNT.vm.list"
az vm list --output table > "$VM_LIST_FILE"
vm_rg_name=$(grep $vm_name "${VM_LIST_FILE}" |
awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
if cat $VM_LIST_FILE | grep '$vm_name'; then
echo "This vm $vm_name is Present on $vm_rg_name"
else
echo "This vm $vm_name is not present or invalid vm Name"
fi
done
解决方案
一个问题是单引号
cat $VM_LIST_FILE | grep '$vm_name'
这不会替代 $vm_name。您需要使用双引号:
grep "$vm_name" $VM_LIST_FILE
并在途中拯救一只没用的猫。
除此之外,这grep|awk
是一种反模式,因为 awk 可以执行 grepping:awk '/pattern/ { action }'
是应该使用的。
推荐阅读
- spring-boot - thenThrow() 不抛出异常
- macos - 从 rtf 文件在终端中运行文本行
- php - 有没有办法在 dompdf 中添加边距或缩放?
- git - 通过 OneDrive 在 2 台不同的计算机上使用 Git
- android - Android多文件下载同时更新ui
- excel - 无法从 .range.value 中获取价值
- java - 基于postgres查询的Spring数据jpa规范
- javascript - react JS中的分页
- python - 如何仅从给定的起点将文本文件中的数据附加到列表中,而不是使用 python 附加完整文件
- google-chrome - 使用 Chrome 扩展来调整未停靠的开发工具窗口的大小