Bash Script: define las variables Bash y sus tipos

Las variables son un aspecto importante de cualquier lenguaje de programación. Sin variables, no podrá almacenar ningún dato necesario. Con la ayuda de variables, los datos se almacenan en una dirección de memoria particular y luego se puede acceder a ellos y modificarlos cuando sea necesario. En otras palabras, las variables le permiten almacenar, leer, acceder y manipular datos. 

Trabajo de variables Bash

Cuando escribe un script bash, desea manipular la variable ya definida, establecer el valor de la variable o simplemente leer las variables predefinidas. Hay varias formas de establecer los valores de una variable:

1) Asignación directa del valor 

myvar="Gfg"

2) Establezca su valor de acuerdo con el valor del resultado obtenido del programa o un comando (consulte el tema de sustitución de comandos a continuación)

Si está asignando el valor de una variable a otra variable, use el signo «$», de lo contrario, mostrará un error:

Tenga en cuenta que cuando definimos el valor de newvar como myvar sin el signo «$», imprime el valor como «myvar» en lugar de obtener el valor de la variable «myvar».

Producción:

Guión de ejemplo:

 #! /bin/bash 
var1=5
Add () {
    var1=$(($var1 + 10))
    echo $var1 

}
Add 
#Assigning the output of function Add to another variable 'var2'.
var2=$var1
echo $var2

Producción:

15
15

3) La variable se puede leer simplemente usando el signo $antes del nombre de la variable. Ejemplo:

echo "The value of variable, myvar is $myvar"

Ahora que entendemos cómo se pueden leer las variables o asignarles un valor, veamos qué sucede después de ejecutar el script bash:

  • Comprueba las variables que están definidas en el script.
  • Interpreta el código línea por línea.
  • Luego reemplaza los nombres de las variables con sus valores asignados.
  • Finalmente, ejecute el código línea por línea repitiendo el proceso anterior.

Nombrando variables

Hay algunas reglas a tener en cuenta al nombrar una variable:

  • Las variables pueden comenzar con un carácter alfanumérico o un guión bajo, seguido de una letra, un número o un guión bajo.
  • Las variables distinguen entre mayúsculas y minúsculas, por lo que «gfg» y «Gfg» son dos variables diferentes.
  • Las variables no pueden comenzar con un número.
  • No utilice caracteres especiales al definir un nombre de variable.

Ejemplo de nombres de variables correctamente definidos

gfg
GFG
Gfg
_gfg
g_f_g
March6

Ejemplos de nombres de variables mal definidos

6March
567
!gfg
@Gfg
gfg*GFg

Sintaxis para declarar la variable o establecer su valor

Declarar o establecer el valor de una variable es bastante simple. La sintaxis básica es la siguiente:

variableName=value

Ejemplo :

myvar=geeks

No debe haber ningún espacio entre el nombre de la variable, el signo igual y el valor asignado. De lo contrario, encontrará un error:

Si el valor de la variable contiene espacios, utilice comillas para definirlos.

myvar="Geeks for geeks"

También puede declarar una variable usando el comando declare :

declare myvar="geeks"

Uso de variables locales y globales en bash

Cuando define una variable en su shell, solo se puede acceder a ella durante esa sesión en particular. Porque esa es una variable local. En el siguiente ejemplo, puede ver que cuando intentamos acceder a la variable «var1» en la nueva sesión (número de sesión 1692), no muestra el valor de nuestra variable.

Nota: echo $$se usa para imprimir el ID de proceso de la sesión actual (ver variables especiales a continuación)

Para hacer que la variable sea accesible globalmente para cualquier sesión/proceso secundario (de la sesión actual), podemos utilizar el comando ‘exportar’. Con el comando de exportación, también puede acceder a la variable definida en su sesión anterior en otra sesión. Ejemplo:

Veamos ahora cómo definir variables locales y globales mientras se escribe un script de shell. No es diferente a cualquier otro lenguaje de programación.

Cree un archivo var.sh, usando el comando:

