Compartilhar via


Conheça as diferenças de sintaxe da CLI do Azure no Bash, no PowerShell e no Cmd

Os comandos da CLI do Azure podem ser executados em linguagens de script bash, PowerShell e shell de comando do Windows (cmd). No entanto, há diferenças sutis de script. Nesta etapa do tutorial, saiba como criar sua primeira Conta de Armazenamento do Azure e formatar valores de parâmetro para todos os três idiomas de script.

Pré-requisitos

  • Você concluiu os pré-requisitos para preparar o seu ambiente.
  • Você tem acesso a um grupo de recursos com contributor ou permissões mais altas em um nível de grupo de recursos.

Esteja ciente dos caracteres de continuação de linha

A maioria da documentação da CLI do Azure é gravada e testada no Bash usando o Azure Cloud Shell. Uma das primeiras coisas a lembrar ao copiar a sintaxe da CLI do Azure é verificar os caracteres de continuação de linha para a linguagem de script escolhida, pois eles não são intercambiáveis.

Idioma do script Caractere de continuação de linha
Bash Barra invertida (\)
PowerShell Acento grave (`)
Cmd Caret (^)

Dica

O botão Copiar no canto superior direito dos blocos de código da CLI do Azure remove a barra invertida (\) e a crase (`) intencionalmente. Para copiar um bloco de código formatado, use o teclado ou o mouse para selecionar e copiar o exemplo.

Entender as diferenças de sintaxe ao usar variáveis

A sintaxe para usar variáveis varia ligeiramente entre linguagens de script. Aqui está uma comparação:

Caso de uso Bash PowerShell Cmd
Criar variável variableName=varValue $variableName="varValue" set variableName=varValue
Usar variável como valor de parâmetro nome_da_variável $variableName %variableName%
Usar variável no --query parâmetro '$variableName' '$variableName' '$variableName'

Há várias maneiras diferentes de retornar informações variáveis para a tela do console, mas echo funciona na maioria das circunstâncias. Aqui está uma comparação:

  • Bash: echo $varResourceGroup
  • PowerShell: echo $varResourceGroup
  • Cmd: echo %varResourceGroup%

Na etapa 3, preencha as variáveis para uso em scripts, você trabalha com exemplos detalhados de sintaxe variável.

Saiba mais sobre as diferenças nas citações entre linguagens de script

Cada parâmetro da CLI do Azure é uma cadeia de caracteres. No entanto, cada linguagem de script tem suas próprias regras para lidar com aspas simples e duplas, espaços e valores de parâmetro.

Valor da cadeia de caracteres CLI do Azure PowerShell Cmd
Texto 'text' ou "text" 'text' ou "text" texto
Número \'50\' ''50'' '50'
booleano \'true\' ''false'' 'Verdade'
Data (calendário) 15/11/2021 15/11/2021 15/11/2021
JSON '{"key":"value"}' ou "{"key":"value"}" '{"key": "value"}' ou "{`\"key`\": `\"value`\"}" ou "{\"key\": \"value\"}" {"key":"value"}

Muitos parâmetros da CLI do Azure aceitam uma lista de valores separada por espaço. Esse formato afeta citações.

  • Lista separada por espaços sem aspas: --parameterName firstValue secondValue
  • Lista de valores entre aspas separados por espaço: --parameterName "firstValue" "secondValue"
  • Valores que contêm um espaço: --parameterName "value1a value1b" "value2a value2b" "value3"

Se você não tiver certeza de como sua cadeia de caracteres é avaliada pelo idioma de script, retorne o valor de uma cadeia de caracteres para o console ou use --debug conforme explicado nos comandos de referência da CLI do Azure de depuração.

Criar uma conta de armazenamento para aplicar o que você aprendeu

O restante desta etapa do tutorial demonstra as regras de aspas nos comandos do Azure CLI, usando o grupo de recursos criado em Prepare seu ambiente para o Azure CLI. Substitua <msdocs-tutorial-rg-00000000> pelo nome do grupo de recursos.

Crie uma conta de armazenamento do Azure para usar neste tutorial. Este exemplo atribui uma ID aleatória ao nome da conta de armazenamento. No entanto, se você quiser usar um nome diferente, consulte a visão geral da conta de armazenamento para as regras de nome da conta de armazenamento.

Importante

Antes de criar uma conta de armazenamento, o Microsoft.Storage provedor de recursos deve ser registrado em sua assinatura. Para saber mais sobre como registrar tipos de recursos, consulte Registrar provedor de recursos.

Este próximo exemplo de script demonstra a sintaxe específica da linguagem de script para o seguinte:

  • Continuação de linha
  • Uso de variáveis
  • Identificadores aleatórios
  • echo comando
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
___location="eastus"
resourceGroup="<msdocs-tutorial-rg-00000000>"
storageAccount="msdocssa$randomIdentifier"

