Pelajari perbedaan sintaks Azure CLI dalam Bash, PowerShell, dan Cmd

Perintah Azure CLI dapat dijalankan di lingkungan bash, PowerShell, dan shell perintah (Cmd) Windows. Namun, ada perbedaan pembuatan skrip subtile. Dalam langkah tutorial ini, pelajari cara membuat Akun Azure Storage pertama Anda dan memformat nilai parameter untuk ketiga lingkungan.

Prasyarat

  • Anda menyelesaikan prasyarat untuk menyiapkan lingkungan Anda.
  • Anda memiliki akses ke grup sumber daya dengan contributor izin atau lebih tinggi di tingkat grup sumber daya.

Waspadai karakter kelanjutan baris

Sebagian besar dokumentasi Azure CLI ditulis dan diuji di Bash menggunakan Azure Cloud Shell. Salah satu hal pertama yang perlu diingat saat menyalin sintaks Azure CLI adalah memverifikasi karakter kelanjutan baris untuk lingkungan yang Anda pilih karena tidak dapat dipertukarkan.

Lingkungan Karakter kelanjutan baris
Bash Garis miring terbelakang (\)
PowerShell Backtick (`)
Cmd Wortel (^)

Tip

Tombol Salin di sudut kanan atas blok kode Azure CLI menghapus garis miring terbelakang (\) dan backtick (`) menurut desain. Jika Anda ingin menyalin blok kode yang diformat, gunakan keyboard atau mouse Anda untuk memilih dan menyalin contoh.

Memahami perbedaan sintaksis saat menggunakan variabel

Sintaks untuk menggunakan variabel sedikit bervariasi di antara lingkungan. Berikut adalah perbandingan:

Gunakan huruf besar Bash PowerShell Cmd
Buat variabel variableName=varValue $variableName="varValue" set variableName=varValue
Gunakan variabel sebagai nilai parameter variableName $variableName %variableName%
Gunakan variabel dalam --query parameter '$variableName' '$variableName' '$variableName'

Ada beberapa cara berbeda untuk mengembalikan informasi variabel ke layar konsol Anda, tetapi echo berfungsi dalam sebagian besar keadaan. Berikut adalah perbandingan:

  • Bash: $varResourceGroup gema
  • PowerShell: echo $varResourceGroup
  • Cmd: gema %varResourceGroup%

Di langkah ketiga, Isi variabel untuk digunakan dalam skrip, Anda bekerja melalui contoh mendalam sintaks variabel.

Pelajari tentang mengutip perbedaan antar lingkungan

Setiap parameter Azure CLI adalah string. Namun, setiap lingkungan memiliki aturan sendiri untuk menangani tanda kutip tunggal dan ganda, spasi, dan nilai parameter.

Nilai untai (karakter) Azure CLI PowerShell Cmd
Teks 'teks' atau "teks" 'teks' atau "teks" "teks"
Angka \'50\' ''50'' '50'
Boolean \'true\' ''false'' 'true'
Tanggal '2021-11-15' '2021-11-15' '2021-11-15'
JSON '{"key":"value"}' atau "{"key":"value"}" '{"key":"value"}' "{"key":"value"}"

Banyak parameter Azure CLI menerima daftar nilai yang dipisahkan spasi. Ini berdampak pada kutipan.

  • Daftar yang dipisahkan spasi yang tidak dikutip: --parameterName firstValue secondValue
  • Daftar yang dipisahkan spasi yang dikutip: --parameterName "firstValue" "secondValue"
  • Nilai yang berisi spasi: --parameterName "value1a value1b" "value2a value2b" "value3"

Jika Anda tidak yakin bagaimana string Anda akan dievaluasi oleh lingkungan Anda, kembalikan nilai string ke konsol Anda atau gunakan --debug seperti yang dijelaskan dalam perintah referensi Debug Azure CLI.

Membuat akun penyimpanan untuk menerapkan apa yang telah Anda pelajari

Sisa langkah tutorial ini menunjukkan aturan kutipan dalam perintah Azure CLI, dan menggunakan grup sumber daya yang dibuat di Menyiapkan lingkungan Anda untuk Azure CLI. Ganti <msdocs-tutorial-rg-00000000> dengan nama grup sumber daya Anda.

Buat akun penyimpanan Azure untuk digunakan dalam tutorial ini. Contoh ini menetapkan ID acak ke nama akun penyimpanan, tetapi jika Anda ingin menggunakan nama yang berbeda, lihat Gambaran umum akun penyimpanan untuk aturan nama akun penyimpanan.

Contoh skrip berikutnya ini menunjukkan sintaks khusus lingkungan untuk hal berikut:

  • Kelanjutan baris
  • Penggunaan variabel
  • Pengidentifikasi acak
  • perintah echo
# 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 mengembalikan lebih dari 100 baris JSON sebagai output saat akun penyimpanan baru dibuat. Output kamus JSON berikut memiliki bidang yang dihilangkan untuk brevity.

{
"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"
}

Membuat tag untuk mempraktikkan perbedaan kutipan

Dengan menggunakan pembaruan akun penyimpanan az, tambahkan tag untuk membantu Anda mengidentifikasi akun penyimpanan Anda dan mempelajari tentang perbedaan kutipan. Contoh skrip ini menunjukkan sintaks khusus lingkungan untuk hal berikut:

  • Nilai yang berisi spasi
  • Mengutip spasi kosong
  • Pelepasan karakter khusus
  • Menggunakan variabel

