Come usare l'interfaccia della riga di comando di Azure in un linguaggio di scripting Bash
I comandi di riferimento dell'interfaccia della riga di comando di Azure possono essere eseguiti in diversi linguaggi di scripting. Se non si ha familiarità con Bash e l'interfaccia della riga di comando di Azure, questo articolo è un ottimo punto di partenza per iniziare il percorso di apprendimento. Per informazioni su come usare l'interfaccia della riga di comando di Azure in un linguaggio di scripting Bash con facilità, vedere questo articolo.
In questo articolo vengono illustrate le operazioni seguenti:
- Risultati delle query come dizionari o matrici JSON
- Formattare l'output come JSON, tabella o TSV
- Eseguire query, filtrare e formattare valori singoli e multipli
- Usare la sintassi if/exists/then e case
- Usare per i cicli
- Usare comandi grep, sed, incolla e bc
- Popolare e usare le variabili di ambiente e della shell
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
Avvio di Bash
Avviare Bash usando Azure Cloud Shell o un'installazione locale dell'interfaccia della riga di comando di Azure. Questo articolo presuppone che si stia eseguendo Bash usando Azure Cloud Shell o eseguendo l'interfaccia della riga di comando di Azure in locale in un contenitore Docker.
Esecuzione di query sui risultati del dizionario
Un comando che restituisce sempre solo un singolo oggetto restituisce un dizionario JSON. I dizionari sono oggetti non ordinati a cui si accede con chiavi. Per questo articolo, si inizierà eseguendo una query sull'oggetto Account usando il comando Account Show .
az account show
az account show --output json # JSON is the default format
L'output del dizionario JSON seguente contiene alcuni campi omessi per brevità e le informazioni di identificazione vengono rimosse.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
Formattazione dell'output come YAML
Usare l'argomento --output yaml
(o -o yaml
) per formattare l'output in formato yaml , un formato di serializzazione dei dati in testo normale. YAML tende a essere più facile da leggere rispetto a JSON, a cui può comunque essere eseguito facilmente il mapping. Alcune applicazioni e alcuni comandi dell'interfaccia della riga di comando accettano YAML come input di configurazione invece di JSON.
az account show --output yaml
Per altre informazioni sulla formattazione dell'output come yaml, vedere Formato di output YAML.
Formattazione dell'output come tabella
Usare l'argomento --output table
(o -o table
) per formattare l'output come tabella ASCII. Gli oggetti annidati non sono inclusi nell'output della tabella, ma possono comunque essere filtrati come parte di una query.
az account show --output table
Per altre informazioni sulla formattazione dell'output come tabella, vedere Formato di output tabella.
Esecuzione di query e formattazione di singoli valori e valori annidati
Le query seguenti illustrano l'esecuzione di query su singoli valori, inclusi i valori annidati in un output del dizionario JSON. La query finale in questo set illustra la formattazione dell'output usando l'argomento -o tsv
. Questo argomento restituisce i risultati come valori delimitati da tabulazioni e righe nuove. Questa azione è utile per rimuovere le virgolette nel valore restituito, utile per utilizzare l'output in altri comandi e strumenti che devono elaborare il testo in qualche formato (come illustrato più avanti in questo articolo).
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
Esecuzione di query e formattazione di proprietà da matrici
La query seguente illustra come ottenere proprietà in una matrice JSON. Ottenere le proprietà della sottoscrizione, visualizzate come tabella delle sottoscrizioni.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Questa query restituisce risultati simili a:
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
Esecuzione di query e formattazione di più valori, inclusi i valori annidati
Per ottenere più di una proprietà, inserire le espressioni tra parentesi quadre [ ] (un elenco a selezione multipla) come elenco delimitato da virgole. Le query seguenti illustrano l'esecuzione di query su più valori in un output del dizionario JSON, usando più formati di 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
Per altre informazioni sulla restituzione di più valori, vedere Ottenere più valori.
Ridenominazione delle proprietà in una query
Le query seguenti illustrano l'uso dell'operatore { } (hash multiselect) per ottenere un dizionario anziché una matrice quando si eseguono query per più valori. Illustra anche la ridenominazione delle proprietà nel risultato della query.
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
Per altre informazioni sulla ridenominazione delle proprietà in una query, vedere Rinominare le proprietà in una query.
Esecuzione di query su valori booleani
Si presuppone che i valori booleani siano true, quindi la "[?isDefault]"
sintassi della query per il az account list
comando restituisce la sottoscrizione predefinita corrente. Per ottenere i valori false, è necessario usare un carattere di escape, ad esempio \
.
Le query seguenti illustrano l'esecuzione di query su tutti gli account in una sottoscrizione, restituendo potenzialmente una matrice JSON se sono presenti più sottoscrizioni per un determinato account e quindi eseguendo query su quale account è la sottoscrizione predefinita. Viene inoltre illustrata l'esecuzione di query per gli account che non sono la sottoscrizione predefinita. Queste query si basano su ciò che si è appreso in precedenza per filtrare e formattare i risultati. Infine, la query finale illustra l'archiviazione dei risultati della query in una variabile.
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
- Per altre informazioni sull'applicazione di filtri alle matrici e sull'esecuzione di query su valori booleani, vedere Filtrare matrici con espressioni booleane.
- Per altre informazioni sull'uso delle variabili, vedere Come usare le variabili.
- Per altre informazioni sull'uso delle sottoscrizioni, vedere Gestione delle sottoscrizioni.
Creazione di oggetti tramite variabili e casualizzazione
Impostazione di un valore casuale da usare nei comandi successivi
L'impostazione e l'uso di un valore casuale da usare nelle variabili consentono di eseguire script più volte senza conflitti di denominazione. I conflitti di denominazione si verificano perché un valore deve essere univoco nel servizio o perché un oggetto eliminato esiste ancora in Azure fino al completamento del processo di eliminazione.
$RANDOM
è una funzione bash (non una costante) che restituisce un intero con segno casuale a 16 bit (da 0 a 32767). Il let
comando è un comando Bash predefinito per valutare le espressioni aritmetiche.
Usando il comando seguente viene creato un valore sufficientemente univoco per la maggior parte degli scopi.
let "randomIdentifier=$RANDOM*$RANDOM"
Utilizzo di spazi e virgolette
Gli spazi vengono usati per separare comandi, opzioni e argomenti. Usare i segni di virgolette per indicare alla shell Bash di ignorare tutti i caratteri speciali, di cui uno spazio vuoto è un carattere speciale. Quando la shell Bash vede il primo segno di virgolette, ignora i caratteri speciali fino al segno di virgolette di chiusura. Tuttavia, a volte si vuole che la shell Bash analizzi determinati caratteri speciali, ad esempio segni di dollaro, virgolette indietro e barre rovesciate. Per questo scenario, usare virgolette doppie.
I comandi seguenti usano il comando az group create per illustrare l'uso di virgolette singole e doppie. Questi comandi vengono usati per gestire gli spazi e valutare i caratteri speciali quando si usano variabili e si crea un oggetto.
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
Nell'output del dizionario JSON esaminare le proprietà del gruppo di risorse creato.
Utilizzo di If Then Else per determinare se la variabile è null
Per valutare le stringhe, usare !=
e per valutare i numeri usare -ne
. L'istruzione If Then Else seguente valuta se la variabile $resourceGroup è stata impostata. In caso affermativo, restituisce il valore della variabile. In caso contrario, imposta la variabile .
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Utilizzo di If Then per creare o eliminare un gruppo di risorse
Lo script seguente crea un nuovo gruppo di risorse solo se non esiste già uno con il nome specificato.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
Lo script seguente elimina un gruppo di risorse nuovo esistente se ne esiste già uno con il nome specificato. È possibile usare l'argomento --no-wait
per restituire il controllo senza attendere il completamento del comando. Tuttavia, per questo articolo, si vuole attendere che il gruppo di risorse venga eliminato prima di continuare. Per altre informazioni sulle operazioni asincrone, vedere Suggerimenti per l'uso corretto dell'interfaccia della riga di comando di Azure - Operazioni asincrone.
Viene illustrato l'uso dell'argomento --no-wait
alla fine di questo articolo.
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
Uso di Grep per determinare se esiste un gruppo di risorse e creare il gruppo di risorse in caso contrario
Il comando seguente invia tramite pipe l'output del az group list
comando al grep
comando . Se il gruppo di risorse specificato non esiste, il comando crea il gruppo di risorse usando le variabili definite in precedenza.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Uso dell'istruzione CASE per determinare se esiste un gruppo di risorse e creare il gruppo di risorse se non esiste
L'istruzione CASE seguente crea un nuovo gruppo di risorse solo se non esiste già uno con il nome specificato. Se esiste uno con il nome specificato, l'istruzione CASE restituisce che il gruppo di risorse esiste.
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
Uso di cicli for ed esecuzione di query su matrici
In questa sezione dell'articolo viene creato un account di archiviazione e quindi viene usato per i cicli per creare BLOB e contenitori. Viene anche illustrata l'esecuzione di query su matrici JSON e l'uso delle variabili di ambiente.
Creare un account di archiviazione
Il comando seguente usa il comando az storage account create per creare un account di archiviazione usato durante la creazione di contenitori di archiviazione.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Ottenere le chiavi dell'account di archiviazione
I comandi seguenti usano il comando az storage account keys list per restituire i valori di chiave dell'account di archiviazione. Si archivia quindi un valore di chiave in una variabile da usare durante la creazione di contenitori di archiviazione.
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
Creare un contenitore di archiviazione
Per iniziare, usare il comando az storage container create per creare un singolo contenitore di archiviazione e quindi usare az storage container list per eseguire una query sul nome del contenitore creato.
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
Caricare i dati nel contenitore
Lo script seguente crea tre file di esempio usando un ciclo for.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
Lo script seguente usa il comando az storage blob upload-batch per caricare i BLOB nel contenitore di archiviazione.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
Lo script seguente usa il comando az storage blob list per elencare i BLOB nel contenitore.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
Nello script seguente vengono visualizzati i byte totali nel contenitore di archiviazione.
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
Creare molti contenitori usando cicli
Successivamente, si creano più contenitori usando un ciclo che illustra un paio di modi per scrivere il ciclo.
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
Usare EXPORT per definire le variabili di ambiente
Negli script del contenitore di archiviazione precedenti è stato specificato il nome dell'account e la chiave dell'account con ogni comando. È invece possibile archiviare le credenziali di autenticazione usando le variabili di ambiente corrispondenti: AZURE_STORAGE_ACCOUNT
e AZURE_STORAGE_KEY
. Per eseguire questa azione, utilizzare EXPORT.
export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.
Lo script seguente crea una stringa di metadati e quindi usa il comando az storage container metadata update per aggiornare un contenitore con tale stringa, usando di nuovo le variabili di ambiente.
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
Il comando seguente usa il comando az storage container delete per eliminare un singolo contenitore denominato e quindi eliminare più contenitori in un ciclo.
az storage container delete \
--name $container
Ottenere un elenco di contenitori contenenti un prefisso specifico e archiviare i risultati in una variabile.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Eliminare l'elenco di contenitori in un ciclo usando l'argomento --prefix
.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Gestione degli errori
Per uscire immediatamente da uno script se un comando restituisce uno stato diverso da zero, eseguire il comando seguente:
set -e
Per altre informazioni sull'impostazione delle opzioni della shell e altre informazioni, eseguire i comandi seguenti:
help set
help help
Pulire le risorse
Dopo aver completato questo articolo, eliminare il gruppo di risorse e tutte le risorse al suo interno. Usare l'argomento --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
Vedi anche
- Esercitazione: Informazioni sull'uso dell'interfaccia della riga di comando di Azure
- Come usare correttamente l'interfaccia della riga di comando di Azure
- Come eseguire query nell'output dei comandi dell'interfaccia della riga di comando di Azure
- Trovare esempi dell'interfaccia della riga di comando di Azure e articoli pubblicati