GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Scripting - Variables explicadas con ejemplos

Las variables son conceptos muy importantes en cualquier lenguaje de programación con el que trabaje. Piense en una variable como un contenedor en la memoria que almacena datos de cierto tipo. El objetivo principal de las variables es almacenar un valor y acceder a él más tarde para su procesamiento. Si usted es alguien de otros lenguajes de programación como Java, C, C++, puede encontrar diferencias en cómo difiere la definición de variable, ya que Bash no tiene un sistema de tipo sólido.

Bash maneja dos tipos de variables. Ellos son:

  • Variables definidas por el usuario :Variables que usted crea y manipula.
  • Variables ambientales :creado y almacenado por bash o aplicaciones para el propósito del sistema/aplicación.

Comenzaremos a trabajar con variables definidas por el usuario seguidas de variables ambientales.

1. Cómo crear una variable

La variable debe tener un identificador (nombre de variable) y un valor asignado como se muestra a continuación. El identificador (nombre de la variable) es "site_name" y el valor asignado es "OSTechnix" .

$ site_name="OSTechnix"
$ this_year=2021
$ value_of_pi=3.14

Hay algunas cosas que debe recordar al crear variables.

  • No debe haber espacios entre el nombre de la variable y el valor.
  • Trate de evitar el uso de nombres que ya se utilizan, como palabras clave reservadas de bash, variables y nombres de funciones que crearán conflictos.
  • Cree nombres de variables descriptivos y los nombres de variables pueden tener letras, números, guiones bajos y dígitos.

La convención de nomenclatura de variables es discutible ya que he visto a diferentes personas usar diferentes convenciones para crear nombres de variables. Algunos crean variables definidas por el usuario usando mayúsculas y minúsculas como las creé en el ejemplo anterior y algunos crean nombres de variables con mayúsculas completas. No hay reglas estrictas en bash, pero sé consistente con el método que elijas. Prefiero nombrar mis variables en mayúsculas y las constantes en mayúsculas.

2. Cómo acceder a las variables de Bash

Hay dos formas de acceder a una variable. Uno está usando "$ symbol" seguido del nombre de la variable y el segundo método utiliza el "$ symbol" seguido de llaves y el nombre de la variable dentro de las llaves.

$ echo $site_name
OSTechnix
$ echo ${this_year}
2021
$ echo ${this_year} $value_of_pi
2021 3.14

3. Reasignar valor a una variable

Bash no tiene un sistema de tipo fuerte, lo que significa que no hay reglas estrictas para definir el tipo de datos al crear las variables. La variable Bash almacena todos los valores como cadenas y sabe inteligentemente cuándo trabajamos con cálculo numérico.

Puede reasignar cualquier valor a una variable que ya está creada.

$ os_name="PoP_OS!"
$ echo ${os_name}
PoP_OS!
$ os_name="Linux Mint"
$ echo ${os_name}
Linux Mint

4. Declarando tipo de datos para una variable

Puedes usar declare comando para crear una variable con un tipo de datos específico. Accede a la sección de ayuda de declare Comando para saber más al respecto.

$ declare --help

Por ejemplo, si desea crear una variable con int tipo de datos, puede usar declare comando con -i bandera.

$ declare -i pi
$ pi=3
$ echo $pi
3
$ pi=3.14
bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")

Recuerde, declare El comando es una forma de manipular el atributo de su variable, pero no espere un sistema de tipo fuerte de declare comando como en otros lenguajes de programación.

5. Salida de comando a una variable

Puede ejecutar cualquier comando bash y almacenar la salida del comando en la variable. Tienes que ejecutar el comando dentro de $() como a continuación y luego use la variable para su posterior procesamiento.

$ today_date=$(date)
$ echo ${today_date}
Saturday 11 September 2021 08:53:25 PM IST

6. Uso de comillas con variable

En bash, las comillas simples y dobles se comportan de dos maneras diferentes. Las comillas simples evitarán la expansión y tratarán el valor como literal. Las comillas dobles permitirán la expansión.

Eche un vistazo al siguiente ejemplo. Creé una variable llamada "which_year" y ejecutar un comando junto con una cadena. Cuando uso comillas dobles la date el comando se expandirá, pero cuando se usen comillas simples, date el comando no se ejecutará y se almacenará tal como está en la variable.

