Bash Scripting Introducción#
¿Qué es bash?#
Bash (Bourne Again SHell) es la shell del Proyecto GNU, una shell es un interprete de comandos, que nos permite interactuar con nuestro sistema operativo.
Es una versión mejorada de sh y también incorpora algunas características de Korn shell (ksh) y C shell (csh).
Entre las mejoras podemos mencionar:
- Edición de linea de comandos.
- Historial de tamaño ilimitado.
- Control de trabajos.
- Funciones shell y alias.
- Arreglos indexados de tamaño ilimitado.
- Aritmetica con enteros de diferentes bases.
Configuración de Bash#
Cuando se invoca una shell de Bash de forma interactiva, Bash lee los siguientes archivos:
| Archivo | Descripción | Ámbito |
|---|---|---|
| /etc/profile | Contiene variables de entorno como HISTSIZE, PATH, USER | Sistema |
| /etc/bashrc | Contiene aliases de comandos y funciones | Sistema |
| ~/.bash_profile | Es usado para modificar las variables por defecto definidas en /etc/profile | Usuario |
| ~/.bashrc | Se definen aliases y funciones | Usuario |
Variables#
Las variables son cadenas de caracteres que representan pares de llave y valor KEY=VALUE normalmente escritas en mayúsculas.
Si una variable contiene mas de un elemento, estos se separan por : (dos puntos) KEY=VALUE0:VALUE2.
Si contienen espacios se utilizan comillas para definirlas KEY="VALUE 0".
Las variables se dividen en:
- Variables de entorno.
- Variables de shell.
Variables de Entorno#
Las variables de entorno son variables especiales (cómo $HOME), que contienen información acerca de el inicio de sesion de un usuario. Son almacenadas por la shell y son heredadas cuando cuando utilizamos comandos, o ejecutamos procesos. Estas variables existen en todos los sistemas operativos.
| Variable | Descripción |
|---|---|
| PATH | Variable que contiene las ubicaciones de binarios y ejecutables. |
| HOME | Variable que contiene el directorio por defecto de un usuario. |
| PWD | Variable que contiene el directorio de trabajo actual. |
| OLDPWD | Variable que contiene el directorio de trabajo anterior. |
| SHELL | Variable que contiene la shell utilizada por el usuario. |
| LANG | Variable que contiene el idioma actual del sistema. |
Por convención estas variables son definidas en mayusculas para distinguirlas del resto.
Variables de Shell#
Las variables de shell, son variables que existen unicamente en la shell donde fueran definidas, esto quiere decir que si se cierra la shell, se eliminan las variables.
Imprimiendo variables de Shell y de Entorno#
Para listar las variables de entorno podemos utilizar el comando printenv.
O también el comando env.
Ambos comando permiten listar las variables de entorno definidas, sin embargo cada uno tiene un uso especifico. Por ejemplo con printenv se puede consultar el valor de una sola variable
y con env podemos modificar el contenido de una variable de entorno para ser utilizada por un comando en especifico.Para visualizar las variables de shell podemos usar el comando set.
Built in commands#
Bash cuenta con comandos internos y externos, los comandos internos son comandos que vienen embedidos con la shell.
Podemos ver los comandos built in ejecutando
Para ver la ayuda de los comandos built in podemos ejecutarDefiniendo Variables de Shell y Variables de Entorno#
Para definir una variable solamente debemos ejecutar en una shell de bash lo suguiente:
Para definir una variable de entorno debemos utilizar el comando export. Para eliminar una variable se usa el comando unset Para acceder al valor de una variable se hace por medio de bracket expansion Ejemplo:¿Qué es un script?#
Un script es un archivo de texto plano, en donde se escriben instrucciones con palabras reservadas y comandos, para indicarle a la shell que debe hacer y cómo debe hacerlo.
Todo lo que normalmente escribes dentro de una linea de comandos, puede escribirse dentro de un script. Se acostumbra agregar una extension .sh para identificar los scripts, sin embargo recordemos que en linux las extensiones no son necesarias.
Para poder ejecutar un script, este debe tener permisos de ejecución, de forma predeterminada no los tendra, por lo que debemos agregarlos de la siguiente forma:
Posteriormente ejecutarlo de la siguiente forma:
La sintaxis anterior es debido a que cuando nosotros ejecutamos un comando, la shell trata de buscar el nombre que le indiquemos en los directorios definidos en la variable PATH.Lo anterior quiere decir que si nuestro script no se encuentra en dicho directorio, no sera ejecutado. Por lo tanto se agrega ./ para indicarle a la shell que el script esta en el directorio actual.
O tambien podemos indicar la ruta absoluta de la siguiente forma:
Hola Mundo en bash#
Shebang (#!)#
Esta es la primera linea de un script, se conoce como shebang y sirve para indicar la ubicacion del interprete que se debe usar para la ejecucion de un script.