Az Azure CLI használata Bash-szkriptnyelven
Az Azure CLI referenciaparancsai több szkriptnyelven is végrehajthatók. Ha még csak most ismerkedik a Bash és az Azure CLI használatával, ez a cikk remek lehetőséget nyújt a tanulási folyamat megkezdésére. Ebben a cikkben ugyanúgy dolgozhat, mint egy oktatóanyagban, amelyből megtudhatja, hogyan használhatja könnyedén az Azure CLI-t Bash-szkriptelési nyelven.
Ebben a cikkben az alábbiakkal ismerkedhet meg:
- Eredmények lekérdezése JSON-szótárként vagy tömbként
- Kimenet formázása JSON, tábla vagy TSV formátumban
- Egyetlen és több érték lekérdezése, szűrése és formázása
- Ha/létezik/akkor és kis- és nagybetűk szintaxisa
- Ciklusok használata
- Grep, sed, paste és bc parancsok használata
- Rendszerhéj- és környezeti változók feltöltése és használata
Ha nem rendelkezik Azure-előfizetéssel, a kezdés előtt hozzon létre egy ingyenes Azure-fiókot .
A Bash indítása
Indítsa el a Basht az Azure Cloud Shell használatával vagy az Azure CLI helyi telepítésével. Ez a cikk feltételezi, hogy a Basht az Azure Cloud Shell használatával vagy az Azure CLI helyi futtatásával futtatja egy Docker-tárolóban.
Szótár eredményeinek lekérdezése
Egy parancs, amely mindig csak egyetlen objektumot ad vissza, JSON-szótárt ad vissza. A szótárak a kulcsokkal elérhető rendezetlen objektumok. Ebben a cikkben először lekérdezzük a Fiókobjektumot a Fiók megjelenítése paranccsal.
az account show
az account show --output json # JSON is the default format
Az alábbi JSON-szótárkimenetben néhány mező hiányzik a rövidítéshez, és az azonosító adatok törlődnek.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
A kimenet formázása YAML formátumban
--output yaml
Az argumentummal (vagy -o yaml
) yaml formátumban formázhatja a kimenetet, amely egyszerű szöveges adat szerializálási formátum. A YAML alapvetően könnyebben olvasható a JSON-nál, és könnyen leképezhető abba a formátumba. Bizonyos alkalmazások és parancssori felületi parancsok elfogadják a YAML-t konfigurációs bemenetnek a JSON helyett.
az account show --output yaml
A kimenet yaml formátumban való formázásával kapcsolatos további információkért lásd a YAML kimeneti formátumát.
A kimenet formázása táblázatként
--output table
Az argumentummal (vagy -o table
) ASCII-táblaként formázhatja a kimenetet. A táblakimenetben nem szerepelnek beágyazott objektumok, de továbbra is szűrhetők egy lekérdezés részeként.
az account show --output table
A kimenet táblázatként való formázásáról további információt a Tábla kimeneti formátuma című témakörben talál.
Önálló és beágyazott értékek lekérdezése és formázása
Az alábbi lekérdezések bemutatják az önálló értékek lekérdezését, beleértve a beágyazott értékeket egy JSON-szótár kimenetében. A készlet utolsó lekérdezése az argumentum használatával mutatja be a kimenet formázását -o tsv
. Ez az argumentum tabulátorral és új vonallal elválasztott értékként adja vissza az eredményeket. Ez a művelet akkor hasznos, ha eltávolítja az idézőjeleket a visszaadott értékből , ami hasznos lehet a kimenet más parancsokba és eszközökbe való felhasználásához, amelyeknek valamilyen formában kell feldolgozni a szöveget (amint azt a cikk későbbi részében is bemutatjuk).
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
Tulajdonságok lekérdezése és formázása tömbökből
Az alábbi lekérdezés bemutatja a tulajdonságok JSON-tömbben való lekérését. Előfizetési tulajdonságok lekérése előfizetési táblázatként megjelenítve.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Ez a lekérdezés a következőhöz hasonló eredményeket ad vissza:
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
Több érték lekérdezése és formázása, beleértve a beágyazott értékeket is
Ha egynél több tulajdonságot szeretne lekérni, a kifejezéseket szögletes zárójelek [ ] (többválasztós lista) közé vesszővel elválasztott listaként kell elhelyezni. Az alábbi lekérdezések több érték lekérdezését mutatják be egy JSON-szótár kimenetében, több kimeneti formátum használatával.
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
További információ a több érték visszaadásáról: Több érték lekérése.
Tulajdonságok átnevezése lekérdezésben
Az alábbi lekérdezések azt mutatják be, hogy a{} (többjeles kivonat) operátor használatával tömb helyett szótárt kérhet le több érték lekérdezésekor. Emellett bemutatja a tulajdonságok átnevezését a lekérdezés eredményében.
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
A lekérdezés tulajdonságainak átnevezésével kapcsolatos további információkért lásd : Tulajdonságok átnevezése egy lekérdezésben.
Logikai értékek lekérdezése
A logikai értékek értéke igaz, ezért a "[?isDefault]"
parancs lekérdezési szintaxisa az az account list
aktuális alapértelmezett előfizetést adja vissza. A hamis értékek lekéréséhez egy feloldó karaktert kell használnia, például \
.
Az alábbi lekérdezések bemutatják, hogy egy előfizetés összes fiókját lekérdezi, és egy JSON-tömböt ad vissza, ha egy adott fiókhoz több előfizetés tartozik, majd lekérdezi, hogy melyik fiók az alapértelmezett előfizetés. Azt is bemutatja, hogy milyen fiókok lekérdezése nem az alapértelmezett előfizetés. Ezek a lekérdezések a korábban tanultakra épülnek az eredmények szűréséhez és formázásához. Végül a végső lekérdezés bemutatja, hogy a lekérdezés eredménye egy változóban van tárolva.
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
- A tömbök szűréséről és a logikai értékek lekérdezéséről további információt a tömbök szűrése logikai kifejezésekkel című témakörben talál.
- A változók használatáról további információt a Változók használata című témakörben talál.
- Az előfizetések kezelésével kapcsolatos további információkért lásd : Előfizetések kezelése.
Objektumok létrehozása változók és véletlenszerűség használatával
Véletlenszerű érték beállítása a következő parancsokban való használatra
A változókban való használat véletlenszerű értékének beállítása és használata lehetővé teszi a szkriptek többszöri futtatását elnevezési ütközések nélkül. Az elnevezési ütközések azért fordulnak elő, mert egy értéknek egyedinek kell lennie a szolgáltatásban, vagy mert a törölt objektum továbbra is létezik az Azure-ban a törlési folyamat befejezéséig.
$RANDOM
egy bash függvény (nem állandó), amely véletlenszerűen aláírt 16 bites egész számot ad vissza (0 és 32767 között). A let
parancs egy beépített Bash-parancs az aritmetikai kifejezések kiértékelésére.
A következő paranccsal a legtöbb célra elegendően egyedi értéket hozhat létre.
let "randomIdentifier=$RANDOM*$RANDOM"
Szóközök és idézőjelek használata
A szóközök parancsok, beállítások és argumentumok elválasztására szolgálnak. Idézőjelekkel jelezhető, hogy a Bash-rendszerhéj figyelmen kívül hagyja az összes speciális karaktert, amelynek fehér helye egy speciális karakter. Amikor a Bash-rendszerhéj az első idézőjelet látja, a záró idézőjelig figyelmen kívül hagyja a speciális karaktereket. Néha azonban azt szeretné, hogy a Bash-rendszerhéj elemezni tudja bizonyos speciális karaktereket, például a dollárjeleket, a visszajegyzéseket és a fordított perjeleket. Ebben a forgatókönyvben használjon dupla idézőjeleket.
Az alábbi parancsok az az group create paranccsal szemléltetik az egy- és dupla idézőjelek használatát. Ezek a parancsok a szóközök kezelésére és a speciális karakterek kiértékelésére szolgálnak változók használatakor és objektumok létrehozásakor.
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
A JSON-szótár kimenetében tekintse át a létrehozott erőforráscsoport tulajdonságait.
Az If Then Else függvény használata annak megállapításához, hogy a változó null értékű-e
Sztringek kiértékeléséhez használja !=
és értékelje ki a számokat -ne
. Az alábbi If Then Else utasítás kiértékeli, hogy a $resourceGroup változó be van-e állítva. Ha igen, a változó értékét adja vissza. Ha nem, beállítja a változót.
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Erőforráscsoport létrehozása vagy törlése az If Then használatával
A következő szkript csak akkor hoz létre új erőforráscsoportot, ha a megadott névvel még nem rendelkezik.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
A következő szkript töröl egy meglévő új erőforráscsoportot, ha a megadott név már létezik. Az argumentum használatával anélkül térhet vissza a --no-wait
vezérlőhöz, hogy megvárná a parancs befejezését. Ebben a cikkben azonban meg szeretnénk várni az erőforráscsoport törlését a folytatás előtt. További információ az aszinkron műveletekről: Tippek az Azure CLI sikeres használatához – Aszinkron műveletek.
A cikk végén bemutatjuk az --no-wait
argumentum használatát.
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
A Grep használatával állapítsa meg, hogy létezik-e erőforráscsoport, és hozza létre az erőforráscsoportot, ha nem
Az alábbi parancs a parancs kimenetét az group list
a parancshoz grep
irányítja. Ha a megadott erőforráscsoport nem létezik, a parancs a korábban definiált változók használatával hozza létre az erőforráscsoportot.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
CASE utasítással állapítsa meg, hogy létezik-e erőforráscsoport, és hozza létre az erőforráscsoportot, ha nem
A következő CASE utasítás csak akkor hoz létre új erőforráscsoportot, ha a megadott névvel még nem rendelkezik. Ha a megadott névvel rendelkező személy létezik, a CASE utasítás azt tükrözi, hogy az erőforráscsoport létezik.
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
Hurkok és tömbök lekérdezése
A cikk jelen szakaszában létrehozunk egy tárfiókot, majd hurkokhoz használjuk a blobok és tárolók létrehozását. Bemutatjuk a JSON-tömbök lekérdezését és a környezeti változók használatát is.
Storage-fiók létrehozása
Az alábbi parancs az az storage account create paranccsal hoz létre egy tárfiókot, amelyet a tárolók létrehozásakor használunk.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
A tárfiókkulcsok lekérése
Az alábbi parancsok az az storage account keys list parancsot használják a tárfiók kulcsértékeinek visszaadásához. Ezután egy kulcsértéket tárolunk egy változóban, amely tárolók létrehozásakor használható.
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
Storage-tároló létrehozása
Először az az storage container create használatával hozunk létre egyetlen tárolót, majd az az storage container listával kérdezzük le a létrehozott tároló nevét.
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
Adatok feltöltése tárolóba
Az alábbi szkript három mintafájlt hoz létre egy ciklus használatával.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
Az alábbi szkript az az storage blob upload-batch paranccsal tölti fel a blobokat a tárolóba.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
Az alábbi szkript az az storage bloblista parancsot használja a tárolóban lévő blobok listázásához.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
Az alábbi szkript megjeleníti a tárolóban lévő összes bájtot.
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
Több tároló létrehozása hurkok használatával
Ezután több tárolót hozunk létre egy hurok használatával, amely bemutatja a hurok megírásának néhány módját.
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
Környezeti változók definiálása az EXPORT használatával
Az előző tárolószkriptekben minden paranccsal megírtuk a fiók nevét és a fiókkulcsot. Ehelyett a hitelesítési hitelesítő adatokat a megfelelő környezeti változók használatával tárolhatja: AZURE_STORAGE_ACCOUNT
és AZURE_STORAGE_KEY
. A művelet végrehajtásához használja az EXPORT parancsot.
export AZURE_STORAGE_ACCOUNT=$storageAccount
export AZURE_STORAGE_KEY=$accountKey
az storage container list # Uses the environment variables to display the list of containers.
Az alábbi szkript létrehoz egy metaadat-sztringet, majd az az storage container metadata update paranccsal frissíti a tárolót ezzel a sztringgel, ismét a környezeti változók használatával.
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
Az alábbi parancs az az storage container delete parancsot használja egyetlen elnevezett tároló törléséhez, majd több tároló törléséhez egy ciklusban.
az storage container delete \
--name $container
Kérje le egy adott előtagot tartalmazó tárolók listáját, és tárolja az eredményeket egy változóban.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Törölje a tárolók listáját egy ciklusban az --prefix
argumentum használatával.
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Hibakezelés
Ha azonnal ki szeretne lépni egy szkriptből, ha egy parancs nemzero állapotot ad vissza, futtassa a következő parancsot:
set -e
A rendszerhéj beállításainak beállításával és egyéb súgóval kapcsolatos további információkért futtassa a következő parancsokat:
help set
help help
Az erőforrások eltávolítása
A cikk befejezése után törölje az erőforráscsoportot és a benne lévő összes erőforrást. Használja az argumentumot --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