De Azure CLI gebruiken in een Bash-scripttaal
Azure CLI-referentieopdrachten kunnen in verschillende scripttalen worden uitgevoerd. Als u geen ervaring hebt met Bash en ook de Azure CLI, is dit artikel een uitstekende plek om uw leertraject te beginnen. Lees dit artikel op dezelfde wijze als in een zelfstudie voor meer informatie over het gebruik van de Azure CLI in een Bash-scripttaal.
In dit artikel leert u het volgende:
- Queryresultaten als JSON-woordenlijsten of matrices
- Uitvoer opmaken als JSON, tabel of TSV
- Eén en meerdere waarden opvragen, filteren en opmaken
- Gebruik als/bestaat/en de syntaxis van hoofdletters en kleine letters
- Gebruiken voor lussen
- Grep-, sed-, plak- en bc-opdrachten gebruiken
- Shell- en omgevingsvariabelen vullen en gebruiken
Als u geen Azure-abonnement hebt, maakt u een gratis Azure-account voordat u begint.
Bash starten
Start Bash met behulp van Azure Cloud Shell of een lokale installatie van de Azure CLI. In dit artikel wordt ervan uitgegaan dat u Bash uitvoert met behulp van Azure Cloud Shell of azure CLI lokaal uitvoert in een Docker-container.
Query's uitvoeren op woordenlijstresultaten
Een opdracht die altijd slechts één object retourneert, retourneert een JSON-woordenlijst. Woordenlijsten zijn niet-geordende objecten die worden geopend met sleutels. Voor dit artikel beginnen we met het uitvoeren van query's op het accountobject met behulp van de opdracht Account weergeven.
az account show
az account show --output json # JSON is the default format
De volgende uitvoer van de JSON-woordenlijst bevat enkele velden die zijn weggelaten om kort te zijn en de identificatiegegevens worden verwijderd.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
De uitvoer opmaken als YAML
Gebruik het --output yaml
argument (of -o yaml
) om de uitvoer in yaml-indeling op te maken, een serialisatie-indeling voor gegevens zonder opmaak. YAML is doorgaans gemakkelijker te lezen dan JSON en kan eenvoudig worden omgezet in die indeling. Sommige toepassingen en CLI-opdrachten gebruiken YAML als configuratie-invoer, in plaats van JSON.
az account show --output yaml
Zie de YAML-uitvoerindeling voor meer informatie over het opmaken van de uitvoer als yaml.
De uitvoer opmaken als een tabel
Gebruik het --output table
argument (of -o table
) om de uitvoer op te maken als een ASCII-tabel. Tabeluitvoer bevat geen geneste objecten, maar hierop kan wel worden gefilterd met behulp van een query.
az account show --output table
Zie de tabeluitvoerindeling voor meer informatie over het opmaken van de uitvoer als een tabel.
Enkelvoudige waarden en geneste waarden opvragen en opmaken
De volgende query's laten zien hoe u query's uitvoert op één waarde, inclusief geneste waarden in de uitvoer van een JSON-woordenlijst. De laatste query in deze set demonstreert het opmaken van de uitvoer met behulp van het -o tsv
argument. Dit argument retourneert de resultaten als door tabs en nieuwe regels gescheiden waarden. Deze actie is handig voor het verwijderen van aanhalingstekens in de geretourneerde waarde. Dit is handig om de uitvoer te gebruiken in andere opdrachten en hulpprogramma's die de tekst in een bepaalde vorm moeten verwerken (zoals verderop in dit artikel wordt weergegeven).
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
Eigenschappen van matrices opvragen en opmaken
In de volgende query ziet u hoe u eigenschappen ophaalt in een JSON-matrix. Abonnementseigenschappen ophalen, weergegeven als een tabel met abonnementen.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Deze query retourneert resultaten die vergelijkbaar zijn met:
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
Meerdere waarden opvragen en opmaken, inclusief geneste waarden
Als u meer dan één eigenschap wilt ophalen, plaatst u expressies tussen vierkante haken [ ] (een lijst met meerdere selecties) als een door komma's gescheiden lijst. De volgende query's laten zien hoe u query's uitvoert op meerdere waarden in de uitvoer van een JSON-woordenlijst, met behulp van meerdere uitvoerindelingen.
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
Zie Meerdere waarden ophalen voor meer informatie over het retourneren van meerdere waarden.
De naam van eigenschappen in een query wijzigen
In de volgende query's wordt het gebruik van de operator {} (multiselect hash) gedemonstreert om een woordenlijst op te halen in plaats van een matrix bij het uitvoeren van query's op meerdere waarden. Ook wordt de naam van eigenschappen in het queryresultaat gedemonstreert.
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
Booleaanse waarden opvragen
Booleaanse waarden worden verondersteld waar te zijn, dus de "[?isDefault]"
querysyntaxis voor de az account list
opdracht retourneert het huidige standaardabonnement. Als u de valse waarden wilt ophalen, moet u een escape-teken gebruiken, zoals \
.
De volgende query's laten zien hoe u alle accounts in een abonnement opvraagt, mogelijk een JSON-matrix retourneert als er meerdere abonnementen voor een bepaald account zijn en vervolgens een query uitvoert op welk account het standaardabonnement is. Ook ziet u hoe u query's uitvoert voor de accounts die niet het standaardabonnement zijn. Deze query's zijn gebaseerd op wat u eerder hebt geleerd om de resultaten te filteren en op te maken. Ten slotte laat de uiteindelijke query zien hoe de queryresultaten in een variabele worden opgeslagen.
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
- Zie Filtermatrices met booleaanse expressies voor meer informatie over het filteren van matrices en het opvragen van booleaanse waarden.
- Zie Variabelen gebruiken voor meer informatie over het gebruik van variabelen.
- Zie Abonnementen beheren voor meer informatie over het werken met abonnementen.
Objecten maken met behulp van variabelen en randomisatie
Een willekeurige waarde instellen voor gebruik in volgende opdrachten
Als u een willekeurige waarde instelt en gebruikt voor gebruik in variabelen, kunt u scripts meerdere keren uitvoeren zonder naamconflicten. Naamconflicten treden op omdat een waarde uniek moet zijn binnen de service of omdat een object dat u hebt verwijderd, nog steeds bestaat in Azure totdat het verwijderingsproces is voltooid.
$RANDOM
is een bash-functie (geen constante) die een willekeurig 16-bits geheel getal retourneert (van 0 tot en met 32767). De let
opdracht is een ingebouwde Bash-opdracht om rekenkundige expressies te evalueren.
Met de volgende opdracht maakt u een voldoende unieke waarde voor de meeste doeleinden.
let "randomIdentifier=$RANDOM*$RANDOM"
Werken met spaties en aanhalingstekens
Spaties worden gebruikt voor het scheiden van opdrachten, opties en argumenten. Gebruik aanhalingstekens om de Bash-shell te laten weten dat alle speciale tekens moeten worden genegeerd, waarvan een witruimte een speciaal teken is. Wanneer de Bash-shell het eerste aanhalingsteken ziet, worden speciale tekens genegeerd totdat het aanhalingsteken wordt gesloten. Soms wilt u echter dat de Bash-shell bepaalde speciale tekens parseert, zoals dollartekens, aanhalingstekens en backslashes. Gebruik voor dit scenario dubbele aanhalingstekens.
De volgende opdrachten gebruiken de opdracht az group create om het gebruik van enkele en dubbele aanhalingstekens te illustreren. Deze opdrachten worden gebruikt om spaties te verwerken en speciale tekens te evalueren bij het werken met variabelen en het maken van een object.
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
Controleer in de uitvoer van de JSON-woordenlijst de eigenschappen van de resourcegroep die is gemaakt.
If Then Else gebruiken om te bepalen of de variabele null is
Als u tekenreeksen wilt evalueren, gebruikt !=
en evalueert u getallen.-ne
De volgende If Then Else-instructie evalueert of de $resourceGroup variabele is ingesteld. Zo ja, dan wordt de waarde van de variabele geretourneerd. Als dat niet het gaat, wordt de variabele ingesteld.
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Als u vervolgens een resourcegroep wilt maken of verwijderen
Met het volgende script wordt alleen een nieuwe resourcegroep gemaakt als er nog geen resourcegroep met de opgegeven naam bestaat.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
Met het volgende script wordt een bestaande nieuwe resourcegroep verwijderd als er al een met de opgegeven naam bestaat. U kunt het argument gebruiken om het --no-wait
besturingselement te retourneren zonder te wachten tot de opdracht is voltooid. Voor dit artikel willen we echter wachten totdat de resourcegroep is verwijderd voordat u doorgaat. Zie Tips voor het gebruik van de Azure CLI - Asynchrone bewerkingen voor meer informatie over asynchrone bewerkingen.
We demonstreren het gebruik van het --no-wait
argument aan het einde van dit artikel.
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
Grep gebruiken om te bepalen of er een resourcegroep bestaat en de resourcegroep te maken als deze niet bestaat
Met de volgende opdracht wordt de uitvoer van de az group list
opdracht naar de grep
opdracht uitgevoerd. Als de opgegeven resourcegroep niet bestaat, maakt de opdracht de resourcegroep met behulp van de eerder gedefinieerde variabelen.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Case-instructie gebruiken om te bepalen of er een resourcegroep bestaat en de resourcegroep te maken als dit niet het geval is
Met de volgende CASE-instructie wordt alleen een nieuwe resourcegroep gemaakt als er nog geen resourcegroep met de opgegeven naam bestaat. Als er een met de opgegeven naam bestaat, echot de CASE-instructie dat de resourcegroep bestaat.
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
Gebruiken voor lussen en het uitvoeren van query's op matrices
In deze sectie van het artikel maken we een opslagaccount en gebruiken we vervolgens voor lussen om blobs en containers te maken. We demonstreren ook het uitvoeren van query's op JSON-matrices en het werken met omgevingsvariabelen.
Een opslagaccount maken
De volgende opdracht maakt gebruik van de opdracht az storage account create om een opslagaccount te maken dat we gebruiken bij het maken van opslagcontainers.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
De opslagaccountsleutels ophalen
De volgende opdrachten gebruiken de opdracht az storage account keys list om waarden voor de sleutel van het opslagaccount te retourneren. Vervolgens slaan we een sleutelwaarde op in een variabele voor gebruik bij het maken van opslagcontainers.
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
Opslagcontainer maken
We gebruiken eerst de az storage container create om één opslagcontainer te maken en vervolgens de az storage container list te gebruiken om een query uit te voeren op de naam van de gemaakte container.
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
Gegevens uploaden naar container
Met het volgende script worden drie voorbeeldbestanden gemaakt met behulp van een for-lus.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
In het volgende script wordt de opdracht az storage blob upload-batch gebruikt om de blobs te uploaden naar de opslagcontainer.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
In het volgende script wordt de opdracht az storage blob list gebruikt om de blobs in de container weer te geven.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
In het volgende script worden de totale bytes in de opslagcontainer weergegeven.
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
Veel containers maken met behulp van lussen
Vervolgens maken we meerdere containers met behulp van een lus die een aantal manieren demonstreert om de lus te schrijven.
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
EXPORT gebruiken om omgevingsvariabelen te definiëren
In de voorgaande opslagcontainerscripts hebben we de accountnaam en accountsleutel opgegeven met elke opdracht. In plaats daarvan kunt u uw verificatiereferenties opslaan met behulp van de bijbehorende omgevingsvariabelen: AZURE_STORAGE_ACCOUNT
en AZURE_STORAGE_KEY
. Gebruik EXPORTEREN om deze actie uit te voeren.
export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.
Met het volgende script maakt u een metagegevenstekenreeks en gebruikt u vervolgens de opdracht az storage container metadata update om een container met die tekenreeks bij te werken, opnieuw met behulp van de omgevingsvariabelen.
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
De volgende opdracht maakt gebruik van de opdracht az storage container delete om één benoemde container te verwijderen en vervolgens meerdere containers in een lus te verwijderen.
az storage container delete \
--name $container
Haal een lijst op met containers met een specifiek voorvoegsel en sla resultaten op in een variabele.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Verwijder de lijst met containers in een lus met behulp van het --prefix
argument.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Foutafhandeling
Als u een script onmiddellijk wilt afsluiten als een opdracht een niet-nulstatus retourneert, voert u de volgende opdracht uit:
set -e
Voer de volgende opdrachten uit voor meer informatie over het instellen van Shell-opties en andere Help-opdrachten:
help set
help help
Resources opschonen
Nadat u dit artikel hebt voltooid, verwijdert u de resourcegroep en alle resources erin. Gebruik het --no-wait
argument.
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