Jak używać interfejsu wiersza polecenia platformy Azure w języku skryptowym powłoki Bash
Polecenia referencyjne interfejsu wiersza polecenia platformy Azure mogą być wykonywane w kilku językach skryptów. Jeśli dopiero zaczynasz korzystać z powłoki Bash, a także interfejsu wiersza polecenia platformy Azure, ten artykuł stanowi doskonałe miejsce na rozpoczęcie nauki. Zapoznaj się z tym artykułem, podobnie jak w przypadku samouczka, aby dowiedzieć się, jak łatwo używać interfejsu wiersza polecenia platformy Azure w języku skryptowym Bash.
W tym artykule omówiono sposób wykonywania następujących zadań:
- Wyniki zapytania jako słowniki lub tablice JSON
- Formatuj dane wyjściowe w formacie JSON, tabeli lub TSV
- Wykonywanie zapytań, filtrowanie i formatowanie pojedynczych i wielu wartości
- Użyj składni if/exists/then i case
- Używanie pętli
- Używanie poleceń grep, sed, paste i bc
- Wypełnianie i używanie zmiennych środowiskowych i powłoki
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Uruchamianie powłoki Bash
Uruchom powłokę Bash przy użyciu usługi Azure Cloud Shell lub lokalnej instalacji interfejsu wiersza polecenia platformy Azure. W tym artykule założono, że uruchamiasz powłokę Bash przy użyciu usługi Azure Cloud Shell lub uruchamiasz interfejs wiersza polecenia platformy Azure lokalnie w kontenerze platformy Docker.
Wykonywanie zapytań względem wyników słownika
Polecenie, które zawsze zwraca tylko pojedynczy obiekt, zwraca słownik JSON. Słowniki są nieurządzanymi obiektami, do których uzyskuje się dostęp za pomocą kluczy. W tym artykule zaczniemy od wykonywania zapytań względem obiektu Account przy użyciu polecenia Account Show .
az account show
az account show --output json # JSON is the default format
Następujące dane wyjściowe słownika JSON zawierają niektóre pola pominięte w celu zwięzłości i usunięto informacje identyfikujące.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
Formatowanie danych wyjściowych jako YAML
Użyj argumentu --output yaml
(lub -o yaml
), aby sformatować dane wyjściowe w formacie yaml , format serializacji danych w postaci zwykłego tekstu. Pliki YAML są łatwiejsze do odczytania niż pliki JSON i można je łatwo mapować na ten format. Niektóre aplikacje i polecenia interfejsu wiersza polecenia przyjmują format danych wejściowych konfiguracji YAML, zamiast formatu JSON.
az account show --output yaml
Aby uzyskać więcej informacji na temat formatowania danych wyjściowych jako yaml, zobacz Format danych wyjściowych YAML.
Formatowanie danych wyjściowych jako tabeli
Użyj argumentu --output table
(lub -o table
), aby sformatować dane wyjściowe jako tabelę ASCII. Dane wyjściowe tabeli nie zawierają obiektów zagnieżdżonych, ale można je filtrować w ramach zapytania.
az account show --output table
Aby uzyskać więcej informacji na temat formatowania danych wyjściowych jako tabeli, zobacz Format danych wyjściowych tabeli.
Wykonywanie zapytań i formatowanie pojedynczych wartości i wartości zagnieżdżonych
Poniższe zapytania pokazują wykonywanie zapytań dotyczących pojedynczych wartości, w tym wartości zagnieżdżonych w danych wyjściowych słownika JSON. Ostatnie zapytanie w tym zestawie demonstruje formatowanie danych wyjściowych przy użyciu argumentu -o tsv
. Ten argument zwraca wyniki jako wartości rozdzielane tabulatorami i nowymi wierszami. Ta akcja jest przydatna do usuwania cudzysłowów w zwróconej wartości — co jest przydatne do użycia danych wyjściowych w innych poleceniach i narzędziach, które muszą przetworzyć tekst w jakiejś formie (jak pokazano w dalszej części tego artykułu).
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
Wykonywanie zapytań i formatowanie właściwości z tablic
Poniższe zapytanie demonstruje pobieranie właściwości w tablicy JSON. Pobierz właściwości subskrypcji wyświetlane jako tabela subskrypcji.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
To zapytanie zwraca wyniki podobne do następujących:
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
Wykonywanie zapytań i formatowanie wielu wartości, w tym wartości zagnieżdżonych
Aby uzyskać więcej niż jedną właściwość, umieść wyrażenia w nawiasach kwadratowych [ ] (lista wielokrotnego wyboru) jako listę rozdzielaną przecinkami. Poniższe zapytania przedstawiają wykonywanie zapytań dotyczących wielu wartości w danych wyjściowych słownika JSON przy użyciu wielu formatów wyjściowych.
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
Aby uzyskać więcej informacji na temat zwracania wielu wartości, zobacz Pobieranie wielu wartości.
Zmienianie nazw właściwości w zapytaniu
Poniższe zapytania przedstawiają użycie operatora { } (skrót wielowybierz) w celu pobrania słownika zamiast tablicy podczas wykonywania zapytań dotyczących wielu wartości. Demonstruje również zmianę nazw właściwości w wyniku zapytania.
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
Aby uzyskać więcej informacji na temat zmieniania nazw właściwości w zapytaniu, zobacz Zmienianie nazw właściwości w zapytaniu.
Wykonywanie zapytań dotyczących wartości logicznych
Przyjmuje się, że wartości logiczne mają wartość true, więc "[?isDefault]"
składnia zapytania dla az account list
polecenia zwraca bieżącą subskrypcję domyślną. Aby uzyskać wartości fałszywe, należy użyć znaku ucieczki, takiego jak \
.
Poniższe zapytania przedstawiają wykonywanie zapytań dotyczących wszystkich kont w subskrypcji, potencjalnie zwracając tablicę JSON, jeśli istnieje wiele subskrypcji dla danego konta, a następnie wykonywanie zapytań dotyczących konta, dla którego konta jest subskrypcją domyślną. Demonstruje również wykonywanie zapytań dotyczących kont, które nie są subskrypcją domyślną. Te zapytania opierają się na tym, czego nauczyliśmy się wcześniej filtrować i formatować wyniki. Na koniec ostatnie zapytanie demonstruje przechowywanie wyników zapytania w zmiennej.
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
- Aby uzyskać więcej informacji na temat filtrowania tablic i wykonywania zapytań dotyczących wartości logicznych, zobacz Filtrowanie tablic za pomocą wyrażeń logicznych.
- Aby uzyskać więcej informacji na temat używania zmiennych, zobacz Jak używać zmiennych.
- Aby uzyskać więcej informacji na temat pracy z subskrypcjami, zobacz Zarządzanie subskrypcjami.
Tworzenie obiektów przy użyciu zmiennych i losowości
Ustawianie losowej wartości do użycia w kolejnych poleceniach
Ustawienie i użycie losowej wartości do użycia w zmiennych umożliwia wielokrotne uruchamianie skryptów bez konfliktów nazewnictwa. Konflikty nazewnictwa występują, ponieważ wartość musi być unikatowa w usłudze lub ponieważ usunięty obiekt nadal istnieje na platformie Azure do momentu zakończenia procesu usuwania.
$RANDOM
jest funkcją powłoki bash (a nie stałą), która zwraca losową 16-bitową liczbę całkowitą (z zakresu od 0 do 32767). Polecenie let
to wbudowane polecenie powłoki Bash umożliwiające ocenę wyrażeń arytmetycznych.
Użycie następującego polecenia powoduje utworzenie wystarczająco unikatowej wartości dla większości celów.
let "randomIdentifier=$RANDOM*$RANDOM"
Praca z spacjami i cudzysłowami
Spacje są używane do oddzielania poleceń, opcji i argumentów. Użyj cudzysłowów, aby poinformować powłokę powłoki Bash o ignorowaniu wszystkich znaków specjalnych, z których biały znak jest znakiem specjalnym. Gdy powłoka powłoki Bash widzi pierwszy znak cudzysłowu, ignoruje znaki specjalne do znaku cudzysłowu zamykającego. Jednak czasami chcesz, aby powłoka Bash analizować niektóre znaki specjalne, takie jak znaki dolara, cudzysłowy odwrotne i ukośniki odwrotne. W tym scenariuszu użyj cudzysłowów podwójnych.
Następujące polecenia używają polecenia az group create , aby zilustrować użycie pojedynczych i podwójnych cudzysłowów. Te polecenia służą do obsługi spacji i oceniania znaków specjalnych podczas pracy ze zmiennymi i tworzenia obiektu.
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
W danych wyjściowych słownika JSON przejrzyj właściwości utworzonej grupy zasobów.
Używanie instrukcji If Then Else w celu określenia, czy zmienna ma wartość null
Aby ocenić ciągi, użyj polecenia !=
i , aby oszacować liczby, użyj polecenia -ne
. Poniższa instrukcja If Then Else ocenia, czy ustawiono zmienną $resourceGroup. Jeśli tak, zwraca wartość zmiennej. Jeśli nie, ustawia zmienną.
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Używanie polecenia If Then do utworzenia lub usunięcia grupy zasobów
Poniższy skrypt tworzy nową grupę zasobów tylko wtedy, gdy jedna z określoną nazwą jeszcze nie istnieje.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
Poniższy skrypt usuwa istniejącą nową grupę zasobów, jeśli jedna z określoną nazwą już istnieje. Możesz użyć argumentu --no-wait
, aby zwrócić kontrolę bez oczekiwania na ukończenie polecenia. Jednak w tym artykule chcemy poczekać na usunięcie grupy zasobów przed kontynuowaniem. Aby uzyskać więcej informacji na temat operacji asynchronicznych, zobacz Porady dotyczące pomyślnego korzystania z interfejsu wiersza polecenia platformy Azure — operacje asynchroniczne.
Przedstawiamy użycie argumentu --no-wait
na końcu tego artykułu.
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
Używanie języka Grep do określenia, czy grupa zasobów istnieje, i utwórz grupę zasobów, jeśli nie
Następujące polecenie potokuje dane wyjściowe az group list
polecenia do grep
polecenia . Jeśli określona grupa zasobów nie istnieje, polecenie tworzy grupę zasobów przy użyciu wcześniej zdefiniowanych zmiennych.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Używanie instrukcji CASE w celu określenia, czy grupa zasobów istnieje, i utwórz grupę zasobów, jeśli nie
Poniższa instrukcja CASE tworzy nową grupę zasobów tylko wtedy, gdy jedna z określoną nazwą jeszcze nie istnieje. Jeśli jedna z określoną nazwą istnieje, instrukcja CASE powtarza, że grupa zasobów istnieje.
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
Używanie pętli i wykonywania zapytań dotyczących tablic
W tej sekcji artykułu utworzymy konto magazynu, a następnie użyjemy pętli do tworzenia obiektów blob i kontenerów. Demonstrujemy również wykonywanie zapytań dotyczących tablic JSON i pracę ze zmiennymi środowiskowymi.
Tworzenie konta magazynu
Następujące polecenie używa polecenia az storage account create , aby utworzyć konto magazynu używane podczas tworzenia kontenerów magazynu.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Pobieranie kluczy konta magazynu
Następujące polecenia używają polecenia az storage account keys list , aby zwrócić wartości klucza konta magazynu. Następnie przechowujemy wartość klucza w zmiennej do użycia podczas tworzenia kontenerów magazynu.
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
Tworzenie kontenera magazynu
Zaczniemy od utworzenia pojedynczego kontenera magazynu za pomocą polecenia az storage container create , a następnie użyjemy listy az storage container list , aby wykonać zapytanie o nazwę utworzonego kontenera.
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
Przekazywanie danych do kontenera
Poniższy skrypt tworzy trzy przykładowe pliki przy użyciu pętli for.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
Poniższy skrypt używa polecenia az storage blob upload-batch , aby przekazać obiekty blob do kontenera magazynu.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
Poniższy skrypt używa polecenia az storage blob list , aby wyświetlić listę obiektów blob w kontenerze.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
Poniższy skrypt wyświetla łączną liczbę bajtów w kontenerze magazynu.
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
Tworzenie wielu kontenerów przy użyciu pętli
Następnie utworzymy wiele kontenerów przy użyciu pętli demonstrujące kilka sposobów na zapisanie pętli.
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
Używanie funkcji EXPORT do definiowania zmiennych środowiskowych
W poprzednich skryptach kontenera magazynu określiliśmy nazwę konta i klucz konta za pomocą każdego polecenia. Zamiast tego możesz przechowywać poświadczenia uwierzytelniania przy użyciu odpowiednich zmiennych środowiskowych: AZURE_STORAGE_ACCOUNT
i AZURE_STORAGE_KEY
. Aby wykonać tę akcję, użyj polecenia 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.
Poniższy skrypt tworzy ciąg metadanych, a następnie używa polecenia az storage container metadata update , aby zaktualizować kontener za pomocą tego ciągu, ponownie przy użyciu zmiennych środowiskowych.
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
Następujące polecenie używa polecenia az storage container delete , aby usunąć jeden nazwany kontener, a następnie usunąć wiele kontenerów w pętli.
az storage container delete \
--name $container
Pobierz listę kontenerów zawierających określony prefiks i zapisz wyniki w zmiennej.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Usuń listę kontenerów w pętli przy użyciu argumentu --prefix
.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Obsługa błędów
Aby zakończyć działanie skryptu natychmiast, jeśli polecenie zwróci stan niezerowy, uruchom następujące polecenie:
set -e
Aby uzyskać więcej informacji na temat ustawiania opcji powłoki i innych pomocy, uruchom następujące polecenia:
help set
help help
Czyszczenie zasobów
Po ukończeniu tego artykułu usuń grupę zasobów i wszystkie jej zasoby. Użyj argumentu --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
Zobacz też
- Samouczek: dowiedz się, jak używać interfejsu wiersza polecenia platformy Azure
- Jak pomyślnie używać interfejsu wiersza polecenia platformy Azure
- Jak wykonywać zapytania względem danych wyjściowych polecenia interfejsu wiersza polecenia platformy Azure
- Znajdowanie przykładów interfejsu wiersza polecenia platformy Azure i opublikowanych artykułów