首页 > 解决方案 > 在 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

标签: shell

解决方案


一个问题是单引号

cat $VM_LIST_FILE | grep '$vm_name'

这不会替代 $vm_name。您需要使用双引号:

grep "$vm_name" $VM_LIST_FILE

并在途中拯救一只没用的猫。

除此之外,这grep|awk是一种反模式,因为 awk 可以执行 grepping:awk '/pattern/ { action }'是应该使用的。


推荐阅读