Aracılığıyla paylaş


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, ince 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 Ters tırnak işareti (`)
Cmd Havuç (^)

Tavsiye

Azure CLI kod bloklarının sağ üst köşesindeki Kopyala düğmesi, ters eğik çizgiyi (\) ve ters tırnak işaretini (`) 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 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 değişkenAdı $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: echo $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 dilleri arasındaki alıntılama farklılıkları 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 Azure Komut Satırı Arayüzü (Azure CLI) PowerShell Cmd
Metin 'text' veya "text" 'text' ya da "text" "metin"
Sayı \'50\' ''50'' '50'
Boolean (Boole Mantığı) doğru ''false'' doğru
Tarih '2021-11-15' '2021-11-15' '2021-11-15'
JSON veri formatı '{"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
  • Boşlukla ayrılmış, tırnak içine alınmış 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

Uyarı

"Abonelik bulunamadı" hatası mı aldınız? Microsoft.Storage etkin aboneliğe kaydedilmediğinde bu hata 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. Takip eden JSON sözlüğü çıktısında kısalık için bazı alanlar çıkarılmıştır.

{
"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 --operation parametresini merge olarak ayarlayı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 komut dosyası farklılıklarını daha yakından inceleyin. 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
    • Sayılar
    • Boole değerleri
    • Tarihler

JSON dizesi içeren parametre örneği. Bu komut dosyası, bu öğreticide az rest ile çalışmadığımız için ileride referans olarak 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 bir VM yoksa, bu örnek gelecekteki referanslar 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 bir boolean değeri nasıl filtreleyeceğinize dair bir örnek.

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

"--debug parametresini kullanın"

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 argümanları (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 yorumladığını size gösterse de, başka bir seçenek olarak bir ifadenin değerini konsolunuza döndürmektir. Bu yöntem, Betiklerde kullanmak için değişkenleri doldurma bölümünde ayrıntılı olarak ele alınan --query sonuçlarını 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 olabilir. Bunun nedeni boşluk, tek veya çift tırnak işareti veya tırnak işaretinin eksikliği 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
Komut dosyası farklılıkları Betik dilleri arasındaki alıntılama farkları
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.