Bagikan melalui


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

Perintah Azure CLI dapat dijalankan dalam bahasa skrip shell perintah Bash, PowerShell, dan Windows (cmd). Namun, ada perbedaan penulisan skrip yang halus. Dalam langkah tutorial ini, pelajari cara membuat Akun Azure Storage pertama Anda dan memformat nilai parameter untuk ketiga bahasa skrip.

Prasyarat

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

Perhatikan 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 bahasa pembuatan skrip yang Anda pilih, karena tidak dapat dipertukarkan.

Bahasa pembuatan skrip Karakter lanjutan baris
Bash Garis miring terbelakang (\)
PowerShell Tanda Kutip Terbalik (`)
Cmd Caret (^)

Petunjuk / Saran

Tombol Salin di sudut kanan atas blok kode Azure CLI menghapus garis miring terbalik (\) dan tanda backtick (`) sesuai desain. Untuk 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 bahasa skrip. Berikut adalah perbandingan:

Skenario penggunaan Bash (sebuah bahasa shell dan bahasa perintah untuk Unix) PowerShell Cmd
Buat variabel variableName=varValue $variableName="varValue" tetapkan variableName=varValue
Gunakan variabel sebagai nilai parameter variabelNama $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: echo $varResourceGroup
  • PowerShell: echo $varResourceGroup
  • Cmd: gema %varResourceGroup%

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

Pelajari tentang mengutip perbedaan antara bahasa skrip

Setiap parameter Azure CLI adalah string. Namun, setiap bahasa pembuatan skrip memiliki aturannya sendiri untuk menangani kutipan tunggal dan ganda, spasi, dan nilai parameter.

Nilai string Azure CLI (antarmuka baris perintah Azure) PowerShell Cmd
Teks 'teks' atau "teks" 'teks' atau "teks" "teks"
Angka \'50\' ''50'' '50'
Boolean benar ''false'' benar
Tanggal 15/11/2021 15/11/2021 15/11/2021
JSON '{"key":"value"}' atau "{"key":"value"}" '{"key": "value"}' or "{`\"key`\": `\"value`\"}" or "{\"key\": \"value\"}" {"key":"value"}

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

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

Jika Anda tidak yakin bagaimana string Anda dievaluasi oleh bahasa skrip 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 Anda pelajari

Sisa langkah tutorial ini menunjukkan aturan kutipan dalam perintah Azure CLI, 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. Namun, jika Anda ingin menggunakan nama yang berbeda, lihat gambaran umum akun Penyimpanan untuk aturan nama akun penyimpanan.

Penting

Sebelum Anda dapat membuat akun penyimpanan, Microsoft.Storage penyedia sumber daya harus terdaftar di langganan Anda. Untuk mempelajari tentang mendaftarkan jenis sumber daya, lihat Mendaftarkan penyedia sumber daya.

Contoh skrip berikutnya ini menunjukkan sintaksis khusus bahasa pembuatan skrip 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

Nota

Apakah Anda menerima kesalahan "Langganan tidak ditemukan"? Kesalahan ini terjadi ketika Microsoft.Storage tidak terdaftar dalam langganan aktif. Untuk mendaftarkan penyedia sumber daya, lihat Penyedia dan jenis sumber daya Azure.

Azure CLI mengembalikan lebih dari 100 baris JSON sebagai output saat akun penyimpanan baru dibuat. Output kamus JSON berikut memiliki bidang yang dihilangkan untuk kejelasan.

{
"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 az storage account update, tambahkan tag untuk memudahkan identifikasi akun penyimpanan Anda serta mempelajari perbedaan dalam kutipan. Contoh skrip ini menunjukkan sintaksis khusus bahasa pembuatan skrip untuk hal berikut:

  • Nilai yang berisi spasi
  • Mengutip spasi kosong
  • Penghindaran 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 dengan mengatur parameter --operation 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 spesifik bahasa pemrograman

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

  • Mengirim string JSON sebagai nilai dari parameter
  • Memfilter hasil dengan --query parameter
    • Jumlah
    • 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}"

Debug perintah pada referensi Azure CLI

Menggunakan parameter pemecahan kesalahan