Parameter --tags menerima daftar pasangan kunci:nilai yang dipisahkan spasi. Ganti <msdocs-tutorial-rg-00000000> dengan nama grup sumber daya Anda dan <msdocssa00000000> dengan nama akun penyimpanan Azure Anda.

# 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"

Jika Anda tidak ingin menimpa tag sebelumnya saat Anda bekerja melalui langkah tutorial ini, gunakan perintah az tag update mengatur --operation parameter ke merge.

# 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

Membandingkan lebih banyak skrip khusus lingkungan

Lihat lebih dalam perbedaan skrip ini. Contoh-contoh ini menunjukkan perbedaan kutipan untuk hal berikut:

  • Meneruskan string JSON sebagai nilai parameter
  • Memfilter hasil dengan --query parameter
    • Angka
    • Nilai Boolean
    • Tanggal

Contoh parameter yang berisi string JSON. Skrip ini diberikan untuk referensi di masa mendatang karena kami tidak bekerja dengan az rest dalam tutorial ini.

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}}}'

Contoh pemfilteran untuk nilai numerik. Kecuali Anda memiliki VM dalam langganan Anda saat ini, contoh ini diberikan untuk referensi di masa mendatang.

az vm list --resource-group <myResourceGroup> \
           --query "[?storageProfile.osDisk.diskSizeGb >=\`50\`].{Name:name, admin:osProfile.adminUsername, DiskSize:storageProfile.osDisk.diskSizeGb}" \
           --output table

Contoh pemfilteran nilai boolean menggunakan akun penyimpanan yang dibuat dalam tutorial ini.

az storage account list --resource-group <msdocs-tutorial-rg-00000000> \
    --query "[?allowBlobPublicAccess == \`true\`].id"

Contoh pemfilteran tanggal menggunakan akun penyimpanan yang dibuat dalam tutorial ini.

# 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}"

Men-debug perintah referensi Azure CLI

Gunakan --debug parameter

Azure CLI menawarkan --debug parameter yang dapat digunakan dengan perintah apa pun. Output debug sangat luas, tetapi memberi Anda informasi lebih lanjut tentang kesalahan eksekusi. Gunakan perintah Bash clear untuk menghapus output konsol antar pengujian.

Contoh-contoh ini mengungkapkan argumen aktual yang diterima oleh Azure CLI dalam sintaksis Python.

Contoh ini benar di Bash dan PowerShell.

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

Lihat apa yang ditafsirkan oleh Azure CLI di Command arguments baris output.

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

Contoh kedua ini juga benar. Gunakan perintah Bash clear untuk menghapus output konsol antar pengujian.

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

Dua contoh berikutnya ini salah karena tanda kutip dan spasi ditafsirkan oleh Bash.

Format yang salah Masalah Output konsol
az {"key":"value"} --debug Tanda kutip tunggal atau karakter escape hilang Argumen perintah: ['{key:value}', '--debug']
az {"key": "value"} --debug Tanda kutip tunggal atau karakter escape hilang, dan berisi spasi tambahan Argumen perintah: ['{key:', 'value}', '--debug']

Gunakan echo perintah

Meskipun --debug memberi tahu Anda dengan tepat apa yang ditafsirkan oleh Azure CLI, opsi kedua adalah mengembalikan nilai ekspresi ke konsol Anda. Metode ini berguna saat memverifikasi hasil --query yang tercakup secara rinci dalam Mengisi variabel untuk digunakan dalam skrip.

strExpression='{"key":"value"}'
echo $strExpression
{"key":"value"}

Pemecahan Masalah

Berikut adalah kesalahan umum saat sintaks perintah referensi Azure CLI tidak ditulis dengan benar:

  • "Permintaan buruk ... {something} tidak valid" mungkin disebabkan oleh tanda kutip spasi, tanda kutip tunggal atau ganda, atau kurangnya tanda kutip.

  • "Token tak terduga..." terlihat ketika ada ruang atau kutipan tambahan.

  • Kesalahan "Nilai jmespath_type tidak valid" sering kali berasal dari kutipan yang --query salah dalam parameter.

  • "Referensi variabel tidak valid" diterima ketika string tidak diformat dengan benar sering karena penggabungan atau karakter escape yang hilang.

  • "Argumen yang tidak dikenali" sering disebabkan oleh karakter kelanjutan baris yang salah.

  • "Ekspresi hilang setelah operator unary" terlihat ketika karakter kelanjutan baris hilang.

Dapatkan detail selengkapnya

Apakah Anda ingin detail lebih lanjut tentang salah satu subjek yang tercakup dalam langkah tutorial ini? Gunakan tautan dalam tabel ini untuk mempelajari selengkapnya.

Subjek Pelajari Selengkapnya
Perbedaan pembuatan skrip Kutipan Bash
Kutipan PowerShell
Mengutip masalah dengan PowerShell
Tips baris perintah Windows
Parameter Menggunakan tanda kutip di parameter Azure CLI
Temukan contoh sintaks lainnya dari Bash, PowerShell, dan Cmd dalam Output perintah Kueri menggunakan JMESPath

Langkah Selanjutnya

Sekarang setelah Anda mempelajari cara menulis sintaks Azure CLI untuk Bash, PowerShell, dan Cmd, lanjutkan ke langkah berikutnya untuk mempelajari cara mengekstrak nilai ke variabel.