touch var.sh

Ábralo en el editor vim usando el comando:

vim var.sh

Vaya al modo de inserción presionando Esc y ‘i’.

En este script, definiremos una variable global ‘myvar’ y una variable local ‘myvar’. Luego intentaremos cambiar el valor de la variable ‘myvar’ dentro de nuestra función. Finalmente, intentamos llamar a la función e imprimir el valor tanto de las variables locales como de las variables globales. Veremos que solo se cambiará el valor de la variable local.

#! /bin/bash 
myvar=5

function calc(){

# use keyword 'local' to define a
# local variable 
local myvar=5
(( myvar=myvar*5 )) 

# print the value of local variable 
echo $myvar 
}

# call the function calc 
calc 

# print the value of global variable and
# observe that it is unchanged.
echo $myvar 

Guarde el archivo usando “:wq!”.

Y ejecutarlo usando el comando:

bash var.sh

La salida:

El primer valor que se imprime es de nuestra variable local y el segundo valor es de nuestra variable global que no cambió, independientemente de la operación que realizamos dentro de la función ‘calc’.

Tipos de variables bash

Hay dos tipos de variables en bash:

  • Las variables definidas por el sistema o variables de entorno
  • Variables definidas por el usuario

Variables definidas por el sistema  

Estas son variables predefinidas o las variables que son creadas y mantenidas por el shell bash de Linux. Estas variables se cargan cuando abre una nueva sesión de bash. Estas variables se utilizan para definir las propiedades del sistema. Se definen con letras mayúsculas. Veamos ahora algunas de las variables definidas por el sistema:

  1. BASH_VERSION
  2. INTENTO
  3. PCD
  4. OSTIPO
  5. HOGAR
  6. IDIOMA
  7. NOMBRE DE HOST
  8. SENDERO
  9. COLUMNAS
  10. USUARIO

Nota : Hay más variables definidas por el sistema. Arriba están las variables comunes definidas por el sistema.

Puede ver la lista de variables definidas por el sistema usando los siguientes comandos:

  • establecer
  • env
  • imprimirv

La salida se ve así:

  1. BASH_VERSION: muestra el nombre de su versión actual de bash.
  2. BASH: muestra el nombre del shell.
  3. PWD: Significa «Directorio de trabajo actual». Muestra la ruta a su directorio de trabajo actual.
  4. OSTYPE: simplemente muestra el nombre del sistema operativo.
  5. INICIO: Muestra el directorio de inicio del usuario actual.
  6. LANG: Muestra el idioma del sistema Linux. Ejemplo: LANG: en_IN
  7. HOSTNAME: muestra el nombre del host. Ejemplo: kali
  8. RUTA: Muestra una lista ordenada de rutas (separadas por dos puntos). Ejemplo:

        9. COLUMNAS: Muestra la longitud de la columna utilizada para mostrar la salida en el terminal.

        10. USUARIO: Muestra el usuario actual. Ejemplo: raíz

Variables definidas por el usuario  

Estas son las variables que usted define y asigna un valor.  

Sintaxis:

variable_name=value

Ejemplo:

myvar=gfg

Si el valor de la variable contiene espacios, utilice comillas para definirlos.

myvar="Geeks for geeks"

Guión de ejemplo:

  • Cree un archivo llamado – gfg.sh.

  • Abra el editor vim y vaya al modo de inserción presionando Esc y escribiendo ‘i’.
  • Escribe el guión:
#! /bin/bash
myvar=Hello
newvar=”welcome to gfg”
echo “$myvar, $newvar”
#variables are case sensitive
Myvar=”Hi again!”
echo “$Myvar”
  • Guarde los cambios presionando Esc y “:w”.
  • Y luego sal presionando Esc y “:q”.
  • Ejecute el script usando el comando: «bash gfg.sh»

Tenga en cuenta que se recomienda (pero no es obligatorio) definir su variable en minúsculas. Para asegurarse de que el nombre de la variable definida no coincida con el nombre de la variable definida por el sistema.  