Azure CLI menawarkan --debug parameter yang dapat digunakan dengan perintah apa pun. Output debug mendetail, tetapi memberi Anda informasi termasuk yang berikut:

  • Argumen perintah (nilai parameter) seperti yang ditafsirkan oleh bahasa skrip Anda
  • Lokasi file log Anda
  • Detail panggilan API
  • Kesalahan eksekusi

Jika Anda mengalami kesulitan memahami dan memperbaiki kesalahan eksekusi saat bekerja dengan perintah Azure CLI, --debug adalah jawaban Anda untuk melihat langkah-langkah yang dijalankan Azure CLI.

Berikut adalah bagian dari output debug saat membuat akun penyimpanan:

 cli.knack.cli: Command arguments: ['storage', 'account', 'create', '--name', 'msdocssa00000000', '--resource-group', 'msdocs-rg-test', '--location', 'eastus', '--sku', 'Standard_RAGRS', '--kind', 'StorageV2', '--output', 'json', '--debug']
 ...
 cli.azure.cli.core.sdk.policies: Request URL: 'https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01'
cli.azure.cli.core.sdk.policies: Request method: 'POST'
cli.azure.cli.core.sdk.policies: Request headers:
cli.azure.cli.core.sdk.policies:     'Content-Type': 'application/json'
cli.azure.cli.core.sdk.policies:     'Content-Length': '73'
cli.azure.cli.core.sdk.policies:     'Accept': 'application/json'
cli.azure.cli.core.sdk.policies:     'x-ms-client-request-id': '00000000-0000-0000-0000-000000000000'
cli.azure.cli.core.sdk.policies:     'CommandName': 'storage account create'
cli.azure.cli.core.sdk.policies:     'ParameterSetName': '--name --resource-group --location --sku --kind --output --debug'
cli.azure.cli.core.sdk.policies:     'User-Agent': 'AZURECLI/2.61.0 (DEB) azsdk-python-core/1.28.0 Python/3.11.8 (Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.35)'
cli.azure.cli.core.sdk.policies:     'Authorization': '*****'
cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"name": "msdocssa00000000", "type": "Microsoft.Storage/storageAccounts"}
urllib3.connectionpool: Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool: https://management.azure.com:443 "POST /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2023-01-01 HTTP/1.1" 200 22
cli.azure.cli.core.sdk.policies: Response status: 200
...

Untuk tips pemecahan masalah selengkapnya, lihat Pemecahan Masalah Azure CLI.

Gunakan perintah echo

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

Penyelesaian Masalah

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

  • "Permintaan buruk ... {something} tidak valid" mungkin disebabkan oleh spasi, tanda kutip tunggal atau ganda, atau kurangnya tanda kutip.
  • Pesan kesalahan "Token tak terduga..." muncul ketika ada spasi tambahan atau tanda kutip.
  • Kesalahan "Nilai jmespath_type tidak valid" sering kali berasal dari kutipan yang salah pada parameter --query.
  • "Referensi variabel tidak valid" diterima ketika string tidak diformat dengan benar, sering kali karena penggabungan atau karakter escape yang hilang.
  • "Argumen yang tidak dikenali" sering kali disebabkan oleh salahnya penggunaan karakter lanjutan baris.
  • Pesan "Ekspresi hilang setelah operator unary" muncul ketika tanda kelanjutan baris hilang.

Untuk tips pemecahan masalah selengkapnya, lihat Pemecahan masalah perintah Azure CLI.

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.

Subyek Pelajari lebih lanjut
Perbedaan pembuatan skrip Mengutip perbedaan antara bahasa skrip
Aturan kutipan Bash
Aturan penulisan kutipan PowerShell
Pertimbangan untuk menjalankan Azure CLI dalam bahasa skrip PowerShell
Tips baris perintah Windows
Parameter-parameternya Menggunakan tanda kutip di parameter Azure CLI
Temukan contoh sintaks lainnya dari Bash, PowerShell, dan Cmd dalam Output perintah Kueri menggunakan JMESPath
Penyelesaian Masalah Pemecahan masalah perintah Azure CLI

Langkah Berikutnya

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.