$ which_year="I am in year : $(date +%Y)"
$ echo ${which_year}
I am in year : 2021
$ which_year='I am in year : $(date +%Y)'
$ echo ${which_year}
I am in year : $(date +%Y)'

7. Eliminando la variable

Puede eliminar la variable usando unset dominio.

El Unset El comando elimina los valores y atributos de variables y funciones.

Puedes usar unset con -v bandera que apunta a una variable o simplemente unset comando que por defecto primero comprueba la definición de la variable y la desactiva.

$ echo ${which_year}
$ unset -v which_year (or) unset which_year
$ echo ${which_year}

Para obtener más detalles, consulte unset sección de ayuda de comandos.

$ unset --help

8. Variable de solo lectura

Un estado de solo lectura significa que no puede cambiar el valor o eliminar la variable una vez que se crea. Hay dos formas de crear la variable de solo lectura.

Use bash incorporado readonly para crear la variable de solo lectura.

$ readonly var1="This is a readonly variable"

Alternativamente, puede usar declare comando con -r bandera.

$ declare -r var2="This is a readonly variable too"

No puede reasignar o desactivar el readonly valor variable, arrojará un error.

$ var2="Reassigning with new value"
bash: var2: readonly variable
$ unset var1
bash: unset: var1: cannot unset: readonly variable

9. Variables especiales integradas de Bash

Bash tiene algunas variables integradas especiales que se dedican a almacenar ciertos resultados. Eche un vistazo a la siguiente lista de variables.

$? = Stores exit status of last ran the command.
$$ = Stores process ID for your bash session.
$0 = Script name.
$1 .. $9 = Arguments passed to the script.
$# = Count the length of values
[email protected], $* = Stores array of all values.

9.1. Estado de salida ($?)

Cada comando de Linux que ejecuta tiene un código de salida asociado de (0-255). Cero apunta al éxito y el resto apunta al fracaso con un significado diferente.

$ whoami
$ echo $?
0
$ asdf # WRONG COMMAND
$ echo $?
127

9.2. Identificación del proceso ($$)

Usando $$ variable operador, puede obtener el ID del proceso bash. Si lo ejecuta desde la terminal, le dará la identificación del proceso para su sesión actual.

$ echo $$
195777 # PROCESS ID OF MY CURRENT TERMINAL SESSION

9.3. Nombre del script y argumentos ($0-$9)

Los argumentos se pueden pasar a sus scripts y es posible que ya los haya estado usando en su vida cotidiana. Echa un vistazo al id comando que acepta nombre de usuario como argumento.

$ id karthick
uid=1000(karthick) gid=1000(karthick) groups=1000(karthick),4(adm),27(sudo),119(lpadmin),998(docker)

De manera similar, puede crear scripts que acepten argumentos. Cree un script de shell de muestra y copie/pegue el siguiente fragmento en él.

cat > main.sh
#!/bin/bash

echo "+ script_name=$0 "
echo "+ first_argument=$1 "
echo "+ second_argument=$2 "
echo "+ third_argument=$3 "

Ahora ejecute el script y pase los argumentos. Estoy pasando 1 a 3 como argumentos. $0 recoge el nombre del script con la ruta absoluta ya que pasé la ruta absoluta y $1 a $3 se asigna con los respectivos argumentos pasados.

$ /home/karthick/main.sh 1 2 3
+ script_name=/home/karthick/main.sh 
+ first_argument=1 
+ second_argument=2 
+ third_argument=3 

