将 Azure CLI 命令的输出存储为变量

Sam*_*are 3 linux bash azure-cli

我需要存储 AZ cli 命令的输出,该命令将获取我的私有 IP 作为变量。

我在 bash 脚本中使用以下内容:

echo "Fetching Monitoring Server IP"
SERVER_IP=$(az vm show -n ${THIS_VM_NAME} -g ${RSC_GRP_NAME} --query privateIps -o tsv)
echo "$SERVER_IP
Run Code Online (Sandbox Code Playgroud)

看起来这不起作用,因为当我回显该变量时,它返回空。

+ THIS_VM_NAME=XXXX-XX-XX-XX-XX
+ echo 'Fetching Monitoring Server IP'
Fetching Monitoring Server IP
++ az vm show -n XXXX-XX-XX-XX-XX3 -g XXXX-XX-XX-XX-XX --query privateIps -o tsv
+ SERVER_IP=
+ echo ''
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何对此的指示

Cha*_* Xu 7

编辑

您发布的命令丢失了获取私有 IP 的参数,您可以使用带有参数的命令-d--show-details如下所示:

az vm show -g resourceGrouName -n vmName -d
Run Code Online (Sandbox Code Playgroud)

但这个命令只是获取所有IP,包括辅助IP。

您可以通过如下 shell 脚本获取每个接口的所有 VM 主 IP:

count=0
while : ; do
    nic=$(az vm nic list -g resourceGroupName --vm-name vmName --query [$count].id -o tsv)
    if [[ $nic == '' ]]; then
        break
    fi
    privateIps[$count]=$(az vm nic show -g resourceGroupName --vm-name vmName --nic $nic --query ipConfigurations[0].privateIpAddress -o tsv)
    let count++

done
echo ${privateIps[*]}
Run Code Online (Sandbox Code Playgroud)


Ima*_*idi 5

在 Azure Cloud Shell 中解决类似问题的方法是,如果选择了Powershell,则在 SERVER_IP 变量之前放置一个美元符号。

$SERVER_IP=$(az vm show --name vmname --resource-group rgname --show-details --query [publicIps] --output tsv)
Run Code Online (Sandbox Code Playgroud)