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