Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os comandos de referência da CLI do Azure podem ser executados em vários idiomas de script. Se você é novo no Bash e também na CLI do Azure, este artigo é um ótimo lugar para começar sua jornada de aprendizagem. Trabalhe neste artigo da mesma forma que você faria um tutorial para aprender a usar a CLI do Azure em uma linguagem de script bash com facilidade.
Neste artigo, você aprenderá a:
- Consultar resultados como dicionários JSON ou matrizes
- Formatar saída como JSON, tabela ou TSV
- Consultar, filtrar e formatar valores únicos e múltiplos
- Como usar as sintaxes "if/exists/then" e "case"
- Usar para loops
- Usar comandos grep, sed, paste e bc
- Definir e usar variáveis de shell e ambiente
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Iniciando o Bash
Inicie o Bash usando o Azure Cloud Shell ou uma instalação local da CLI do Azure. Este artigo pressupõe que você esteja executando o Bash usando o Azure Cloud Shell ou executando a CLI do Azure localmente em um contêiner do Docker.
Consultar resultados do dicionário
Um comando que sempre retorna apenas um único objeto retorna um dicionário JSON. Dicionários são objetos não ordenados acessados com chaves. Para este artigo, vamos começar consultando o objeto Account usando o comando Account Show .
az account show
az account show --output json # JSON is the default format
A saída do dicionário JSON a seguir tem alguns campos omitidos por questão de brevidade, e as informações de identificação são removidas.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
Formatar a saída como YAML
Use o --output yaml
argumento (ou -o yaml
) para formatar a saída no formato yaml, que é um formato de serialização de dados em texto simples. O YAML tende a ser mais fácil de ler do que o JSON e é facilmente mapeado para esse formato. Alguns aplicativos e comandos da CLI usam YAML como entrada de configuração, em vez de JSON.
az account show --output yaml
Para obter mais informações sobre como formatar a saída como yaml, consulte o formato de saída YAML.
Formatar a saída como uma tabela
Use o --output table
argumento (ou -o table
) para formatar a saída como uma tabela ASCII. Objetos aninhados não são incluídos nos resultados da tabela, mas ainda podem ser filtrados como parte de uma consulta.
az account show --output table
Para obter mais informações sobre como formatar a saída como uma tabela, consulte o formato de saída da tabela.
Consultar e formatar valores individuais e valores aninhados
As consultas a seguir demonstram a consulta de valores únicos, incluindo valores aninhados em uma saída de dicionário JSON. A consulta final neste conjunto demonstra a formatação da saída usando o -o tsv
argumento. Esse argumento retorna os resultados como valores separados por guia e nova linha. Essa ação é útil para remover aspas no valor retornado , o que é útil para consumir a saída em outros comandos e ferramentas que precisam processar o texto de alguma forma (como é demonstrado posteriormente neste artigo).
az account show --query name # Querying a single value
az account show --query name -o tsv # Removes quotation marks from the output
az account show --query user.name # Querying a nested value
az account show --query user.name -o tsv # Removes quotation marks from the output
Consultar e formatar propriedades de matrizes
A consulta a seguir demonstra como obter propriedades em uma matriz JSON. Obtenha as propriedades da assinatura, exibidas como uma tabela de assinaturas.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Essa consulta retorna resultados semelhantes a:
Subscription_id Name IsDefault
------------------------------------ ------------------------------------------------- -----------
11111111-3ddc-45ce-8334-c7b28a9e1c3a C & L Azure developer experience content projects False
22222222-8f1c-409b-af1e-8e2e65d9b90a DevCenter - Infrastructure - Dogfood False
33333333-c080-42a7-8973-1aa853ab4df3 Babel False
Consultando e formatando vários valores, incluindo valores aninhados
Para obter mais de uma propriedade, coloque expressões em colchetes [ ] (uma lista multisseleção) como uma lista separada por vírgulas. As consultas a seguir demonstram a consulta de vários valores em uma saída de dicionário JSON, usando vários formatos de saída.
az account show --query [name,id,user.name] # return multiple values
az account show --query [name,id,user.name] -o table # return multiple values as a table
Para obter mais informações sobre como retornar vários valores, consulte Obter vários valores.
Renomeando propriedades em uma consulta
As consultas a seguir demonstram o uso do operador { } (hash multiseleção) para obter um dicionário em vez de uma matriz ao consultar vários valores. Ele também demonstra a renomeação de propriedades no resultado da consulta.
az account show --query "{SubscriptionName: name, SubscriptionId: id, UserName: user.name}" # Rename the values returned
az account show --query "{SubscriptionName: name, SubscriptionId: id, UserName: user.name}" -o table # Rename the values returned in a table
Para obter mais informações sobre como renomear propriedades em uma consulta, consulte Renomear propriedades em uma consulta.
Consultando valores boolianos
Os valores boolianos são considerados verdadeiros, portanto, a "[?isDefault]"
sintaxe de consulta para o az account list
comando retorna a assinatura padrão atual. Para obter os valores falsos, você deve usar um caractere de escape, como \
.
As consultas a seguir demonstram a consulta de todas as contas em uma assinatura, potencialmente retornando uma matriz JSON se houver várias assinaturas para uma determinada conta e, em seguida, consultando para qual conta é a assinatura padrão. Ele também demonstra a consulta das contas que não são a assinatura predefinida. Essas consultas se baseiam no que você aprendeu anteriormente para filtrar e formatar os resultados. Por fim, a consulta final demonstra como armazenar os resultados da consulta em uma variável.
az account list
az account list --query "[?isDefault]" # Returns the default subscription
az account list --query "[?isDefault]" -o table # Returns the default subscription as a table
az account list --query "[?isDefault].[name,id]" # Returns the name and id of the default subscription
az account list --query "[?isDefault].[name,id]" -o table # Returns the name and id of the default subscription as a table
az account list --query "[?isDefault].{SubscriptionName: name, SubscriptionId: id}" -o table # Returns the name and id of the default subscription as a table with friendly names
az account list --query "[?isDefault == \`false\`]" # Returns all non-default subscriptions, if any
az account list --query "[?isDefault == \`false\`].name" -o table # Returns all non-default subscriptions, if any, as a table
az account list --query "[?isDefault].id" -o tsv # Returns the subscription id without quotation marks
subscriptionId="$(az account list --query "[?isDefault].id" -o tsv)" # Captures the subscription id as a variable.
echo $subscriptionId # Returns the contents of the variable.
az account list --query "[? contains(name, 'Test')].id" -o tsv # Returns the subscription id of a non-default subscription containing the substring 'Test'
subscriptionId="$(az account list --query "[? contains(name, 'Test')].id" -o tsv) # Captures the subscription id as a variable.
az account set -s $subscriptionId # Sets the current active subscription
- Para obter mais informações sobre como filtrar matrizes e consultar valores boolianos, consulte Filtrar matrizes com expressões boolianas.
- Para obter mais informações sobre como usar variáveis, consulte Como usar variáveis.
- Para obter mais informações sobre como trabalhar com assinaturas, consulte Gerenciando assinaturas.
Criando objetos usando variáveis e randomização
Definindo um valor aleatório para uso em comandos subsequentes
Definir e usar um valor aleatório para uso em variáveis permite que você execute scripts várias vezes sem nomear conflitos. Conflitos de nomenclatura ocorrem porque um valor deve ser exclusivo em todo o serviço ou porque um objeto excluído ainda existe no Azure até que o processo de exclusão seja concluído.
$RANDOM
é uma função bash (não uma constante) que retorna um número inteiro com sinal de 16 bits aleatório (entre 0 e 32.767). O let
comando é um comando Bash interno para avaliar expressões aritméticas.
O uso do comando a seguir cria um valor suficientemente exclusivo para a maioria das finalidades.
let "randomIdentifier=$RANDOM*$RANDOM"
Trabalhando com espaços e aspas
Espaços são usados para separar comandos, opções e argumentos. Use aspas para instruir o shell Bash a ignorar todos os caracteres especiais, incluindo o espaço em branco como um caractere especial. Quando o shell bash vê a primeira marca de aspas, ele ignora caracteres especiais até a marca de aspas de fechamento. No entanto, às vezes você quer que o shell Bash analise certos caracteres especiais, como sinais de dólar, crases e barras invertidas. Para esse cenário, use aspas duplas.
Os comandos a seguir usam o comando az group create para ilustrar o uso de aspas simples e duplas. Esses comandos são usados para manipular espaços e avaliar caracteres especiais ao trabalhar com variáveis e criar um objeto.
resourceGroup='msdocs-learn-bash-$randomIdentifier'
echo $resourceGroup # The $ is ignored in the creation of the $resourceGroup variable
resourceGroup="msdocs-learn-bash-$randomIdentifier"
echo $resourceGroup # The $randomIdentifier is evaluated when defining the $resourceGroup variable
location="East US" # The space is ignored when defining the $location variable
echo The value of the location variable is $location # The value of the $location variable is evaluated
echo "The value of the location variable is $location" # The value of the $location variable is evaluated
echo "The value of the location variable is \$location" # The value of the $location variable is not evaluated
echo 'The value of the location variable is $location' # The value of the $location variable is not evaluated
az group create --name $resourceGroup --location $location # Notice that the space in the $location variable is not ignored and the command fails as it treats the value after the space as a new command
az group create --name $resourceGroup --location "$location" # Notice that the space in the $location variable is ignored and the location argument accepts the entire string as the value
Na saída do dicionário JSON, examine as propriedades do grupo de recursos que foi criado.
Usando If Then Else para determinar se a variável é nula
Para avaliar cadeias de caracteres, use !=
e para avaliar números, use -ne
. A instrução If Then Else a seguir avalia se a variável $resourceGroup foi definida. Se sim, retornará o valor da variável. Se não, define a variável.
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Usando If Then para criar ou excluir um grupo de recursos
O script a seguir cria um novo grupo de recursos somente se um com o nome especificado ainda não existir.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
O script a seguir excluirá um novo grupo de recursos existente se já existir um com o nome especificado. Você pode usar o argumento --no-wait
para retornar o controle sem esperar que o comando seja concluído. No entanto, para este artigo, queremos aguardar a exclusão do grupo de recursos antes de continuar. Para obter mais informações sobre operações assíncronas, consulte Dicas para usar a CLI do Azure com êxito – operações assíncronas.
Demonstramos o uso do --no-wait
argumento no final deste artigo.
if [ $(az group exists --name $resourceGroup) = true ]; then
az group delete --name $resourceGroup -y # --no-wait
else
echo The $resourceGroup resource group does not exist
fi
Usar o Grep para determinar se existe um grupo de recursos e criar o grupo de recursos se ele não existir
O comando a seguir canaliza a saída do az group list
comando para o grep
comando. Se o grupo de recursos especificado não existir, o comando criará o grupo de recursos usando as variáveis definidas anteriormente.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Usando a instrução CASE para determinar se existe um grupo de recursos e criar o grupo de recursos se ele não existir
A instrução CASE a seguir cria um novo grupo de recursos somente se um com o nome especificado ainda não existir. Se houver um com o nome especificado, a instrução CASE indica que o grupo de recursos existe.
var=$(az group list --query "[? contains(name, '$resourceGroup')].name" --output tsv)
case $resourceGroup in
$var)
echo The $resourceGroup resource group already exists.;;
*)
az group create --name $resourceGroup --location "$location";;
esac
Usar para loops e matrizes de consulta
Nesta seção do artigo, criamos uma conta de armazenamento e usamos laços 'for' para criar blobs e contêineres. Também demonstramos a consulta de matrizes JSON e o trabalho com variáveis de ambiente.
Criar Conta de Armazenamento
O comando a seguir usa o comando az storage account create para criar uma conta de armazenamento que usamos ao criar contêineres de armazenamento.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Obter as chaves da conta de armazenamento
Os comandos a seguir usam o comando az storage account keys list para retornar valores de chave da conta de armazenamento. Em seguida, armazenamos um valor de chave em uma variável para uso ao criar contêineres de armazenamento.
az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[].value" -o tsv # returns both storage account key values
az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[0].value" -o tsv # returns a single storage account key value
accountKey=$(az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[0].value" -o tsv)
echo $accountKey
Criar contêiner de armazenamento
Começamos usando o az storage container create para criar um único contêiner de armazenamento e, em seguida, usamos a lista de contêineres de armazenamento az para consultar o nome do contêiner criado.
container="learningbash"
az storage container create --account-name $storageAccount --account-key $accountKey --name $container
az storage container list --account-name $storageAccount --account-key $accountKey --query [].name
Carregar dados no contêiner
O script a seguir cria três arquivos de exemplo usando um loop for.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
O script a seguir usa o comando az storage blob upload-batch para carregar os blobs no contêiner de armazenamento.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
O script a seguir usa o comando az storage blob list para listar os blobs no contêiner.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
O script a seguir exibe o total de bytes no contêiner de armazenamento.
bytes=`az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[*].[properties.contentLength]" \
--output tsv | paste -s -d+ | bc`
echo "Total bytes in container: $bytes"
echo $bytes
Criar muitos contêineres usando loops
Em seguida, criamos vários contêineres usando um loop demonstrando algumas maneiras de gravar o loop.
for i in `seq 1 4`; do
az storage container create --account-name $storageAccount --account-key $accountKey --name learnbash-$i
done
for value in {5..8}
for (( i=5; i<10; i++));
do
az storage container create --account-name $storageAccount --account-key $accountKey --name learnbash-$i
done
az storage container list --account-name $storageAccount --account-key $accountKey --query [].name
Usar EXPORT para definir variáveis de ambiente
Nos scripts de contêiner de armazenamento anteriores, especificamos o nome da conta e a chave da conta com cada comando. Em vez disso, você pode armazenar suas credenciais de autenticação usando as variáveis de ambiente correspondentes: AZURE_STORAGE_ACCOUNT
e AZURE_STORAGE_KEY
. Para executar essa ação, use EXPORT.
export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.
O script a seguir cria uma cadeia de caracteres de metadados e, em seguida, usa o comando de atualização de metadados do contêiner de armazenamento az para atualizar um contêiner com essa cadeia de caracteres, novamente usando as variáveis de ambiente.
metadata="key=value pie=delicious" # Define metadata
az storage container metadata update \
--name $container \
--metadata $metadata # Update the metadata
az storage container metadata show \
--name $containerName # Show the metadata
O comando a seguir usa o comando az storage container delete para excluir um único contêiner nomeado e, em seguida, excluir vários contêineres em um loop.
az storage container delete \
--name $container
Obtenha uma lista de contêineres que contêm um prefixo específico e armazene resultados em uma variável.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Exclua a lista de contêineres em um loop usando o --prefix
argumento.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Tratamento de erros
Para sair de um script imediatamente se um comando retornar um status diferente de zero, execute o seguinte comando:
set -e
Para obter mais informações sobre como definir opções de shell e outras ajudas, execute os seguintes comandos:
help set
help help
Limpar os recursos
Depois de concluir este artigo, exclua o grupo de recursos e todos os recursos dentro dele. Use o --no-wait
argumento.
if [ $(az group exists --name $resourceGroup) = true ]; then
az group delete --name $resourceGroup -y --no-wait
else
echo The $resourceGroup resource group does not exist
fi
Consulte também
- Tutorial: Saiba como usar a CLI do Azure
- Como usar a CLI do Azure com êxito
- Como consultar a saída de um comando da CLI do Azure
- Localizar exemplos da CLI do Azure e artigos publicados