# Create a storage account.
echo "Creating storage account $storageAccount in resource group $resourceGroup"
az storage account create --name $storageAccount \
                          --resource-group $resourceGroup \
                          --___location $___location \
                          --sku Standard_RAGRS \
                          --kind StorageV2 \
                          --output json

Observação

Você recebeu um erro "Assinatura não encontrada"? Esse erro ocorre quando Microsoft.Storage não está registrado na assinatura ativa. Para registrar um provedor de recursos, consulte provedores de recursos e tipos do Azure.

A CLI do Azure retorna mais de 100 linhas de JSON como saída quando uma nova conta de armazenamento é criada. A saída do dicionário JSON a seguir tem campos omitidos para brevidade.

{
"accessTier": "Hot",
"allowBlobPublicAccess": false,
"creationTime": "yyyy-mm-ddT19:14:26.962501+00:00",
"enableHttpsTrafficOnly": true,
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ msdocs-tutorial-rg-00000000/providers/Microsoft.Storage/storageAccounts/msdocssa00000000",
"keyCreationTime": {
  "key1": "yyyy-mm-ddT19:14:27.103127+00:00",
  "key2": "yyyy-mm-ddT19:14:27.103127+00:00"
},
"kind": "StorageV2",
"___location": "eastus",
"name": "msdocssa00000000",
"primaryEndpoints": {
  "blob": "https://msdocssa00000000.blob.core.windows.net/"
},
"primaryLocation": "eastus",
"provisioningState": "Succeeded",
"resourceGroup": "msdocs-tutorial-rg-00000000",
"sku": {
  "name": "Standard_RAGRS",
  "tier": "Standard"
},
"statusOfPrimary": "available",
"statusOfSecondary": "available",
"tags": {},
"type": "Microsoft.Storage/storageAccounts"
}

Criar etiquetas para praticar as diferenças de citação

Usando az storage account update, adicione tags para ajudá-lo a identificar sua conta de armazenamento e entender as diferenças de cotações. Esses exemplos de script demonstram a sintaxe específica da linguagem de script para o seguinte:

  • Valores que contêm espaços
  • Citando espaços em branco
  • Escape de caracteres especiais
  • Usar variáveis

O --tags parâmetro aceita uma lista separada por espaço de pares chave:valor. Substitua <msdocs-tutorial-rg-00000000> pelo nome do grupo de recursos e <msdocssa00000000> pelo nome da sua conta de armazenamento do Azure.

# Create new tags. This syntax works with or without quotes around each key-value pair.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags Team=t1 Environment=e1

# Create new tags containing spaces. You must use quotes.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Floor number=f1" "Cost center=cc1"

# Create a new tag with an empty value.
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Department="''""

# Create a new tag containing special characters resulting in "Path": "$G:\\myPath".
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "Path=\$G:\myPath"

# Create a tag from a variable.
newTag="tag1=tag value with spaces"
az storage account update --name <msdocssa00000000> \
                          --resource-group <msdocs-tutorial-rg-00000000> \
                          --tags "$newTag"

Se você não quiser substituir as marcas anteriores enquanto trabalha nesta etapa do tutorial, use o comando az tag update e defina o parâmetro --operation para merge.

# Get the resource ID of your storage account.
saID=$(az resource show --resource-group <msdocs-tutorial-rg-00000000> \
                        --name <msdocssa00000000> \
                        --resource-type Microsoft.Storage/storageAccounts \
                        --query "id" \
                        --output tsv)

echo My storage account ID is $saID

# Append new tags.
az tag update --resource-id $saID \
              --operation merge \
              --tags <tagName>=<tagValue>

# Get a list of all tags.
az tag list --resource-id $saID

Comparar mais scripts específicos de linguagem de script

Dê uma olhada mais profunda nessas diferenças de script. Estes exemplos demonstram diferenças na citação para o seguinte:

  • Passar uma cadeia de caracteres JSON como um valor de parâmetro
  • Filtrar resultados com o --query parâmetro
    • Números
    • Valores boolianos
    • Datas

Exemplo de um parâmetro que contém uma cadeia de caracteres JSON. Este script é fornecido para referência futura, pois não estamos utilizando az rest neste tutorial.

az rest --method patch \
        --url https://management.azure.com/subscriptions/<mySubscriptionID>/resourceGroups/<myResourceGroup>/providers/Microsoft.HybridCompute/machines/<machineName>?api-version=yyyy-mm-dd-preview \
        --resource https://management.azure.com/ \
        --headers Content-Type=application/json \
        --body '{"properties": {"agentUpgrade": {"enableAutomaticUpgrade": false}}}'

