Sdílet prostřednictvím


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

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é