Bash ortamında Azure CLI'yi kullanma

Azure CLI başvuru komutları birkaç farklı kabuk ortamında yürütülebilir, ancak Microsoft Docs öncelikli olarak Bash ortamını kullanır. Bash'i ve Azure CLI'yı da yeni kullanıyorsanız, bu makale öğrenme yolculuğunuza başlamak için harika bir yerdir. Bash ortamında Azure CLI'yi kolayca kullanmayı öğrenmek için öğreticide yaptığınız gibi bu makaleyi inceleyin.

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ılmış veya genelleştirilmiştir.

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 sildiğiniz bir nesne silme işlemi tamamlanana kadar Azure'da mevcut olduğundan oluşabilir.

$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 . 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ığınızda 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

Ayrıca bkz.