Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 dowiesz się, jak:
- 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
- Tworzenie i używanie zmiennych powłoki i środowiskowych
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Uruchamianie Bash
Uruchom powłokę Bash przy użyciu usługi Azure Cloud Shell lub lokalnej instalacji CLI Azure. W tym artykule założono, że uruchamiasz Bash przy użyciu usługi Azure Cloud Shell lub uruchamiasz Azure CLI lokalnie w kontenerze 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. YAML jest zwykle łatwiejszy do odczytania niż JSON i łatwo go odwzorować na ten format. Niektóre aplikacje i polecenia interfejsu wiersza polecenia przyjmują kod YAML jako dane wejściowe konfiguracji zamiast 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. Zagnieżdżone obiekty nie są uwzględniane w danych wyjściowych tabeli, ale nadal można je filtrować jako część 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 oddzielone tabulatorami i nowymi liniami. Ta akcja jest przydatna do usuwania cudzysłowów w zwróconej wartości, co ułatwia wykorzystanie 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
Zakłada się, że wartości typu logicznego są prawdziwe, więc składnia zapytania "[?isDefault]" polecenia az account list zwraca bieżącą subskrypcję domyślną. Aby uzyskać wartości fałszywe, należy użyć znaku ucieczki, takiego jak \.
Poniższe zapytania pokazują, jak wykonywać zapytania dotyczące wszystkich kont w ramach subskrypcji, potencjalnie zwracając tablicę JSON, jeśli istnieje wiele subskrypcji dla konkretnego konta, a następnie identyfikują, które konto posiada 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ście się wcześniej, aby 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ą w powłoce bash (a nie stałą), która zwraca losową znakowaną 16-bitową liczbę całkowitą (z zakresu od 0 do 32767). Polecenie let to wbudowane w Bashu polecenie umożliwiające obliczanie 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ę Bash o ignorowaniu wszystkich znaków specjalnych, z których spacja jest jednym z nich. Gdy powłoka Bash widzi pierwszy znak cudzysłowia, ignoruje znaki specjalne do zamykającego znaku cudzysłowia. Jednak czasami chcesz, aby powłoka Bash analizowała 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, aby określić, czy grupa zasobów istnieje, i w razie nieistnienia, utworzyć grupę zasobów.
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 for i przeszukiwanie tablic
W tej sekcji artykułu utworzymy konto magazynowe, a następnie użyjemy pętli for do tworzenia kontenerów i obiektów blob. Demonstrujemy również wykonywanie zapytań dotyczących tablic JSON i pracę ze zmiennymi środowiskowymi.
Utwórz konto magazynowe
Następujące polecenie używa polecenia az storage account create, aby utworzyć konto pamięci masowej, które wykorzystamy do tworzenia kontenerów pamięci masowej.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Pobierz klucze konta magazynowego
Następujące komendy używają polecenia az storage account keys list, aby zwrócić wartości kluczy dla konta magazynu. Następnie przechowujemy wartość klucza w zmiennej do wykorzystania przy tworzeniu kontenerów magazynowych.
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 magazynowego
Zaczniemy od utworzenia pojedynczego kontenera magazynu za pomocą polecenia az storage container create, a następnie użyjemy 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 przesłać obiekty blob do kontenera pamięci masowej.
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 przechowywania.
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ąc kilka sposobów, jak można zapisać pętlę.
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 przechowywania określiliśmy nazwę konta i klucz konta w każdym poleceniu. 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
Uprzątnij zasoby
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