Cara menggunakan Azure CLI dalam bahasa skrip Bash
Perintah referensi Azure CLI dapat dijalankan dalam beberapa bahasa skrip. Jika Anda baru menggunakan Bash dan juga Azure CLI, artikel ini merupakan tempat yang tepat untuk memulai perjalanan pembelajaran Anda. Bekerja melalui artikel ini seperti yang Anda lakukan tutorial untuk mempelajari cara menggunakan Azure CLI dalam bahasa skrip Bash dengan mudah.
Dalam artikel ini, Anda akan mempelajari cara:
- Mengkueri hasil sebagai array atau kamus JSON
- Memformat output sebagai JSON, tabel, atau TSV
- Mengkueri, memfilter, dan memformat satu dan beberapa nilai
- Menggunakan sintaks if/exists/then dan case
- Menggunakan perulangan for
- Menggunakan perintah grep, sed, paste, dan bc
- Mengisi dan menggunakan variabel shell dan lingkungan
Jika Anda tidak memiliki langganan Azure, buat akun gratis Azure sebelum memulai.
Memulai Bash
Mulai Bash menggunakan Azure Cloud Shell atau penginstalan lokal Azure CLI. Artikel ini mengasumsikan bahwa Anda menjalankan Bash baik menggunakan Azure Cloud Shell atau menjalankan Azure CLI secara lokal dalam kontainer docker.
Mengkueri hasil kamus
Perintah yang selalu hanya menampilkan satu objek yang menampilkan kamus JSON. Kamus adalah objek yang tidak berurutan yang diakses dengan kunci. Untuk artikel ini, kita akan mulai dengan mengkueri objek Akun menggunakan perintah Perlihatkan Akun.
az account show
az account show --output json # JSON is the default format
Output kamus JSON berikut memiliki beberapa bidang yang dihilangkan untuk brevity, dan informasi identifikasi dihapus.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
Memformat output sebagai YAML
Gunakan argumen --output yaml
(atau -o yaml
) untuk memformat output dalam format yaml, yaitu format serialisasi data teks biasa. YAML cenderung lebih mudah dibaca daripada JSON, dan dipetakan dengan mudah ke format tersebut. Beberapa aplikasi dan perintah CLI menggunakan YAML sebagai input konfigurasi, bukan JSON.
az account show --output yaml
Untuk informasi selengkapnya tentang memformat output sebagai yaml, lihat format output YAML.
Memformat output sebagai tabel
Gunakan argumen --output table
(atau -o table
) untuk memformat output sebagai tabel ASCII. Objek bersarang tidak disertakan dalam output tabel, namun masih dapat difilter sebagai bagian dari kueri.
az account show --output table
Untuk informasi selengkapnya tentang memformat output sebagai tabel, lihat Format output tabel.
Mengkueri dan memformat nilai tunggal dan nilai bertingkat
Kueri berikut memperlihatkan proses kueri nilai tunggal, termasuk nilai bertingkat dalam output kamus JSON. Kueri akhir dalam set ini memperlihatkan pemformatan output menggunakan argumen -o tsv
. Argumen ini menampilkan hasil sebagai nilai yang dipisahkan tab dan baris baru. Tindakan ini berguna untuk menghapus tanda kutip dalam nilai yang dikembalikan - yang berguna untuk menggunakan output ke perintah dan alat lain yang perlu memproses teks dalam beberapa formulir (seperti yang ditunjukkan nanti dalam artikel ini).
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
Mengkueri dan memformat properti dari array
Kueri berikut menunjukkan mendapatkan properti dalam array JSON. Dapatkan properti langganan, ditampilkan sebagai tabel langganan.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Kueri ini mengembalikan hasil yang mirip dengan:
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
Mengkueri dan memformat beberapa nilai, termasuk nilai bertingkat
Untuk mendapatkan lebih dari satu properti, tulis ekspresi dalam tanda kurung siku [ ] (daftar banyak pilihan) sebagai daftar yang dipisahkan koma. Kueri berikut memperlihatkan proses kueri beberapa nilai dalam output kamus JSON, menggunakan beberapa format output.
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
Untuk informasi selengkapnya tentang menampilkan beberapa nilai, lihat Mendapatkan beberapa nilai.
Mengganti nama properti dalam kueri
Kueri berikut memperlihatkan penggunaan operator { } (hash banyak pilihan) untuk mendapatkan kamus bukan array saat mengkueri beberapa nilai. Kueri ini juga memperlihatkan penggantian nama properti dalam hasil kueri.
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
Untuk informasi selengkapnya tentang mengganti nama properti dalam kueri, lihat Mengganti nama properti dalam kueri.
Mengkueri nilai boolean
Nilai Boolean diasumsikan benar, sehingga sintaks kueri "[?isDefault]"
untuk perintah az account list
menampilkan langganan default saat ini. Untuk mendapatkan nilai salah, Anda harus menggunakan karakter escape, seperti \
.
Kueri berikut menunjukkan kueri semua akun dalam langganan, berpotensi mengembalikan array JSON jika ada beberapa langganan untuk akun tertentu, lalu mengkueri akun mana yang merupakan langganan default. Ini juga menunjukkan kueri untuk akun yang bukan langganan default. Kueri ini dibangun berdasarkan apa yang Anda pelajari sebelumnya untuk memfilter dan memformat hasilnya. Terakhir, kueri akhir memperlihatkan proses penyimpanan hasil kueri dalam variabel.
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
- Untuk informasi selengkapnya tentang memfilter array dan mengkueri nilai boolean, lihat Memfilter array dengan ekspresi boolean.
- Untuk informasi selengkapnya tentang menggunakan variabel, lihat Cara menggunakan variabel.
- Untuk informasi selengkapnya tentang menggunakan langganan, lihat Mengelola langganan.
Membuat objek menggunakan variabel dan pengacakan
Mengatur nilai acak untuk digunakan dalam perintah berikutnya
Mengatur dan menggunakan nilai acak untuk digunakan dalam variabel akan memungkinkan Anda menjalankan skrip beberapa kali tanpa konflik penamaan. Konflik penamaan terjadi karena nilai harus unik di seluruh layanan, atau karena objek yang Anda hapus masih ada dalam Azure hingga proses penghapusan selesai.
$RANDOM
adalah fungsi bash (bukan konstanta) yang mengembalikan bilangan bulat 16-bit acak yang ditandatangani (dari 0 hingga 32767). Perintah let
adalah perintah Bash bawaan untuk mengevaluasi ekspresi aritmetika.
Menggunakan perintah berikut akan membuat nilai yang cukup unik untuk sebagian besar tujuan.
let "randomIdentifier=$RANDOM*$RANDOM"
Menggunakan spasi dan tanda kutip
Spasi digunakan untuk memisahkan perintah, opsi, dan argumen. Gunakan tanda kutip guna memberi tahu shell Bash untuk mengabaikan semua karakter khusus, misalnya spasi kosong adalah karakter khusus. Saat melihat tanda kutip pertama, shell Bash mengabaikan karakter khusus hingga tanda kutip penutup. Namun, terkadang Anda ingin shell Bash mengurai karakter khusus tertentu, seperti tanda dolar, tanda kutip terbalik, dan garis miring terbalik. Untuk skenario ini, gunakan tanda kutip ganda.
Perintah berikut menggunakan perintah az group create untuk mengilustrasikan penggunaan tanda kutip tunggal dan ganda. Perintah ini digunakan untuk menangani spasi dan mengevaluasi karakter khusus saat bekerja dengan variabel dan membuat objek.
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
Dalam output kamus JSON, tinjau properti grup sumber daya yang dibuat.
Menggunakan If Then Else untuk menentukan apakah variabel null
Untuk mengevaluasi string, gunakan !=
dan untuk mengevaluasi angka, gunakan -ne
. Pernyataan If Then Else berikut mengevaluasi apakah variabel $resourceGroup telah diatur. Jika ya, nilai variabel akan ditampilkan. Jika tidak, variabel akan diatur.
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Menggunakan If Then untuk membuat atau menghapus grup sumber daya
Skrip berikut membuat grup sumber daya baru hanya jika satu dengan nama yang ditentukan belum ada.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
Skrip berikut menghapus grup sumber daya baru yang sudah ada jika sudah ada grup sumber daya dengan nama yang ditentukan. Anda dapat menggunakan argumen --no-wait
untuk menampilkan kontrol tanpa menunggu perintah selesai. Namun, untuk artikel ini, kami ingin menunggu grup sumber daya dihapus sebelum melanjutkan. Untuk informasi selengkapnya tentang operasi asinkron, lihat Tips untuk menggunakan Azure CLI dengan sukses - Operasi asinkron.
Kami menunjukkan penggunaan --no-wait
argumen di akhir artikel ini.
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
Menggunakan Grep untuk menentukan apakah grup sumber daya ada, dan membuat grup sumber daya jika tidak
Perintah berikut menyalurkan output perintah az group list
ke perintah grep
. Jika grup sumber daya yang ditentukan tidak ada, perintah membuat grup sumber daya menggunakan variabel yang ditentukan sebelumnya.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Menggunakan pernyataan CASE untuk menentukan apakah grup sumber daya ada, dan buat grup sumber daya jika tidak
Pernyataan CASE berikut membuat grup sumber daya baru hanya jika satu dengan nama yang ditentukan belum ada. Jika ada grup sumber daya dengan nama yang ditentukan, pernyataan CASE akan menampilkan bahwa grup sumber daya ada.
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
Menggunakan perulangan for dan mengkueri array
Di bagian artikel ini, kami membuat akun penyimpanan lalu menggunakan untuk perulangan untuk membuat blob dan kontainer. Kami juga menunjukkan kueri array JSON dan bekerja dengan variabel lingkungan.
Membuat akun penyimpanan
Perintah berikut menggunakan perintah az storage account create untuk membuat akun penyimpanan yang kami gunakan saat membuat kontainer penyimpanan.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Mendapatkan kunci akun penyimpanan
Perintah berikut menggunakan perintah az storage account keys list untuk menampilkan nilai kunci akun penyimpanan. Kemudian, kita akan menyimpan nilai kunci dalam variabel untuk digunakan saat membuat kontainer penyimpanan.
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
Buat kontainer penyimpanan
Kita mulai dengan menggunakan az storage container create untuk membuat satu kontainer penyimpanan lalu menggunakan az storage container list untuk mengkueri nama kontainer yang dibuat.
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
Mengunggah data ke kontainer
Skrip berikut membuat tiga file sampel menggunakan perulangan for.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
Skrip berikut menggunakan perintah az storage blob upload-batch untuk mengunggah blob ke kontainer penyimpanan.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
Skrip berikut menggunakan perintah az storage blob list untuk membuat daftar blob di kontainer penyimpanan.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
Skrip berikut menampilkan total byte dalam kontainer penyimpanan.
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
Membuat banyak kontainer menggunakan perulangan
Selanjutnya, kami membuat beberapa kontainer menggunakan perulangan yang menunjukkan beberapa cara untuk menulis perulangan.
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
Menggunakan EXPORT untuk menentukan variabel lingkungan
Dalam skrip kontainer penyimpanan sebelumnya, kita menentukan nama akun dan kunci akun dengan setiap perintah. Sebagai gantinya, Anda dapat menyimpan kredensial autentikasi menggunakan variabel lingkungan yang sesuai: AZURE_STORAGE_ACCOUNT
dan AZURE_STORAGE_KEY
. Untuk melakukan tindakan ini, gunakan EKSPOR.
export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.
Skrip berikut membuat string metadata dan kemudian menggunakan perintah az storage container metadata update untuk memperbarui kontainer dengan string tersebut, tentunya menggunakan variabel lingkungan.
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
Perintah berikut menggunakan perintah az storage container delete untuk menghapus satu kontainer bernama dan kemudian menghapus beberapa kontainer dalam perulangan.
az storage container delete \
--name $container
Dapatkan daftar kontainer yang berisi awalan tertentu dan simpan hasil ke dalam variabel.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Hapus daftar kontainer dalam perulangan menggunakan argumen --prefix
.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Penanganan kesalahan
Untuk segera keluar dari skrip jika perintah mengembalikan status bukan nol, jalankan perintah berikut:
set -e
Untuk informasi selengkapnya tentang mengatur opsi shell dan bantuan lainnya, jalankan perintah berikut:
help set
help help
Membersihkan sumber daya
Setelah Anda menyelesaikan artikel ini, hapus grup sumber daya dan semua sumber daya di dalamnya. Gunakan argumen --no-wait
.
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