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