Las variables definidas por el usuario se eliminan después de que se ejecuta el script de shell. Por el contrario, cualquier otra aplicación puede acceder a las variables definidas por el sistema y no se almacenan en ningún archivo.

Variables especiales incorporadas

Bash viene con algunas variables especiales incorporadas. Estas variables almacenan algunos datos importantes que pueden ser útiles cuando escribe un script de shell. Están disponibles para su uso por todos los usuarios. A continuación se muestra la lista de estas variables especiales y el resultado que almacenan:

variable especial Resultado almacenado
$$ Representa el ID de proceso del shell actual del usuario. Ejemplo: 1692
ps Devuelve el estado de salida del último comando ejecutado. Ejemplo: 127–> Este es el estado de salida si no se encontró el comando.
$0 Representa el nombre del script.
$1-$9 $1 a $9 representa el argumento 1 a 9 pasado con el script.
${10}-${n} Representa el argumento 10 al argumento n pasado con el script.
ps Representa la longitud de cualquier valor o el número de argumentos pasados ​​al script dado.
$@ o $* Representa la lista de todos los argumentos que se pasan al script.

Variable especial- $$

Esta variable especial proporciona el PID o identificador de proceso del shell actual. En el caso de un script de shell, proporciona el PID bajo el cual se ejecuta el script.

Variable especial-$?

Cada comando devuelve un estado de salida. Por lo tanto, el estado de salida se puede usar para identificar si el comando finalizó con éxito o hubo algún error.

Algunos estados de salida comunes:

Estado de salida Razón
0 Éxito
1-255 Falla
1 Catchall para errores generales
2 Mal uso de shell incorporados
13 Permiso denegado
126 Comando encontrado pero no es ejecutable
127 Comando no encontrado

Usando variables de array en Bash

Las arrays se utilizan para almacenar datos y en bash, puede almacenar valores de diferentes tipos o del mismo tipo en una array.

Hay varias formas de declarar una array y sus elementos. En este tutorial, sin embargo, declararemos una array definiendo elementos separados por espacios.

Sintaxis:

arrayName=(element1 element2 element3 element4)

Nota : si su elemento incluye espacios en blanco, encierre ese elemento entre comillas.

Sintaxis para obtener la longitud de la array:

