Bash, PowerShell ve Cmd'de Azure CLI söz dizimi farklarını öğrenin

Azure CLI komutları hem Bash, PowerShell hem de Windows komut kabuğu (Cmd) betik dillerinde yürütülebilir. Ancak, alt komut dosyası farklılıkları vardır. Bu öğretici adımında ilk Azure Depolama Hesabınızı oluşturmayı ve üç betik dilinin de parametre değerlerini biçimlendirmeyi öğrenin.

Önkoşullar

  • Ortamınızı hazırlamak için önkoşulları tamamladınız.
  • Kaynak grubu düzeyinde veya daha yüksek izinlere sahip contributor bir kaynak grubuna erişiminiz vardır.

Satır devamlılığı karakterlerine dikkat edin

Azure CLI belgelerinin çoğu, Azure Cloud Shell kullanılarak Bash'te yazılır ve test edilir. Azure CLI söz dizimini kopyalarken hatırlamanız gereken ilk noktalardan biri, seçtiğiniz betik dilinin satır devamı karakterlerini birbirinin yerine kullanılamadıkları için doğrulamaktır.

betik dili Satır devamlılığı karakteri
Bash Ters eğik çizgi (\)
PowerShell Backtick (`)
Cmd Havuç (^)

İpucu

Azure CLI kod bloklarının sağ üst köşesindeki Kopyala düğmesi, ters eğik çizgiyi (\) ve ters eğik çizgiyi (`) tasarım gereği kaldırır. Biçimlendirilmiş bir kod bloğunu kopyalamak istiyorsanız, örneği seçmek ve kopyalamak için klavyenizi veya farenizi kullanın.

Değişkenleri kullanırken söz dizimi farklarını anlama

Değişkenleri kullanma söz dizimi, betik oluşturma dilleri arasında biraz değişiklik gösterir. Karşılaştırma aşağıdadır:

Kullanım örneği Bash PowerShell Cmd
Değişken oluşturma variableName=varValue $variableName="varValue" set variableName=varValue
Parametre değeri olarak değişken kullanma variableName $variableName %variableName%
Parametresinde --query değişken kullanma '$variableName' '$variableName' '$variableName'

Konsol ekranınıza değişken bilgileri döndürmenin birkaç farklı yolu vardır, ancak echo çoğu durumda çalışır. Karşılaştırma aşağıdadır:

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

Üçüncü adımda, Değişkenleri betiklerde kullanmak üzere doldurun bölümünde, değişken söz diziminin ayrıntılı örneklerini inceleyeceksiniz.

Betik oluşturma dilleri arasındaki farkları alıntılama hakkında bilgi edinin

Her Azure CLI parametresi bir dizedir. Ancak, her betik dilinin tek ve çift tırnak, boşluk ve parametre değerlerini işlemek için kendi kuralları vardır.

Dize değeri seçeneğini belirleyin Azure CLI PowerShell Cmd
Metin 'text' veya "text" 'text' veya "text" "metin"
Sayı \'50\' ''50'' '50'
Boolean \'true\' ''false'' 'true'
Tarih '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' veya "{"key":"value"}" '{"key": "value"}' veya "{'"key'": '"value'"}" veya "{""key"": ""value""}" "{"key":"value"}"

Birçok Azure CLI parametresi, alanla ayrılmış değerler listesini kabul eder. Bu, alıntıları etkiler.

  • Sıralanmamış boşlukla ayrılmış liste: --parameterName firstValue secondValue
  • Tırnak içine alınmış boşlukla ayrılmış liste: --parameterName "firstValue" "secondValue"
  • Boşluk içeren değerler: --parameterName "value1a value1b" "value2a value2b" "value3"

Dizenizin betik diliniz tarafından nasıl değerlendirileceğinden emin değilseniz, bir dizenin değerini konsolunuza döndürin veya Azure CLI başvuru komutlarında hata ayıklama bölümünde açıklandığı gibi kullanın--debug.

Öğrendiklerini uygulamak için bir depolama hesabı oluşturma

Bu öğretici adımının geri kalanında Azure CLI komutlarındaki kuralların alıntılanması gösterilir ve Ortamınızı Azure CLI için hazırlama bölümünde oluşturulan kaynak grubu kullanılır. yerine <msdocs-tutorial-rg-00000000> kaynak grubunuzun adını yazın.

Bu öğreticide kullanmak üzere bir Azure depolama hesabı oluşturun. Bu örnek, depolama hesabı adına rastgele bir kimlik atar, ancak farklı bir ad kullanmak istiyorsanız depolama hesabı adı kuralları için depolama hesabına genel bakış konusuna bakın.

Önemli

Depolama hesabı oluşturabilmeniz için önce kaynak sağlayıcısının Microsoft.Storage aboneliğinize kaydedilmesi gerekir. Kaynak türlerini kaydetme hakkında bilgi edinmek için bkz . Kaynak sağlayıcısını kaydetme.

Bu sonraki betik örneği, aşağıdakiler için betik diline özgü söz dizimini gösterir:

  • Satır devamlılığı
  • Değişken kullanımı
  • Rastgele tanımlayıcılar
  • echo komut
# 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

Not

"Abonelik bulunamadı" hatası mı aldınız? Bu hata, etkin aboneliğe kaydedilmediğinde Microsoft.Storage oluşur. Bir kaynak sağlayıcısını kaydetmek için bkz . Azure kaynak sağlayıcıları ve türleri.

Azure CLI, yeni bir depolama hesabı oluşturulduğunda çıktı olarak 100'den fazla JSON satırı döndürür. Aşağıdaki JSON sözlüğü çıkışında kısa süre için atlanmış alanlar var.

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

