Compartilhar via


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

Os comandos da CLI do Azure podem ser executados nas linguagens de script Bash, PowerShell e Cmd (shell de comando) do Windows. No entanto, há diferenças de script de subtile. Nesta etapa do tutorial, saiba como criar sua primeira Conta de Armazenamento do Azure e formatar valores de parâmetro para todas as três linguagens de script.

Pré-requisitos

  • Você concluiu os pré-requisitos para preparar seu ambiente.
  • Você tem acesso a um grupo de recursos com permissões contributor ou 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 serem lembradas 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.

linguagem de script Caractere de continuação de linha
Bash Barra invertida (\)
PowerShell Backtick (`)
Cmd Carrot (^)

Dica

O botão Copiar no canto superior direito dos blocos de código da CLI do Azure remove a barra invertida (\) e o caractere de acento grave (`) por design. Se você quiser 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 as 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 variableName $variableName %variableName%
Usar variável no parâmetro --query '$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 três, Preencher variáveis para uso em scripts, você trabalha com exemplos aprofundados de sintaxe variável.

Saiba mais sobre as diferenças entre aspas 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 'texto' ou "texto" 'texto' ou "texto" "texto"
Número \`50\` ``50`` `50`
Booliano \`true\` ``false`` 'true'
Data '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' or "{"key":"value"}" '{"chave": "valor"}' ou "{'"chave'": '"valor'"}" ou "{""chave"": ""valor""}" "{"key":"value"}"

Muitos parâmetros da CLI do Azure aceitam uma lista de valores separada por espaço. Isso afeta aspas.

  • Lista separada por espaço sem aspas: --parameterName firstValue secondValue
  • Lista separada por espaço com aspas: --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 será avaliada por sua linguagem de script, retorne o valor de uma cadeia de caracteres para o console ou use-o --debug , conforme explicado em Depurar comandos de referência da CLI do Azure.

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

O restante desta etapa do tutorial demonstra as regras de citação nos comandos da CLI do Azure e usa o grupo de recursos criado em Preparar seu ambiente para a CLI do Azure. 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, mas se você quiser usar um nome diferente, confira 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ável
  • Identificadores aleatórios
  • Comando echo
# 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ê acabou de receber 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 e tipos de recursos 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 marcas para praticar as diferenças entre aspas

Usando az storage account update, adicione marcas para ajudar você a identificar sua conta de armazenamento e saiba mais sobre os diferentes usos de aspas. 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
  • Caracteres especiais de escape
  • Usando variáveis

O parâmetro --tags 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 definindo o parâmetro --operation como 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 da linguagem de script

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

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

Exemplo de um parâmetro que contém uma cadeia de caracteres JSON. Este script é dado para referência futura, pois não estamos trabalhando com 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 --debug

A CLI do Azure oferece um parâmetro --debug 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 interpretados pela linguagem de script
  • Localização do seu arquivo de log
  • Detalhes da chamada da API
  • Erros de execução

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

Aqui está uma pequena 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 o comando echo

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 de --query que são abordados detalhadamente em Variáveis de população para uso em scripts.

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

Soluçã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..." é visto quando há um espaço extra ou aspas.

  • O erro "Valor de jmespath_type inválido" geralmente vem de aspas incorretas no parâmetro --query.

  • "A referência de variável não é válida" é recebida quando uma cadeia de caracteres não é formatada corretamente com frequência devido à concatenação ou a um caractere de escape ausente.

  • "Argumentos não reconhecidos" geralmente é causado por um caractere de continuação de linha incorreto.

  • "Expressão ausente após operador unário" é visto quando um caractere de continuação de linha está ausente.

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

Obter 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 entre aspas entre linguagens de script
Regras de citação do Bash
Regras de cotação 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
Soluçã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 saber como extrair valores para uma variável.