{#arrayName[@]}

Sintaxis para obtener un elemento de array en particular:

{arrayName[index]}

Sintaxis para obtener la longitud de un elemento de array en particular:

{#arrayName[index]}

Guión de ejemplo: 

En este ejemplo, escribiremos un script para iterar a través de los elementos de la array, imprimir sus nombres y longitudes respectivas.

Cree un archivo llamado «myarray.sh». Abra el archivo en el editor vim. 

#! /bin/bash

# declare an array with pre-defined values 
declare -a my_data=(Learning "Bash variables" from GFG); 

# get length of the array 
arrLength=${#my_data[@]}

# print total number of elements in the array
echo "Total number of elements in array is: $arrLength"

# iterate through the array and print length of 
# each element and their values
echo "Below are the elements and their respective lengths:"
for (( i=0; i<arrLength; i++ ));
do
    echo "Element $((i+1)) is=> '${my_data[$i]}'; and its length is ${#my_data[i]}"
done

# print the whole array at once
echo "All the elements in array : '${my_data[@]}'"

Producción:

Declarar explícitamente el tipo de datos de una variable

En bash, no necesitamos declarar tipos de datos, como cualquier otro lenguaje de programación (int, str, etc.). El tipo de datos es identificado por el propio shell script/shell (las variables definidas en bash se denominan sin tipo). Pero puede haber algunas circunstancias en las que desee definir explícitamente el tipo de datos. En tales casos, puede utilizar el comando declare para crear una variable con un tipo de datos particular. Los comandos de declaración ofrecen muchos indicadores para declarar explícitamente los tipos de datos. A continuación se muestra la lista de esas banderas:

 

Entero

Puede declarar un número entero usando el siguiente comando:

declare -i myvar

Ahora que definió el tipo de datos de la variable «myvar» como un número entero, si intenta asignar su valor como un número flotante obtendrá un error.

Tenga en cuenta que si intenta asignar el valor de «myvar» como una string. Evalúa la string «xyz» como un número entero y, por lo tanto, imprime 0. Mientras que el número flotante da un error.  

Formación 

Declarando array usando la bandera ‘-a’.

declare -a myarray

o

declare -a myarray=([element1 element2 element3])

Array asociativa 

Declarar una array asociativa usando la bandera ‘-A’ 

declare -A newArray=([key1]=value1 [key2]=value2 [key3]=value3)

Imprime todos los valores de una array usando el comando:

 ${newArray[@]}

o

${newArray[*]}

Ejemplo:

Imprime todas las claves de una array usando el comando:

${!newArray[@]}

o

${!nuevoArray[*]}

Para imprimir tanto la clave como el par de valores, puede usar for loop:

# ! /bin/bash
# declare array
declare -A newArray=([Ron]=10 [John]=30 [Ram]=70 [Shyam]=100)

# iterate through the array
for key in "${!newArray[@]}";
do
    echo "$key scored : ${newArray[$key]} in Math test";
done

Producción:

Argumentos de la línea de comandos

Los argumentos de la línea de comandos o los parámetros posicionales se utilizan para pasar la entrada a un script de shell o un comando. El uso de argumentos de línea de comandos hace que el script sea más dinámico.

Sintaxis:

bash script.sh argument1 argument2 argument3 argument4 .......

Puede pasar las variables especiales descritas anteriormente como un argumento a su script de shell.

Ejemplo:

Cree un script llamado «example1.sh». 

#! /bin/bash 
# declare a variable which will store all
# the values of our arguments, in doing so
# we will make use of the special variable 
# "$@". Alternatively, "$*" can also be used. 

myvar=("$@")

# Lets store the length of the number of arguments 
# (currently unknown) in another variable.
# Here we can make use of the special variable '$#' 

le="$#"
echo $le
# let us now print the arguments that user 
# passed by looping through the length of
# the number of arguments

for (( i=0; i<le; i++ ))
do
    echo "Argument $((i+1)) is => ${myvar[i]}"
done

En el script anterior, hicimos uso de las variables especiales «$@» y «$#». 

Intentemos ahora hacer uso de otras variables especiales. 

Cree otro script «example2.sh»

#! /bin/bash 

echo "The process ID of current shell is: $$" 
echo "The exit status of last executed command was: $?"
echo "The name of this script is: $0"
echo "First argument passed to this script is: $1"
echo "Second argument passed to this script is: $2"
echo "Total number of arguments passed to this script is: $#"
echo "His full name is: $1 $2"

Puede notar que el uso de argumentos de línea de comando lo ayuda a reducir la cantidad de variables que se definirán en un script.

Sustitución de comandos 

A veces, mientras escribe un script de shell, encontrará algunos casos en los que desea asignar la salida de un comando en particular a una variable. Esto se puede hacer con la ayuda de la sustitución de comandos. La sustitución de comandos generalmente funciona ejecutando un comando de shell en particular y almacenando su resultado en una variable para su uso posterior o para mostrar.

Sintaxis:

varname=`command-name`
Example: myvar=`ls`

o

varname=$(command-name)
Example: myvar=$(ls)

En los ejemplos anteriores, la salida del comando: ‘ls’ se almacenará en la variable ‘myvar’. Ahora veamos el resultado que obtenemos después de imprimir la variable ‘myvar’:

Es evidente a partir de los resultados de la primera terminal (es decir, simplemente ejecutando el comando ‘ls’) que la salida se extiende a varias líneas. Mientras que si usamos la sustitución de comandos, la salida se imprime en una sola línea (separada por espacios).

Publicación traducida automáticamente

Artículo escrito por tanishkaashi567 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *