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

Příkazy Azure CLI je možné spouštět v prostředích 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šechna tři prostředí.

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é prostředí, protože nejsou zaměnitelné.

Prostředí Znak pokračování řádku
Bash 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 prostředími. 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 prostředími

Každý parametr Azure CLI je řetězec. Každé prostředí 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"}" "{"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 se řetězec vyhodnotí ve vašem prostředí, vraťte hodnotu řetězce do konzoly nebo použijte --debug , jak je vysvětleno v referenčních příkazech k 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ě.

Následující příklad skriptu ukazuje syntaxi specifickou pro prostředí 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

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ů ukazují syntaxi specifickou pro prostředí 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 prostředí

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 další informace o chybách spuštění. K odebrání výstupu konzoly mezi testy použijte příkaz Bash clear .

Tyto příklady odhalí skutečné argumenty přijaté Rozhraním příkazového řádku Azure v syntaxi Pythonu.

Tento příklad je správný v prostředí Bash i v PowerShellu.

az '{"key":"value"}' --debug

Podívejte se, co Azure CLI interpretuje na Command arguments řádku výstupu.

Command arguments: ['{"key":"value"}', '--debug']

Tento druhý příklad je také správný. K odebrání výstupu konzoly mezi testy použijte příkaz Bash clear .

clear
az "{\"key\":\"value\"}" --debug
Command arguments: ['{"key":"value"}', '--debug']

Tyto další dva příklady jsou nesprávné jako uvozovky a mezery jsou interpretovány Bashem.

Nesprávný formát Problém Výstup konzoly
az {"key":"value"} --debug Chybějící jednoduché uvozovky nebo řídicí znaky Argumenty příkazu: ['{key:value}', '--debug']
az {"key": "value"} --debug Chybějící jednoduché uvozovky nebo řídicí znaky a obsahuje nadbytečné mezery. Argumenty příkazu: ['{key:', 'value}', '--debug']

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.

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í Bash quoting
Citace PowerShellu
Problémy s quotingem v 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

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