Bagikan melalui


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

Perintah Azure CLI dapat dijalankan dalam bahasa skrip bash, PowerShell, dan windows command shell (Cmd ). Namun, ada perbedaan pembuatan skrip subtile. 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 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 bahasa skrip yang Anda pilih karena tidak dapat dipertukarkan.

bahasa skrip 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 bahasa skrip. 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 antara bahasa skrip

Setiap parameter Azure CLI adalah string. Namun, setiap bahasa pembuatan skrip memiliki aturannya 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"
Number \'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"}' or "{'"key'"": '"value'"}" or "{""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 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 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 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

Catatan

Apakah Anda baru saja 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 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 sintaksis khusus bahasa pembuatan skrip 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 bahasa skrip

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 luas, 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 saat bekerja dengan perintah Azure CLI, Anda mengalami kesulitan memahami dan memperbaiki kesalahan eksekusi, --debug adalah jawaban Anda untuk melihat langkah-langkah yang dijalankan Azure CLI.

Berikut adalah sebagian kecil 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 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.

Untuk tips pemecahan masalah tambahan, 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.

Subjek Pelajari lebih lanjut
Perbedaan pembuatan skrip Mengutip perbedaan antara bahasa skrip
Aturan kutipan Bash
Aturan kutipan PowerShell
Pertimbangan untuk menjalankan Azure CLI dalam bahasa skrip 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
Pemecahan Masalah Pemecahan masalah perintah Azure CLI

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.