Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los comandos de referencia de la CLI de Azure pueden ejecutarse en varios lenguajes de scripting. Si no está familiarizado con Bash y también la CLI de Azure, este artículo es un excelente lugar para comenzar su recorrido de aprendizaje. Trabaja en este artículo como con un tutorial para aprender a usar fácilmente la CLI de Azure en un lenguaje de scripting de Bash.
En este artículo aprenderá a:
- Resultados de la consulta como diccionarios o matrices JSON
- Dar formato a la salida como JSON, tabla o TSV
- Consulta, filtro y formato de uno y varios valores
- Utiliza la sintaxis if/exists/then y case
- Uso de bucles for
- Uso de comandos grep, sed, paste y bc
- Asignar y usar variables de shell y de entorno
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Inicio de Bash
Inicie Bash mediante Azure Cloud Shell o una instalación local de la CLI de Azure. En este artículo se da por supuesto que está ejecutando Bash mediante Azure Cloud Shell o ejecutando la CLI de Azure localmente en un contenedor de Docker.
Consultar los resultados del diccionario
Un comando que siempre devuelve un solo objeto devuelve un diccionario JSON. Los diccionarios son objetos sin ordenar a los que se accede con claves. Para este artículo, vamos a empezar consultando el objeto Account mediante el comando Account Show .
az account show
az account show --output json # JSON is the default format
La siguiente salida del diccionario JSON tiene algunos campos omitidos para mayor brevedad y se quita la información de identificación.
bash-5.1# az account show
{
"environmentName": "AzureCloud",
"isDefault": true,
"managedByTenants": [],
"name": "My test subscription",
"state": "Enabled",
"user": {
"name": "user@contoso.com",
"type": "user"
}
}
Formatear la salida como YAML
Utilice el argumento --output yaml (o -o yaml) para dar formato a la salida en yaml, un formato de serialización de datos de texto sin formato. YAML suele ser más fácil de leer que JSON y se corresponde fácilmente con ese formato. Algunas aplicaciones y los comandos de la CLI aceptan YAML como entrada de configuración, en lugar de JSON.
az account show --output yaml
Para obtener más información sobre cómo dar formato a la salida como yaml, consulte Formato de salida de YAML.
Formato de la salida como una tabla
Use el --output table argumento (o -o table) para dar formato a la salida como una tabla ASCII. Los objetos anidados no se incluyen en la tabla de salida, pero se pueden filtrar como parte de una consulta.
az account show --output table
Para obtener más información sobre cómo dar formato a la salida como una tabla, vea Formato de salida de tabla.
Consulta y formato de valores únicos y valores anidados
Las consultas siguientes muestran la consulta de valores únicos, incluidos los valores anidados en una salida del diccionario JSON. La consulta final de este conjunto muestra el formato de la salida mediante el -o tsv argumento . Este argumento devuelve los resultados como valores separados por tabulador y nueva línea. Esta acción es útil para quitar comillas en el valor devuelto, lo que resulta útil para consumir la salida en otros comandos y herramientas que necesitan procesar el texto de algún modo (como se muestra más adelante en este artículo).
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
Consulta y formato de propiedades de matrices
La consulta siguiente muestra cómo obtener propiedades en una matriz JSON. Obtiene las propiedades de la suscripción, que se muestran como una tabla de suscripciones.
az account list --query "[].{subscription_id:id, name:name, isDefault:isDefault}" -o table
Esta consulta devuelve resultados similares a los siguientes:
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
Consulta y formateo de varios valores, incluidos los valores anidados
Para obtener más de una propiedad, coloque expresiones entre corchetes [ ] (una lista de selección múltiple) como una lista separada por comas. Las consultas siguientes muestran la consulta de varios valores en una salida del diccionario JSON mediante varios formatos de salida.
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
Para obtener más información sobre cómo devolver varios valores, vea Obtener varios valores.
Cambiar el nombre de las propiedades de una consulta
Las consultas siguientes muestran el uso del operador { } (hash de selección múltiple) para obtener un diccionario en lugar de una matriz al consultar varios valores. También muestra el cambio de nombre de las propiedades en el resultado de la consulta.
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
Para obtener más información sobre cómo cambiar el nombre de las propiedades de una consulta, vea Cambiar el nombre de las propiedades en una consulta.
Consulta de valores booleanos
Se supone que los valores booleanos son true, por lo que la "[?isDefault]" sintaxis de consulta del az account list comando devuelve la suscripción predeterminada actual. Para obtener los valores falsos, debe usar un carácter de escape, como \.
Las consultas siguientes muestran la consulta de todas las cuentas de una suscripción, lo que podría devolver una matriz JSON si hay varias suscripciones para una cuenta determinada y, a continuación, consultar qué cuenta es la suscripción predeterminada. También muestra la consulta de las cuentas que no son la suscripción predeterminada. Estas consultas se basan en lo que ha aprendido anteriormente para filtrar y dar formato a los resultados. Por último, la consulta final muestra cómo almacenar los resultados de la consulta en una variable.
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
- Para obtener más información sobre el filtrado de matrices y la consulta de valores booleanos, vea Filtrar matrices con expresiones booleanas.
- Para obtener más información sobre el uso de variables, consulte Uso de variables.
- Para obtener más información sobre cómo trabajar con suscripciones, consulte Administración de suscripciones.
Creación de objetos mediante variables y selección aleatoria
Establecimiento de un valor aleatorio para su uso en comandos posteriores
Establecer y usar un valor aleatorio para su uso en variables permite ejecutar scripts varias veces sin conflictos de nomenclatura. Los conflictos de nomenclatura se producen porque un valor debe ser único en el servicio o porque un objeto que eliminó todavía existe en Azure hasta que se complete el proceso de eliminación.
$RANDOM es una función bash (no una constante) que devuelve un entero de 16 bits con signo aleatorio (de 0 a 32767). El let comando es un comando de Bash integrado para evaluar expresiones aritméticas.
Con el comando siguiente se crea un valor suficientemente único para la mayoría de los propósitos.
let "randomIdentifier=$RANDOM*$RANDOM"
Trabajar con espacios y comillas
Los espacios se usan para separar comandos, opciones y argumentos. Use comillas para indicar al shell de Bash que omita todos los caracteres especiales, de los cuales un espacio en blanco es un carácter especial. Cuando Bash ve la primera comilla, omite los caracteres especiales hasta la comilla de cierre. Sin embargo, a veces necesitas que el shell de Bash analice determinados caracteres especiales, como signos de dólar, comillas inversas y barras invertidas. En este escenario, use comillas dobles.
Los siguientes comandos usan el comando az group create para ilustrar el uso de comillas simples y dobles. Estos comandos se usan para controlar espacios y evaluar caracteres especiales al trabajar con variables y crear un objeto.
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
En la salida del diccionario JSON, revise las propiedades del grupo de recursos que se creó.
Usar If Then Else para determinar si la variable es null
Para evaluar cadenas, use != y para evaluar números use -ne. La siguiente instrucción If Then Else evalúa si se ha establecido la variable $resourceGroup. Si es así, devuelve el valor de la variable. Si no, establece la variable .
if [ $resourceGroup != '' ]; then
echo $resourceGroup
else
resourceGroup="msdocs-learn-bash-$randomIdentifier"
fi
Uso de If Then para crear o eliminar un grupo de recursos
El script siguiente crea un nuevo grupo de recursos solo si aún no existe uno con el nombre especificado.
if [ $(az group exists --name $resourceGroup) = false ]; then
az group create --name $resourceGroup --location "$location"
else
echo $resourceGroup
fi
El script siguiente elimina un nuevo grupo de recursos existente si ya existe uno con el nombre especificado. Puede usar el --no-wait argumento para devolver el control sin esperar a que se complete el comando. Sin embargo, para este artículo, queremos esperar a que se elimine el grupo de recursos antes de continuar. Para más información sobre las operaciones asincrónicas, consulte Sugerencias para usar correctamente la CLI de Azure: operaciones asincrónicas. Se muestra el uso del --no-wait argumento al final de este artículo.
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
Utilizar Grep para determinar si existe un grupo de recursos y crear el grupo de recursos si no existe.
El siguiente comando canaliza la salida del az group list comando al grep comando . Si el grupo de recursos especificado no existe, el comando crea el grupo de recursos mediante las variables definidas anteriormente.
az group list --output tsv | grep $resourceGroup -q || az group create --name $resourceGroup --location "$location"
Uso de la instrucción CASE para determinar si existe un grupo de recursos y crear el grupo de recursos si no existe.
La siguiente instrucción CASE crea un nuevo grupo de recursos solo si aún no existe uno con el nombre especificado. Si existe una con el nombre especificado, la instrucción CASE devuelve que el grupo de recursos existe.
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
Uso de bucles for y consultas de matrices
En esta sección del artículo, creamos una cuenta de almacenamiento y, a continuación, usamos ciclos 'for' para crear archivos blob y contenedores. También se muestra cómo consultar matrices JSON y trabajar con variables de entorno.
Crear cuenta de almacenamiento
El comando siguiente usa el comando az storage account create para crear una cuenta de almacenamiento que se usa al crear contenedores de almacenamiento.
storageAccount="learnbash$randomIdentifier"
az storage account create --name $storageAccount --location "$location" --resource-group $resourceGroup --sku Standard_LRS --encryption-services blob
Obtención de las claves de la cuenta de almacenamiento
Los comandos siguientes usan el comando az storage account keys list para devolver los valores de clave de la cuenta de almacenamiento. A continuación, almacenamos un valor de clave en una variable para su uso al crear contenedores de almacenamiento.
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
Creación de un contenedor de almacenamiento
Comenzamos con el az storage container create para crear un único contenedor de almacenamiento y, a continuación, usamos la lista az storage container list para consultar el nombre del contenedor creado.
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
Carga de datos en el contenedor
El script siguiente crea tres archivos de ejemplo mediante un bucle for.
for i in `seq 1 3`; do
echo $randomIdentifier > container_size_sample_file_$i.txt
done
El script siguiente usa el comando az storage blob upload-batch para cargar los blobs en el contenedor de almacenamiento.
az storage blob upload-batch \
--pattern "container_size_sample_file_*.txt" \
--source . \
--destination $container \
--account-key $accountKey \
--account-name $storageAccount
El script siguiente usa el comando az storage blob list para enumerar los blobs del contenedor.
az storage blob list \
--container-name $container \
--account-key $accountKey \
--account-name $storageAccount \
--query "[].name"
El siguiente script muestra el total de bytes en el contenedor de almacenamiento.
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
Creación de muchos contenedores mediante bucles
A continuación, creamos varios contenedores mediante un bucle que muestra un par de formas de escribir el bucle.
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
Uso de EXPORT para definir variables de entorno
En los scripts de contenedor de almacenamiento anteriores, se especificó el nombre de cuenta y la clave de cuenta con cada comando. En su lugar, puede almacenar las credenciales de autenticación mediante las variables de entorno correspondientes: AZURE_STORAGE_ACCOUNT y AZURE_STORAGE_KEY. Para realizar esta acción, use 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.
El script siguiente crea una cadena de metadatos y, a continuación, usa el comando az storage container metadata update para actualizar un contenedor con esa cadena, de nuevo mediante las variables de entorno.
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
El comando siguiente usa el comando az storage container delete para eliminar un único contenedor con nombre y, a continuación, eliminar varios contenedores en un bucle.
az storage container delete \
--name $container
Obtenga la lista de contenedores que contienen un prefijo específico y almacene los resultados en una variable.
containerPrefix="learnbash"
containerList=$(az storage container list \
--query "[].name" \
--prefix $containerPrefix \
--output tsv)
Elimine la lista de contenedores de un bucle mediante el --prefix argumento .
for row in $containerList
do
tmpName=$(echo $row | sed -e 's/\r//g')
az storage container delete \
--name $tmpName
done
Control de errores
Para salir de un script inmediatamente si un comando devuelve un estado distinto de cero, ejecute el siguiente comando:
set -e
Para obtener más información sobre cómo establecer opciones de shell y otra ayuda, ejecute los siguientes comandos:
help set
help help
Limpieza de recursos
Después de completar este artículo, elimine el grupo de recursos y todos los recursos que contiene. Use el --no-wait argumento .
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
Consulte también
- Tutorial: Aprende a usar la CLI de Azure
- Uso correcto de la CLI de Azure
- Cómo consultar la salida de un comando de Azure CLI
- Buscar muestras y artículos publicados de la CLI de Azure