Informace o rozdílech syntaxe Azure CLI v Bash, PowerShellu a Cmd

Příkazy Azure CLI je možné spouštět v jazycích skriptování Bash, PowerShellu a příkazového prostředí Windows (Cmd ). Existují však rozdíly ve skriptování v subtilu. V tomto kurzu se dozvíte, jak vytvořit první hodnoty účtu služby Azure Storage a formátovat hodnoty parametrů pro všechny tři skriptovací jazyky.

Požadavky

  • Dokončili jste požadavky pro přípravu prostředí.
  • Máte přístup ke skupině prostředků s nebo vyššími oprávněními contributor na úrovni skupiny prostředků.

Mějte na paměti znaky pokračování řádku.

Většina dokumentace k Azure CLI je napsaná a otestovaná v Bash pomocí Azure Cloud Shellu. Jednou z prvních věcí, které je potřeba si zapamatovat při kopírování syntaxe Azure CLI, je ověřit znaky pokračování řádku pro zvolený skriptovací jazyk, protože se nedají zaměnit.

skriptovací jazyk Znak pokračování řádku
Udeřit Zpětné lomítko (\)
PowerShell Backtick (`)
Cmd Mrkve (^)

Tip

Tlačítko Kopírovat v pravém horním rohu bloků kódu Azure CLI odebere zpětné lomítko (\) a zpětné lomítko () (`) návrhem. Pokud chcete zkopírovat formátovaný blok kódu, vyberte a zkopírujte příklad pomocí klávesnice nebo myši.

Vysvětlení rozdílů v syntaxi při použití proměnných

Syntaxe použití proměnných se mírně liší mezi skriptovacími jazyky. Tady je porovnání:

Případ použití Bash PowerShell Cmd
Vytvoření proměnné variableName=varValue $variableName="varValue" set variableName=varValue
Použití proměnné jako hodnoty parametru variableName $variableName %variableName%
Použití proměnné v --query parametru "$variableName" "$variableName" "$variableName"

Na obrazovku konzoly můžete vrátit informace o proměnných několika různými způsoby, ale echo ve většině okolností funguje. Tady je porovnání:

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

V kroku 3 naplníte proměnné pro použití ve skriptech, a projdete si podrobné příklady syntaxe proměnných.

Informace o citování rozdílů mezi skriptovacími jazyky

Každý parametr Azure CLI je řetězec. Každý skriptovací jazyk má ale vlastní pravidla pro zpracování jednoduchých a dvojitých uvozovek, mezer a hodnot parametrů.

Řetězcová hodnota Azure CLI PowerShell Cmd
Text "text" nebo "text" "text" nebo "text" "text"
Počet \'50\' ''50'' 50
Logická hodnota \'true\' ''false'' "true"
Datum '2021-11-15' '2021-11-15' '2021-11-15'
JSON {"key":"value"}" nebo "{"key":"value"}" {"key": "value"} nebo "{'"key'": '"value'"}" nebo "{"key": ""value"}" "{"key":"value"}"

Mnoho parametrů Azure CLI přijímá seznam hodnot oddělených mezerami. To má vliv na uvozování.

  • Seznam oddělený mezerami bez citování: --parameterName firstValue secondValue
  • Seznam oddělený mezerami: --parameterName "firstValue" "secondValue"
  • Hodnoty, které obsahují mezeru: --parameterName "value1a value1b" "value2a value2b" "value3"

Pokud si nejste jistí, jak bude řetězec vyhodnocen skriptovacím jazykem, vraťte hodnotu řetězce do konzoly nebo použijte --debug , jak je vysvětleno v referenčních příkazech Ladění Azure CLI.

Vytvoření účtu úložiště pro použití toho, co jste se naučili

Zbývající část tohoto kurzu ukazuje pravidla uvozování v příkazech Azure CLI a používá skupinu prostředků vytvořenou v rámci přípravy prostředí pro Azure CLI. Nahraďte <msdocs-tutorial-rg-00000000> názvem vaší skupiny prostředků.

Vytvořte účet úložiště Azure, který se použije v tomto kurzu. Tento příklad přiřadí k názvu účtu úložiště náhodné ID, ale pokud chcete použít jiný název, podívejte se na přehled účtu úložiště pro pravidla názvů účtů úložiště.

Důležité

Než budete moct vytvořit účet úložiště, Microsoft.Storage musí být poskytovatel prostředků zaregistrovaný ve vašem předplatném. Další informace o registraci typů prostředků najdete v tématu Registrace poskytovatele prostředků.

Následující příklad skriptu ukazuje syntaxi specifickou pro skriptování pro následující:

  • Pokračování řádku
  • Použití proměnných
  • Náhodné identifikátory
  • Příkaz 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

Poznámka:

Zobrazila se vám chyba "Předplatné se nenašlo"? K této chybě dochází v případě, že Microsoft.Storage není zaregistrované v aktivním předplatném. Pokud chcete zaregistrovat poskytovatele prostředků, podívejte se na poskytovatele a typy prostředků Azure.

Azure CLI vrátí při vytvoření nového účtu úložiště více než 100 řádků JSON jako výstup. Následující výstup slovníku JSON obsahuje pole vynechána pro stručnost.

{
"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"
}

Vytváření značek pro procvičování rozdílů v uvozování

Pomocí příkazu az storage account update přidejte značky, které vám pomůžou identifikovat váš účet úložiště a seznámit se s rozdíly v uvozování. Tyto příklady skriptů demonstrují syntaxi specifickou pro skriptování pro následující:

  • Hodnoty obsahující mezery
  • Uvozování prázdných mezer
  • Zapouzdření speciálních znaků
  • Použití proměnných

Parametr --tags přijímá seznam párů klíč:hodnota oddělených mezerami. Nahraďte <msdocs-tutorial-rg-00000000> názvem vaší skupiny prostředků a <msdocssa00000000> názvem svého účtu úložiště 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"

Pokud nechcete při práci v tomto kroku kurzu přepsat předchozí značky, použijte příkaz az tag update a nastavte --operation parametr na 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

Porovnání dalších skriptů specifických pro jazyk

Podívejte se podrobněji na tyto rozdíly mezi skripty. Tyto příklady ukazují rozdíly v uvozování pro následující:

  • Předání řetězce JSON jako hodnoty parametru
  • Filtrování výsledků pomocí parametru --query
    • Čísla
    • Logické hodnoty
    • Kalendářní data

Příklad parametru obsahujícího řetězec JSON Tento skript se poskytuje pro budoucí referenci, protože v az rest tomto kurzu nepracujeme.

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}}}'