9.4. Longitud de un valor ($#)

Usando $# , puede calcular el número total de argumentos pasados ​​o contar la longitud de cualquier valor. Eche un vistazo al siguiente ejemplo. Prefije el nombre de la variable con # e imprimirá la longitud del valor en lugar del valor real.

$ site_name="OSTechnix"
$ echo ${#site_name}
9

10. Ámbito variable

Es importante que comprenda el alcance de una variable. Cuando crea una variable en la terminal o a través de un script de shell, esa variable está vinculada y disponible solo para esa sesión. También puedes decirlo como una variable local. Si intenta acceder a la variable desde otras sesiones, la variable no estará disponible.

Eche un vistazo a la imagen de abajo que le dará una buena comprensión de lo que sucede.

  1. Crear variable site_name="OSTechnix" desde su shell actual y acceda a la variable.
  2. Utilice la variable $$ variable para ver en qué sesión estás.
  3. Cree una nueva sesión bash escribiendo "bash" .
  4. Intente acceder a la variable site_name de esta sesión. Obtendrá una salida vacía, que es el comportamiento predeterminado en bash.
  5. Salga de la nueva sesión escribiendo "Exit" y ahora intente acceder a la variable y podrá acceder a la variable.

Si desea acceder a la variable globalmente desde cualquier sesión, debe usar export comando que hará que la variable esté disponible para ser accedida en todas las sesiones/procesos secundarios creados a partir de su sesión actual.

$ site_name="OSTechnix"
$ export site_name

O

$ export site_name="OSTechnix"
$ bash
$ echo ${site_name}

Puede obtener la lista de variables a exportar escribiendo "export" de la terminal Obtendrá listas de variables ambientales y definidas por el usuario.

$ export

11. Variable de entorno

Hasta ahora hemos visto cómo trabajar con variables definidas por el usuario. En la sección de introducción, mencioné que bash admite variables ambientales. Este conjunto de variables se cargará cuando inicie sus sesiones de bash y bash las mantendrá. Estas variables ambientales son utilizadas por las aplicaciones para decidir el comportamiento.

Por ejemplo, nano está configurado como el editor predeterminado para editar crontab . Si deseo usar Vim en lugar de nano, puedo configurar el EDITOR env y crontab buscará esta variable de entorno y la usará.

$ export EDITOR="vim"
$ crontab -e

Aviso: Su variable está vinculada solo a su sesión actual. Si desea que sea persistente, debe ponerlo en ~/.bashrc o ~/.bash_profile .

Puede obtener la lista de variables ambientales ejecutando "printenv" dominio. Verás que las variables ambientales están definidas con mayúsculas.

$ printenv

También puede acceder a la variable ambiental particular con el comando printenv. A continuación se presentan algunas de las variables ambientales comunes con las que se encontrará.

$ printenv USER # PRINTS USER NAME
karthick
$ printenv HOME # USER HOME DIRECTORY LOCATION
/home/karthick
$ printenv PWD # PRESSENT WORKING DIRECTORY
/home/karthick
$ printenv SHELL # WHICH SHELL I AM USING NOW
/bin/bash
$ printenv PATH # PATH WHICH IS USED BY BASH TO CHECK AND RUN COMMANDS
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Conclusión

En esta guía de variables de Bash, comenzamos con una breve introducción sobre las variables y cómo crear, acceder, cambiar y desarmar en su sección respectiva. Y luego hemos visto cuál es la diferencia entre las variables definidas por el usuario y las ambientales. Intente explorar la lista de variables ambientales que se cargan en sus sesiones que le darán una buena comprensión de Bash.

Lectura relacionada:

  • Secuencias de comandos de Bash:bucle For explicado con ejemplos
  • Secuencias de comandos de Bash:ciclo while y till explicado con ejemplos
  • Bash Scripting:funciones explicadas con ejemplos
  • Comando Bash Echo explicado con ejemplos en Linux
  • Tutorial de Bash Heredoc para principiantes
  • Redireccionamiento de Bash explicado con ejemplos
  • Diferencia entre la definición de variables Bash con y sin exportación

Linux
  1. Cómo escribir un script Bash con ejemplos

  2. Diferencia entre la definición de variables Bash con y sin exportación

  3. Bash secuencias de comandos (I)

  4. Declaración de Bash If-Else con ejemplos

  5. Alias ​​con variable en bash

Comando Tr en Linux explicado con ejemplos

Bash Beginner Series #2:Comprender las variables en Bash Shell Scripting

Bash Scripting Part2 – Bucles for y while con ejemplos

Tutorial de introducción a Bash Scripting con 5 ejemplos prácticos

Tutorial de variables Bash:6 ejemplos prácticos de variables locales y globales de Bash

Bash Script for Loop explicado con ejemplos