Farkları alıntılama alıştırması yapmak için etiketler oluşturma

az storage account update komutunu kullanarak depolama hesabınızı tanımlamanıza ve farkları alıntılama hakkında bilgi edinmenize yardımcı olacak etiketler ekleyin. Bu betik örnekleri, aşağıdakiler için betik diline özgü söz dizimini gösterir:

  • Boşluk içeren değerler
  • Boş alanları alıntılama
  • Özel karakterlerden kaçış
  • Değişkenleri kullanma

--tags parametresi, anahtar:değer çiftlerinin boşlukla ayrılmış bir listesini kabul eder. yerine <msdocs-tutorial-rg-00000000> kaynak grubunuzun adını ve <msdocssa00000000> Azure depolama hesabınızın adını yazın.

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

Bu öğretici adımında çalışırken önceki etiketlerin üzerine yazmak istemiyorsanız az tag update komutunu kullanarak parametresini --operation olarak mergeayarlayın.

# 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

Diğer betik oluşturma diline özgü betikleri karşılaştırma

Bu betik farklılıklarına daha ayrıntılı bir göz atın. Bu örneklerde aşağıdakiler için alıntı farkları gösterilmektedir:

  • JSON dizesini parametre değeri olarak geçirme
  • Sonuçları parametresiyle --query filtreleme
    • Numaralar
    • Boole değerleri
    • Tarihler

JSON dizesi içeren parametre örneği. Bu betik, bu öğreticide birlikte az rest çalışmadığımız için gelecekteki başvurular için verilmiştir.

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

Sayısal değer için filtreleme örneği. Geçerli aboneliğinizde vm yoksa, bu örnek gelecekteki başvurular için verilmiştir.

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

Bu öğreticide oluşturulan depolama hesabını kullanarak boole değerini filtreleme örneği.

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

Bu öğreticide oluşturulan depolama hesabını kullanarak tarihi filtreleme örnekleri.

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

Azure CLI başvuru komutlarının hatalarını ayıklama

Parametre kullanma --debug

Azure CLI, herhangi bir komutla kullanılabilen bir --debug parametre sunar. Hata ayıklama çıkışı kapsamlıdır, ancak aşağıdakiler de dahil olmak üzere size bilgi verir:

  • Komut dosyası diliniz tarafından yorumlanan komut bağımsız değişkenleri (parametre değerleri)
  • Günlük dosyanızın konumu
  • API çağrısı ayrıntısı
  • Yürütme hataları

Azure CLI komutlarıyla çalışırken bir yürütme hatasını anlamakta ve düzeltmekte güçlük çekiyorsanız, --debug Azure CLI'nın yürüttüğü adımları görmek sizin yanıtınızdır.

Depolama hesabı oluştururken hata ayıklama çıkışının küçük bir bölümü aşağıdadır:

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

Daha fazla sorun giderme ipucu için bkz . Azure CLI sorunlarını giderme.

Komutunu kullan echo

Azure CLI'nin tam olarak neyi yorumlayanı anlatsa --debug da, ikinci bir seçenek de bir ifadenin değerini konsolunuza döndürmektir. Bu yöntem, betiklerde kullanmak üzere değişkenleri doldurma başlığı altında ayrıntılı olarak ele alınan sonuçlarını --query doğrularken yararlıdır.

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

Sorun giderme

Azure CLI başvuru komutu söz diziminde düzgün yazılmadığında karşılaşılan yaygın hatalar şunlardır:

  • "Hatalı istek ... {something} geçersiz" hatasının nedeni boşluk, tek veya çift tırnak işareti veya tırnak işareti olmaması olabilir.

  • "Beklenmeyen belirteç..." , fazladan bir boşluk veya alıntı olduğunda görülür.

  • "Geçersiz jmespath_type değeri" hatası genellikle parametresindeki --query yanlış alıntıdan kaynaklanır.

  • Birleştirme veya eksik bir kaçış karakteri nedeniyle bir dize düzgün biçimlendirilmediğinde "Değişken başvurusu geçerli değil" alınır.

  • "Tanınmayan bağımsız değişkenler" genellikle yanlış bir satır devamlılığı karakterine neden olur.

  • Bir satır devamlılığı karakteri eksik olduğunda "Birli işleç sonrasında eksik ifade" görülür.

Ek sorun giderme ipuçları için bkz . Azure CLI komutlarının sorunlarını giderme.

Daha fazla ayrıntı alın

Bu öğretici adımında ele alınan konulardan biri hakkında daha fazla ayrıntı istiyor musunuz? Daha fazla bilgi edinmek için bu tablodaki bağlantıları kullanın.

Konu Daha fazla bilgi edinin
Betik oluşturma farklılıkları Betik oluşturma dilleri arasındaki farkları alıntılama
Bash alıntılama kuralları
PowerShell alıntılama kuralları
Azure CLI'yi PowerShell betik dilinde çalıştırma konusunda dikkat edilmesi gerekenler
Windows komut satırı ipuçları
Parametreler Azure CLI parametrelerinde tırnak işaretleri kullanma
JMESPath kullanarak Sorgu komut çıkışında Bash, PowerShell ve Cmd için daha fazla söz dizimi örneği bulun
Sorun giderme Azure CLI komutlarının sorunlarını giderme

Sonraki Adım

Bash, PowerShell ve Cmd için Azure CLI söz dizimi yazmayı öğrendiğinize göre, bir değişkene değer ayıklamayı öğrenmek için sonraki adıma geçin.