Exemplo de filtragem para um valor numérico. A menos que você tenha uma VM em sua assinatura atual, este exemplo será dado para referência futura.

az vm list --resource-group <myResourceGroup> \
           --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
           --output table

Exemplo de filtragem de um valor booliano usando a conta de armazenamento criada neste tutorial.

az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?allowBlobPublicAccess == \`true\`].id"

Exemplos de filtragem de uma data usando a conta de armazenamento criada neste tutorial.

# include time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15T19:14:27.103127+00:00'].{saName:name, saID: id, sku: sku.name}"

# exclude time
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='2021-11-15'].{saName:name, saID: id, sku: sku.name}"

# subtract days and use a variable
saDate=$(date +%F -d "-30days")
az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?creationTime >='$saDate'].{saName:name, saID: id, sku: sku.name}"

Depurar comandos de referência da CLI do Azure

Usar parâmetro de depuração

A CLI do Azure oferece um --debug parâmetro que pode ser usado com qualquer comando. A saída de depuração é extensa, mas fornece informações, incluindo o seguinte:

  • Argumentos de comando (valores de parâmetro) conforme interpretado pela linguagem de script
  • Local do arquivo de log
  • Detalhes da chamada à API
  • Erros de execução

Se você tiver dificuldade para entender e corrigir um erro de execução ao trabalhar com comandos da CLI do Azure, --debug será sua resposta para ver as etapas que a CLI do Azure está executando.

Aqui está uma parte da saída de depuração ao criar uma conta de armazenamento:

 cli.knack.cli: Command arguments: ['storage', 'account', 'create', '--name', 'msdocssa00000000', '--resource-group', 'msdocs-rg-test', '--___location', 'eastus', '--sku', 'Standard_RAGRS', '--kind', 'StorageV2', '--output', 'json', '--debug']
 ...
 cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01'
cli.azure.cli.core.sdk.policies: Request method: 'POST'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json'
cli.azure.cli.core.sdk.policies:     'Content-Length': '73'
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': '00000000-0000-0000-0000-000000000000'
cli.azure.cli.core.sdk.policies:     'CommandName': 'storage account create'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '--name --resource-group --___location --sku --kind --output --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.61.0 (DEB) azsdk-python-core/1.28.0 Python/3.11.8 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"name": "msdocssa00000000", "type": "Microsoft.Storage/storageAccounts"}
urllib3.connectionpool: Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool: https://management.azure.com:443 "POST /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01 HTTP/1.1" 200 22
cli.azure.cli.core.sdk.policies: Response status: 200
...

Para obter mais dicas de solução de problemas, consulte solução de problemas da CLI do Azure.

Usar comando de eco

Embora --debug informe exatamente o que a CLI do Azure está interpretando, uma segunda opção é retornar o valor de uma expressão ao console. Esse método é útil ao verificar os resultados do --query, que é abordado em detalhes em Preencher variáveis para uso em scripts.

strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}

Resolução de problemas

Aqui estão erros comuns quando uma sintaxe de comando de referência da CLI do Azure não é escrita corretamente:

  • "Solicitação incorreta... {something} é inválido" pode ser causado por um espaço, uma aspa única ou dupla ou falta de uma aspa.
  • "Token inesperado..." aparece quando há um espaço extra ou uma aspa.
  • O erro "Valor de jmespath_type inválido" geralmente vem de citações incorretas no --query parâmetro.
  • "A referência de variável não é válida" é recebida quando uma cadeia de caracteres não é formatada corretamente, geralmente devido à concatenação ou a um caractere de escape ausente.
  • "Argumentos não reconhecidos" geralmente são causados por um caractere de continuação de linha incorreto no código.
  • "Expressão ausente após operador unário" ocorre quando um caractere de continuação de linha está ausente.

Para obter mais dicas de solução de problemas, consulte solução de problemas de comandos da CLI do Azure.

Obtenha mais detalhes

Deseja obter mais detalhes sobre um dos assuntos abordados nesta etapa do tutorial? Use os links nesta tabela para saber mais.

Assunto Saiba Mais
Diferenças de script Diferenças de aspas entre linguagens de script
Regras de aspas do Bash
Regras de aspas do PowerShell
Considerações para executar a CLI do Azure em uma linguagem de script do PowerShell
Dicas de linha de comando do Windows
Parâmetros Usar aspas em parâmetros na CLI do Azure
Encontre mais exemplos de sintaxe de Bash, PowerShell e Cmd na saída do comando Query usando JMESPath
Resolução de problemas Solução de problemas de comandos da CLI do Azure

Próxima Etapa

Agora que você aprendeu a escrever a sintaxe da CLI do Azure para Bash, PowerShell e Cmd, prossiga para a próxima etapa para aprender a extrair valores para uma variável.