Az Azure CLI használata Bash-környezetben

Az Azure CLI referenciaparancsai több különböző rendszerhéj-környezetben is végrehajthatók, de a Microsoft Docs elsősorban a Bash-környezetet használja. 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-környezetben.

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övidség kedvéért, és az információk azonosítása el lett távolítva vagy általánosítva lett.

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

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 fordulhatnak 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. Az aszinkron műveletekről további információt az Aszinkron műveletek című témakörben talál. 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"

Ca Standard kiadás utasítás használatával állapítsa meg, hogy létezik-e erőforráscsoport, és hozza létre az erőforráscsoportot, ha nem

A következő CA Standard kiadás 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 ca Standard kiadás 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

Ha végzett a cikkel, 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

Lásd még