Příklad filtrování číselné hodnoty Pokud ve svém aktuálním předplatném nemáte virtuální počítač, zobrazí se tento příklad pro budoucí referenci.

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

Příklad filtrování logické hodnoty pomocí účtu úložiště vytvořeného v tomto kurzu

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

Příklady filtrování data pomocí účtu úložiště vytvořeného v tomto kurzu

# 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}"

Ladění referenčních příkazů Azure CLI

Použití --debug parametru

Azure CLI nabízí --debug parametr, který lze použít s libovolným příkazem. Výstup ladění je rozsáhlý, ale poskytuje vám následující informace:

  • Argumenty příkazů (hodnoty parametrů) interpretované skriptovacím jazykem
  • Umístění souboru protokolu
  • Podrobnosti volání rozhraní API
  • Execution errors

Pokud při práci s příkazy Azure CLI máte potíže s pochopením a opravou chyby spuštění, --debug je odpovědí na kroky, které Azure CLI spouští.

Tady je malá část výstupu ladění při vytváření účtu úložiště:

 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
...

Další tipy pro řešení potíží najdete v tématu Řešení potíží s Azure CLI.

Použít echo příkaz

I když --debug vám přesně řekne, co Azure CLI interpretuje, druhou možností je vrátit hodnotu výrazu do konzoly. Tato metoda je užitečná při ověřování výsledků --query , které jsou podrobně popsány v naplnění proměnných pro použití ve skriptech.

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

Řešení problému

Tady jsou běžné chyby, když syntaxe referenčního příkazu Azure CLI není správně napsaná:

  • "Chybný požadavek... {něco} je neplatné" může být způsobeno mezerou, jednoduchou nebo dvojitou uvozovkou nebo nedostatkem uvozovek.

  • Neočekávaný token... je vidět, když je k dispozici nadbytečná mezera nebo uvozovka.

  • Chyba "Neplatná hodnota jmespath_type" často pochází z nesprávného uvozovek v parametru --query .

  • Pokud řetězec není správně naformátovaný kvůli zřetězení nebo chybějícímu řídicímu znaku, obdrží se "Odkaz na proměnnou není platný".

  • Nerozpoznané argumenty jsou často způsobeny nesprávným znakem pokračování řádku.

  • "Chybějící výraz za unárním operátorem" se zobrazí, když chybí znak pokračování řádku.

Další tipy pro řešení potíží najdete v tématu Řešení potíží s příkazy Azure CLI.

Získání dalších podrobností

Chcete podrobnější informace o jednom z témat popsaných v tomto kroku kurzu? Další informace získáte pomocí odkazů v této tabulce.

Předmět Další informace
Rozdíly skriptování Citace rozdílů mezi skriptovacími jazyky
Pravidla uvozování Bash
Pravidla uvozování v PowerShellu
Důležité informace o spuštění Azure CLI ve skriptovacím jazyce PowerShellu
Tipy pro příkazový řádek Windows
Parametry Použití uvozovek v parametrech Azure CLI
Vyhledání dalších příkladů syntaxe Bash, PowerShellu a cmd ve výstupu příkazu dotazu pomocí JMESPath
Řešení problému Řešení potíží s příkazy Azure CLI

Další krok

Teď, když jste se naučili psát syntaxi Azure CLI pro Bash, PowerShell a Cmd, přejděte k dalšímu kroku, kde se dozvíte, jak extrahovat hodnoty do proměnné.