我想在shell脚本中读取一个文件,比较给定的用户数据
交货:
文件:vm_list.txt包含以下数据
vm1,vm2,vm3
用户作为参数vm2,vm4
首先,它将读取vm_list.txt文件并比较用户给定的参数vm2,vm4。如果是有效的虚拟机,则输出为有效的,否则此虚拟机不存在或给出错误的虚拟机名称。
我尝试了下面的逻辑,但我不能达到正确的结果。
代码:
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 }'
是应该使用的。