Azure CLI'yi Bash betik dilinde kullanma
Azure CLI başvuru komutları çeşitli betik dillerinde yürütülebilir. Bash'i ve Azure CLI'yı da yeni kullanıyorsanız, bu makale öğrenme yolculuğunuza başlamak için harika bir yerdir. Azure CLI'yi Bir Bash betik dilinde kolayca kullanmayı öğrenmek için öğreticide yaptığınız gibi bu makalenin üzerinden geçin.
Bu makalede şunları öğreneceksiniz:
- Sonuçları JSON sözlükleri veya dizileri olarak sorgulama
- Çıktıyı JSON, tablo veya TSV olarak biçimlendirme
- Tek ve birden çok değeri sorgulama, filtreleme ve biçimlendirme
- If/exists/then ve case söz dizimlerini kullanın
- Döngüler için kullanma
- grep, sed, paste ve bc komutlarını kullanma
- Kabuk ve ortam değişkenlerini doldurma ve kullanma
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir Azure hesabı oluşturun.
Bash başlatılıyor
Azure Cloud Shell'i veya Azure CLI'nın yerel yüklemesini kullanarak Bash'i başlatın. Bu makalede Bash'i Azure Cloud Shell kullanarak veya Docker kapsayıcısında yerel olarak Azure CLI çalıştırdığınız varsayılır.
Sözlük sonuçlarını sorgulama
Her zaman tek bir nesne döndüren bir komut bir JSON sözlüğü döndürür. Sözlükler anahtarlarla erişilen sıralanmamış nesnelerdir. Bu makale için, Account Show komutunu kullanarak Account nesnesini sorgulayarak başlayacağız.
az account show
az account show --output json # JSON is the default format
Aşağıdaki JSON sözlüğü çıkışında kısa süre için atlanmış bazı alanlar vardır ve tanımlayıcı bilgiler kaldırılır.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
Çıkışı YAML olarak biçimlendirme
--output yaml
Çıkışı düz metin veri serileştirme biçimi olan yaml biçiminde biçimlendirmek için bağımsız değişkenini (veya -o yaml
) kullanın. YAML, JSON'dan daha kolay okunabilir ve bu biçime kolayca eşlenebilir. Bazı uygulamalar ve CLI komutları, yapılandırma girişi olarak JSON yerine YAML alır.
az account show --output yaml
Çıkışı yaml olarak biçimlendirme hakkında daha fazla bilgi için bkz . YAML çıkış biçimi.
Çıktıyı tablo olarak biçimlendirme
--output table
Çıkışı ASCII tablosu olarak biçimlendirmek için bağımsız değişkenini (veya -o table
) kullanın. İç içe geçmiş nesneler tablo çıkışına dahil edilmez ancak bir sorgunun parçası olarak yine filtrelenebilir.
az account show --output table
Çıktıyı tablo olarak biçimlendirme hakkında daha fazla bilgi için bkz . Tablo çıkış biçimi.
Tek değerleri ve iç içe değerleri sorgulama ve biçimlendirme
Aşağıdaki sorgular, bir JSON sözlüğü çıkışında iç içe değerler de dahil olmak üzere tek değerleri sorgulamayı gösterir. Bu kümedeki son sorgu, bağımsız değişkenini kullanarak çıkışı biçimlendirmeyi -o tsv
gösterir. Bu bağımsız değişken, sonuçları sekme ve yeni satırla ayrılmış değerler olarak döndürür. Bu eylem, döndürülen değerdeki tırnak işaretlerini kaldırmak için kullanışlıdır. Bu, çıktıyı metni bir biçimde işlemesi gereken diğer komut ve araçlarda (bu makalenin ilerleyen bölümlerinde gösterildiği gibi) kullanmak için yararlıdır.
az account show --query name # Querying a single value
az account show --query name -o tsv # Removes quotation marks from the output
az account show --query user.name # Querying a nested value
az account show --query user.name -o tsv # Removes quotation marks from the output
Dizilerden özellikleri sorgulama ve biçimlendirme
Aşağıdaki sorgu, bir JSON dizisinde özellikleri alma işlemini gösterir. Abonelikler tablosu olarak görüntülenen abonelik özelliklerini alma.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Bu sorgu aşağıdakine benzer sonuçlar döndürür:
Subscription_id Name IsDefault
------------------------------------ ------------------------------------------------- -----------
11111111-3ddc-45ce-8334-c7b28a9e1c3a C & L Azure developer experience content projects False
22222222-8f1c-409b-af1e-8e2e65d9b90a DevCenter - Infrastructure - Dogfood False
33333333-c080-42a7-8973-1aa853ab4df3 Babel False
İç içe değerler de dahil olmak üzere birden çok değeri sorgulama ve biçimlendirme
Birden fazla özellik almak için ifadeleri virgülle ayrılmış liste olarak köşeli ayraç [ ] (çoklu seçim listesi) içine yerleştirin. Aşağıdaki sorgular, birden çok çıkış biçimi kullanarak bir JSON sözlüğü çıkışındaki birden çok değeri sorgulamayı gösterir.
az account show --query [name,id,user.name] # return multiple values
az account show --query [name,id,user.name] -o table # return multiple values as a table
Birden çok değer döndürme hakkında daha fazla bilgi için bkz . Birden çok değer alma.
Sorgudaki özellikleri yeniden adlandırma
Aşağıdaki sorgular, birden çok değer için sorgu yaparken dizi yerine bir sözlük almak için { } (çok seçimli karma) işlecinin kullanımını gösterir. Ayrıca sorgu sonucundaki özelliklerin yeniden adlandırılması da gösterilir.
az account show --query "{SubscriptionName: name, SubscriptionId: id, UserName: user.name}" # Rename the values returned
az account show --query "{SubscriptionName: name, SubscriptionId: id, UserName: user.name}" -o table # Rename the values returned in a table
Sorgudaki özellikleri yeniden adlandırma hakkında daha fazla bilgi için bkz . Sorgudaki özellikleri yeniden adlandırma.
Boole değerlerini sorgulama
Boole değerlerinin true olduğu varsayıldığından, komutun "[?isDefault]"
sorgu söz dizimi az account list
geçerli varsayılan aboneliği döndürür. Yanlış değerleri almak için gibi \
bir kaçış karakteri kullanmanız gerekir.
Aşağıdaki sorgular, bir abonelikteki tüm hesapları sorgulamayı, belirli bir hesap için birden çok abonelik varsa bir JSON dizisi döndürmeyi ve ardından hangi hesabın varsayılan abonelik olduğunu sorgulamayı gösterir. Ayrıca, varsayılan abonelik olmayan hesapları sorgulamayı da gösterir. Bu sorgular, sonuçları filtrelemek ve biçimlendirmek için daha önce öğrendiklerinize dayalıdır. Son olarak, son sorgu sorgu sonuçlarının bir değişkende depolanmasını gösterir.
az account list
az account list --query "[?isDefault]" # Returns the default subscription
az account list --query "[?isDefault]" -o table # Returns the default subscription as a table
az account list --query "[?isDefault].[name,id]" # Returns the name and id of the default subscription
az account list --query "[?isDefault].[name,id]" -o table # Returns the name and id of the default subscription as a table
az account list --query "[?isDefault].{SubscriptionName: name, SubscriptionId: id}" -o table # Returns the name and id of the default subscription as a table with friendly names
az account list --query "[?isDefault == \`false\`]" # Returns all non-default subscriptions, if any
az account list --query "[?isDefault == \`false\`].name" -o table # Returns all non-default subscriptions, if any, as a table
az account list --query "[?isDefault].id" -o tsv # Returns the subscription id without quotation marks
subscriptionId="$(az account list --query "[?isDefault].id" -o tsv)" # Captures the subscription id as a variable.
echo $subscriptionId # Returns the contents of the variable.
az account list --query "[? contains(name, 'Test')].id" -o tsv # Returns the subscription id of a non-default subscription containing the substring 'Test'
subscriptionId="$(az account list --query "[? contains(name, 'Test')].id" -o tsv) # Captures the subscription id as a variable.
az account set -s $subscriptionId # Sets the current active subscription
- Dizileri filtreleme ve boole değerlerini sorgulama hakkında daha fazla bilgi için bkz . Dizileri boole ifadeleriyle filtreleme.
- Değişkenleri kullanma hakkında daha fazla bilgi için bkz . Değişkenleri kullanma.
- Aboneliklerle çalışma hakkında daha fazla bilgi için bkz . Abonelikleri yönetme.
Değişkenleri ve rastgele seçmeyi kullanarak nesne oluşturma
Sonraki komutlarda kullanmak üzere rastgele bir değer ayarlama
Değişkenlerde kullanmak üzere rastgele bir değer ayarlamak ve kullanmak, adlandırma çakışmaları olmadan betikleri birden çok kez çalıştırmanıza olanak tanır. Adlandırma çakışmaları, bir değerin hizmet genelinde benzersiz olması gerektiğinden veya silme işlemi tamamlanana kadar sildiğiniz bir nesnenin Azure'da hala mevcut olması nedeniyle oluşur.
$RANDOM
rastgele imzalı 16 bitlik bir tamsayı (0 ile 32767 arasında) döndüren bir bash işlevidir (sabit değildir). let
komutu, aritmetik ifadeleri değerlendirmek için yerleşik bir Bash komutudur.
Aşağıdaki komutun kullanılması, çoğu amaç için yeterince benzersiz bir değer oluşturur.
let "randomIdentifier=$RANDOM*$RANDOM"
Boşluklar ve tırnak işaretleri ile çalışma
Boşluklar komutları, seçenekleri ve bağımsız değişkenleri ayırmak için kullanılır. Bash kabuğuna boşluk özel karakter olan tüm özel karakterleri yoksaymalarını söylemek için tırnak işaretlerini kullanın. Bash kabuğu ilk tırnak işaretini gördüğünde, kapanış tırnak işaretine kadar özel karakterleri yoksayar. Ancak bazen Bash kabuğunun dolar işaretleri, ters tırnak işaretleri ve ters eğik çizgi gibi belirli özel karakterleri ayrıştırmasını istersiniz. Bu senaryo için çift tırnak kullanın.
Aşağıdaki komutlar, tek ve çift tırnak işaretlerinin kullanımını göstermek için az group create komutunu kullanır. Bu komutlar, değişkenlerle çalışırken ve nesne oluştururken boşlukları işlemek ve özel karakterleri değerlendirmek için kullanılır.
resourceGroup='msdocs-learn-bash-$randomIdentifier'
echo $resourceGroup # The $ is ignored in the creation of the $resourceGroup variable
resourceGroup="msdocs-learn-bash-$randomIdentifier"
echo $resourceGroup # The $randomIdentifier is evaluated when defining the $resourceGroup variable
location="East US" # The space is ignored when defining the $location variable
echo The value of the location variable is $location # The value of the $location variable is evaluated
echo "The value of the location variable is $location" # The value of the $location variable is evaluated
echo "The value of the location variable is \$location" # The value of the $location variable is not evaluated
echo 'The value of the location variable is $location' # The value of the $location variable is not evaluated
az group create --name $resourceGroup --location $location # Notice that the space in the $location variable is not ignored and the command fails as it treats the value after the space as a new command
az group create --name $resourceGroup --location "$location" # Notice that the space in the $location variable is ignored and the location argument accepts the entire string as the value
JSON sözlüğü çıkışında, oluşturulan kaynak grubunun özelliklerini gözden geçirin.
Değişkenin null olup olmadığını belirlemek için If Then Else kullanma
Dizeleri değerlendirmek için ve kullanarak !=
sayıları değerlendirin -ne
. Aşağıdaki If Then Else deyimi, $resourceGroup değişkeninin ayarlanıp ayarlanmadığını değerlendirir. Evet ise değişkeninin değerini döndürür. Hayır ise değişkeni ayarlar.
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Bir kaynak grubu oluşturmak veya silmek için If Then kullanma
Aşağıdaki betik, yalnızca belirtilen ada sahip bir kaynak grubu yoksa yeni bir kaynak grubu oluşturur.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
Aşağıdaki betik, belirtilen ada sahip bir kaynak grubu zaten varsa mevcut yeni bir kaynak grubunu siler. Komutun --no-wait
tamamlanmasını beklemeden denetimi döndürmek için bağımsız değişkenini kullanabilirsiniz. Ancak, bu makalede devam etmeden önce kaynak grubunun silinmesini beklemek istiyoruz. Zaman uyumsuz işlemler hakkında daha fazla bilgi için bkz . Azure CLI'yi başarıyla kullanma ipuçları - Zaman uyumsuz işlemler.
Bu makalenin --no-wait
sonunda bağımsız değişkenin kullanımını gösteririz.
if [ $(az group exists --name $resourceGroup) = true ]; then
az group delete --name $resourceGroup -y # --no-wait
else
echo The $resourceGroup resource group does not exist
fi
Grep kullanarak bir kaynak grubunun var olup olmadığını belirleyin ve yoksa kaynak grubunu oluşturun
Aşağıdaki komut, komutun çıkışını az group list
komutuna aktarır grep
. Belirtilen kaynak grubu yoksa, komut önceden tanımlanmış değişkenleri kullanarak kaynak grubunu oluşturur.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Bir kaynak grubunun var olup olmadığını belirlemek için CASE deyimini kullanma ve yoksa kaynak grubunu oluşturma
Aşağıdaki CASE deyimi, yalnızca belirtilen ada sahip bir tane yoksa yeni bir kaynak grubu oluşturur. Belirtilen ada sahip bir tane varsa, CASE deyimi kaynak grubunun mevcut olduğunu gösterir.
var=$(az group list --query "[? contains(name, '$resourceGroup')].name" --output tsv)
case $resourceGroup in
$var)
echo The $resourceGroup resource group already exists.;;
*)
az group create --name $resourceGroup --location "$location";;
esac
Döngüler için kullanma ve dizileri sorgulama
Makalenin bu bölümünde bir depolama hesabı oluşturacak ve ardından bloblar ve kapsayıcılar oluşturmak için for döngülerini kullanacağız. Ayrıca JSON dizilerini sorgulamayı ve ortam değişkenleriyle çalışmayı da gösteriyoruz.
Depolama hesabı oluştur
Aşağıdaki komut, depolama kapsayıcıları oluştururken kullandığımız bir depolama hesabı oluşturmak için az storage account create komutunu kullanır.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Depolama hesabı anahtarlarını alma
Aşağıdaki komutlar, depolama hesabı anahtar değerlerini döndürmek için az storage account keys list komutunu kullanır. Ardından depolama kapsayıcıları oluştururken kullanılacak bir değişkende anahtar değeri depolarız.
az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[].value" -o tsv # returns both storage account key values
az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[0].value" -o tsv # returns a single storage account key value
accountKey=$(az storage account keys list --resource-group $resourceGroup --account-name $storageAccount --query "[0].value" -o tsv)
echo $accountKey
Depolama kapsayıcısı oluşturma
Tek bir depolama kapsayıcısı oluşturmak için az storage container create komutunu kullanarak başlıyoruz ve oluşturulan kapsayıcının adını sorgulamak için az storage container list komutunu kullanıyoruz.
container="learningbash"
az storage container create --account-name $storageAccount --account-key $accountKey --name $container
az storage container list --account-name $storageAccount --account-key $accountKey --query [].name
Kapsayıcıya veri yükleme
Aşağıdaki betik, for döngüsü kullanarak üç örnek dosya oluşturur.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
Aşağıdaki betik, blobları depolama kapsayıcısına yüklemek için az storage blob upload-batch komutunu kullanır.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
Aşağıdaki betik, kapsayıcıdaki blobları listelemek için az storage blob list komutunu kullanır.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
Aşağıdaki betik, depolama kapsayıcısında toplam baytları görüntüler.
bytes=`az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[*].[properties.contentLength]" \
--output tsv | paste -s -d+ | bc`
echo "Total bytes in container: $bytes"
echo $bytes
Döngüleri kullanarak çok sayıda kapsayıcı oluşturma
Ardından, döngü yazmanın birkaç yolunu gösteren bir döngü kullanarak birden çok kapsayıcı oluşturacağız.
for i in `seq 1 4`; do
az storage container create --account-name $storageAccount --account-key $accountKey --name learnbash-$i
done
for value in {5..8}
for (( i=5; i<10; i++));
do
az storage container create --account-name $storageAccount --account-key $accountKey --name learnbash-$i
done
az storage container list --account-name $storageAccount --account-key $accountKey --query [].name
Ortam değişkenlerini tanımlamak için EXPORT kullanma
Önceki depolama kapsayıcısı betiklerinde her komutla hesap adını ve hesap anahtarını belirttik. Bunun yerine, kimlik doğrulama kimlik bilgilerinizi ilgili ortam değişkenlerini kullanarak depolayabilirsiniz: AZURE_STORAGE_ACCOUNT
ve AZURE_STORAGE_KEY
. Bu eylemi gerçekleştirmek için EXPORT komutunu kullanın.
export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.
Aşağıdaki betik bir meta veri dizesi oluşturur ve ardından ortam değişkenlerini kullanarak kapsayıcıyı bu dizeyle güncelleştirmek için az storage container metadata update komutunu kullanır.
metadata="key=value pie=delicious" # Define metadata
az storage container metadata update \
--name $container \
--metadata $metadata # Update the metadata
az storage container metadata show \
--name $containerName # Show the metadata
Aşağıdaki komut, az storage container delete komutunu kullanarak tek bir adlandırılmış kapsayıcıyı ve ardından döngüdeki birden çok kapsayıcıyı siler.
az storage container delete \
--name $container
Belirli bir ön ek içeren kapsayıcıların listesini alın ve sonuçları bir değişkende depolayın.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Bağımsız değişkenini kullanarak --prefix
döngüdeki kapsayıcıların listesini silin.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Hata işleme
Komut sıfır olmayan bir durum döndürürse betiklerden hemen çıkmak için aşağıdaki komutu çalıştırın:
set -e
Kabuk seçeneklerini ayarlama hakkında daha fazla bilgi ve diğer yardım için aşağıdaki komutları çalıştırın:
help set
help help
Kaynakları temizleme
Bu makaleyi tamamladıktan sonra kaynak grubunu ve içindeki tüm kaynakları silin. Bağımsız değişkenini --no-wait
kullanın.
if [ $(az group exists --name $resourceGroup) = true ]; then
az group delete --name $resourceGroup -y --no-wait
else
echo The $resourceGroup resource group does not exist
fi