Použití Azure CLI ve skriptovacím jazyce Bash
Referenční příkazy Azure CLI se můžou spouštět v několika skriptovacích jazycích. Pokud s Bashem a také Azure CLI začínáte, je tento článek skvělým místem, kde začít s výukou. Projděte si tento článek podobně jako kurz, ve který se dozvíte, jak snadno používat Azure CLI ve skriptovacím jazyce Bash.
V tomto článku získáte informace o těchto tématech:
- Výsledky dotazu jako slovníky nebo pole JSON
- Formátování výstupu jako JSON, tabulky nebo TSV
- Dotazování, filtrování a formátování jedné a více hodnot
- Použití syntaxe if/exists/then a malá písmena
- Použití pro smyčky
- Použití příkazů grep, sed, paste a bc
- Naplnění a používání proměnných prostředí a prostředí
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure, než začnete.
Spuštění bashe
Spusťte Bash pomocí Azure Cloud Shellu nebo místní instalace Azure CLI. Tento článek předpokládá, že používáte Bash buď pomocí Azure Cloud Shellu, nebo používáte Azure CLI místně v kontejneru Dockeru.
Dotazování výsledků slovníku
Příkaz, který vždy vrátí pouze jeden objekt, vrátí slovník JSON. Slovníky jsou neuspořádané objekty, ke kterým se přistupuje pomocí klíčů. V tomto článku začneme dotazem na objekt Účet pomocí příkazu Zobrazit účet.
az account show
az account show --output json # JSON is the default format
Následující výstup slovníku JSON obsahuje některá pole pro stručnost a identifikace informací se odeberou.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
Formátování výstupu jako YAML
Pomocí argumentu --output yaml
(nebo -o yaml
) naformátujte výstup ve formátu yaml , formát serializace dat ve formátu prostého textu. YAML se obvykle čte snáze než JSON a na tento formát se snadno mapuje. Některé aplikace a příkazy rozhraní příkazového řádku přijímají YAML jako vstup konfigurace (místo formátu JSON).
az account show --output yaml
Další informace o formátování výstupu jako yaml najdete ve výstupním formátu YAML.
Formátování výstupu jako tabulky
--output table
K formátování výstupu jako tabulky ASCII použijte argument (nebo-o table
). Vnořené objekty nejsou do výstupu tabulky zahrnuté, ale je možné je vyfiltrovat jako součást dotazu.
az account show --output table
Další informace o formátování výstupu jako tabulky najdete v tématu Formát výstupu tabulky.
Dotazování a formátování jednoduchých hodnot a vnořených hodnot
Následující dotazy demonstrují dotazování na jednotlivé hodnoty, včetně vnořených hodnot ve výstupu slovníku JSON. Konečný dotaz v této sadě ukazuje formátování výstupu pomocí argumentu -o tsv
. Tento argument vrátí výsledky jako hodnoty oddělené tabulátorem a novými spojnicemi. Tato akce je užitečná pro odebrání uvozovek ve vrácené hodnotě – což je užitečné použít výstup do jiných příkazů a nástrojů, které potřebují zpracovat text v nějaké podobě (jak je znázorněno dále v tomto článku).
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
Dotazování a formátování vlastností z polí
Následující dotaz ukazuje získání vlastností v poli JSON. Získejte vlastnosti předplatného, které se zobrazí jako tabulka předplatných.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Tento dotaz vrátí podobné výsledky:
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
Dotazování a formátování více hodnot, včetně vnořených hodnot
Pokud chcete získat více než jednu vlastnost, vložte výrazy do hranatých závorek [ ] (seznam s vícenásobným výběrem) jako seznam oddělený čárkami. Následující dotazy demonstrují dotazování na více hodnot ve výstupu slovníku JSON pomocí několika výstupních formátů.
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
Další informace o vrácení více hodnot naleznete v tématu Získání více hodnot.
Přejmenování vlastností v dotazu
Následující dotazy demonstrují použití operátoru { } (multiselect hash) k získání slovníku místo pole při dotazování na více hodnot. Ukazuje také přejmenování vlastností ve výsledku dotazu.
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
Další informace o přejmenování vlastností v dotazu naleznete v tématu Přejmenování vlastností v dotazu.
Dotazování na logické hodnoty
Logické hodnoty se předpokládají jako true, takže "[?isDefault]"
syntaxe dotazu pro az account list
příkaz vrátí aktuální výchozí předplatné. Chcete-li získat hodnoty false, musíte použít řídicí znak, například \
.
Následující dotazy demonstrují dotazování na všechny účty v předplatném, potenciálně vrací pole JSON, pokud pro daný účet existuje více předplatných, a dotazování na to, který účet je výchozím předplatným. Ukazuje také dotazování na účty, které nejsou výchozím předplatným. Tyto dotazy vycházejí z toho, co jste se naučili dříve k filtrování a formátování výsledků. Nakonec konečný dotaz ukazuje uložení výsledků dotazu do proměnné.
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
- Další informace o filtrování polí a dotazování logických hodnot naleznete v tématu Filtrování polí pomocí logických výrazů.
- Další informace o používání proměnných najdete v tématu Použití proměnných.
- Další informace o práci s předplatnými najdete v tématu Správa předplatných.
Vytváření objektů pomocí proměnných a randomizace
Nastavení náhodné hodnoty pro použití v následných příkazech
Nastavení a použití náhodné hodnoty pro použití v proměnných umožňuje spouštět skripty několikrát bez konfliktů pojmenování. Ke konfliktům vytváření názvů dochází, protože hodnota musí být jedinečná v rámci služby nebo protože objekt, který jste odstranili, stále existuje v Rámci Azure, dokud proces odstranění nebude dokončen.
$RANDOM
je funkce Bash (ne konstanta), která vrací náhodné 16bitové celé číslo se ménkem (od 0 do 32767). Příkaz let
je integrovaný příkaz Bash pro vyhodnocení aritmetických výrazů.
Použití následujícího příkazu vytvoří dostatečně jedinečnou hodnotu pro většinu účelů.
let "randomIdentifier=$RANDOM*$RANDOM"
Práce s mezerami a uvozovkami
Mezery se používají k oddělení příkazů, možností a argumentů. Pomocí uvozovek můžete prostředí Bash sdělit, aby ignoroval všechny speciální znaky, z nichž prázdné znaky jsou speciální znaky. Když prostředí Bash uvidí první značku uvozovek, ignoruje speciální znaky, dokud se uzavírací uvozovka nezobrazí. Někdy ale chcete, aby prostředí Bash parsoval určité speciální znaky, jako jsou znaky dolaru, zpětné uvozovky a zpětné lomítka. V tomto scénáři použijte dvojité uvozovky.
Následující příkazy používají příkaz az group create k ilustraci použití jednoduchých a dvojitých uvozovek. Tyto příkazy slouží ke zpracování mezer a vyhodnocení speciálních znaků při práci s proměnnými a vytvoření objektu.
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
Ve výstupu slovníku JSON zkontrolujte vlastnosti vytvořené skupiny prostředků.
Použití funkce If Then Else k určení, jestli má proměnná hodnotu null
K vyhodnocení řetězců použijte !=
a vyhodnocujte čísla.-ne
Následující příkaz If Then Else vyhodnotí, zda byla nastavena proměnná $resourceGroup. Pokud ano, vrátí hodnotu proměnné. Pokud ne, nastaví proměnnou.
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Použití příkazu If Then k vytvoření nebo odstranění skupiny prostředků
Následující skript vytvoří novou skupinu prostředků pouze v případě, že ještě neexistuje jedna se zadaným názvem.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
Následující skript odstraní existující novou skupinu prostředků, pokud již existuje se zadaným názvem. Argument můžete použít --no-wait
k vrácení ovládacího prvku bez čekání na dokončení příkazu. V tomto článku ale chceme počkat, než se skupina prostředků odstraní, než budete pokračovat. Další informace o asynchronníchoperacích
Ukážeme použití argumentu --no-wait
na konci tohoto článku.
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
Pomocí Grep zjistěte, jestli skupina prostředků existuje, a vytvořte skupinu prostředků, pokud neexistuje.
Následující příkaz předá výstup az group list
příkazu do grep
příkazu. Pokud zadaná skupina prostředků neexistuje, příkaz vytvoří skupinu prostředků pomocí dříve definovaných proměnných.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Pomocí příkazu CASE určete, jestli skupina prostředků existuje, a vytvořte skupinu prostředků, pokud neexistuje.
Následující příkaz CASE vytvoří novou skupinu prostředků pouze v případě, že ještě neexistuje jedna se zadaným názvem. Pokud existuje jeden se zadaným názvem, příkaz CASE ozvěna, že skupina prostředků existuje.
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
Použití pro smyčky a dotazování polí
V této části článku vytvoříme účet úložiště a pak použijeme smyčky pro vytváření objektů blob a kontejnerů. Předvedeme také dotazování polí JSON a práci s proměnnými prostředí.
Vytvoření účtu úložiště
Následující příkaz pomocí příkazu az storage account create vytvoří účet úložiště, který používáme při vytváření kontejnerů úložiště.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Získání klíčů účtu úložiště
Následující příkazy používají příkaz az storage account keys list k vrácení hodnot klíčů účtu úložiště. Pak uložíme hodnotu klíče do proměnné pro použití při vytváření kontejnerů úložiště.
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
Vytvoření kontejneru úložiště
Začneme tím, že pomocí příkazu az storage container create vytvoříme jeden kontejner úložiště a pak pomocí příkazu az storage container list odešleme dotaz na název vytvořeného kontejneru.
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
Nahrání dat do kontejneru
Následující skript vytvoří tři ukázkové soubory pomocí smyčky for.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
Následující skript pomocí příkazu az storage blob upload-batch nahraje objekty blob do kontejneru úložiště.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
Následující skript pomocí příkazu az storage blob list vypíše objekty blob v kontejneru.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
Následující skript zobrazí celkový počet bajtů v kontejneru úložiště.
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
Vytváření mnoha kontejnerů pomocí smyček
Dále vytvoříme více kontejnerů pomocí smyčky, která demonstruje několik způsobů zápisu smyčky.
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
Použití exportu k definování proměnných prostředí
V předchozích skriptech kontejneru úložiště jsme zadali název účtu a klíč účtu pomocí každého příkazu. Místo toho můžete přihlašovací údaje pro ověřování uložit pomocí odpovídajících proměnných prostředí: AZURE_STORAGE_ACCOUNT
a AZURE_STORAGE_KEY
. Chcete-li provést tuto akci, použijte příkaz EXPORTOVAT.
export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.
Následující skript vytvoří řetězec metadat a pak pomocí příkazu az storage container metadata update aktualizuje kontejner s tímto řetězcem znovu pomocí proměnných prostředí.
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
Následující příkaz pomocí příkazu az storage container delete odstraní jeden pojmenovaný kontejner a pak ve smyčce odstraní více kontejnerů.
az storage container delete \
--name $container
Získejte seznam kontejnerů obsahujících konkrétní předponu a uložte výsledky do proměnné.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Pomocí argumentu --prefix
odstraňte seznam kontejnerů ve smyčce.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Zpracování chyb
Pokud chcete skript okamžitě ukončit, pokud příkaz vrátí nenulový stav, spusťte následující příkaz:
set -e
Další informace o nastavení možností prostředí a další nápovědy najdete v následujících příkazech:
help set
help help
Vyčištění prostředků
Po dokončení tohoto článku odstraňte skupinu prostředků a všechny prostředky v ní. --no-wait
Použijte 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
Viz také
- Kurz: Naučte se používat Azure CLI
- Úspěšné použití Azure CLI
- Dotazování výstupu příkazu Azure CLI
- Vyhledání ukázek Azure CLI a publikovaných článků