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) ortamlarında 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 üç ortamın da 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 ortamın satır devamı karakterlerini birbirinin yerine kullanılamadıkları için doğrulamaktır.

Ortam 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 ortamlar arasında biraz farklılık 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.

Ortamlar arasındaki farkları alıntılama hakkında bilgi edinin

Her Azure CLI parametresi bir dizedir. Ancak, her ortamın tek ve çift tırnakları, boşlukları 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"}' "{"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 ortamınız 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 örnekte depolama hesabı adına rastgele bir kimlik atanır, ancak farklı bir ad kullanmak istiyorsanız bkz. depolama hesabı adı kuralları için hesaba genel bakış Depolama.

Bu sonraki betik örneği, aşağıdakiler için ortama ö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

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 ortama ö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

Ortama ö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 yürütme hataları hakkında daha fazla bilgi verir. Testler arasındaki konsol çıkışını kaldırmak için Bash clear komutunu kullanın.

Bu örnekler, Python söz diziminde Azure CLI tarafından alınan gerçek bağımsız değişkenleri gösterir.

Bu örnek hem Bash hem de PowerShell'de doğrudur .

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

Çıkışın satırında Azure CLI'nin Command arguments yorumlana bakın.

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

Bu ikinci örnek de doğrudur. Testler arasındaki konsol çıkışını kaldırmak için Bash clear komutunu kullanın.

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

Tırnak işaretleri ve boşluklar Bash tarafından yorumlandığından sonraki iki örnek yanlıştır .

Yanlış biçim Sorun Konsol çıktısı
az {"key":"value"} --debug Eksik tek tırnak işaretleri veya kaçış karakterleri Komut bağımsız değişkenleri: ['{key:value}', '--debug']
az {"key": "value"} --debug Tek tırnak işaretleri veya kaçış karakterleri eksik ve fazladan boşluk içeriyor Komut bağımsız değişkenleri: ['{key:', 'value}', '--debug']

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.

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ı Bash alıntısı
PowerShell alıntısı
PowerShell ile ilgili sorunları alıntılama
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

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.