Skip to content

Commit 6d75f0b

Browse files
committed
Reorganized bash stuff
1 parent d023eaf commit 6d75f0b

6 files changed

Lines changed: 847 additions & 24 deletions

File tree

00-fundamentos-linux/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.vagrant/
2+
*.log

00-fundamentos-linux/02-trabajando-con-la-cli/02-introduccion-a-bash.md

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Introducción a scripting
2+
3+
Cuando hablamos de _scripting_ en Linux por lo general nos referimos a _BASH scripting_ aunque en la realidad un script no es más que una serie de instrucciones ejecutadas por un itérprete y ese intérprete no tiene por que ser BASH.
4+
5+
Cuando ejecutamos un script (o programa) Linux carga el contenido del script y sus instrucciones en memoria por lo que se crea un proceso que representa la instancia de ese programa.
6+
7+
Por convención solemos darle una extensión específica para representar el lenguaje de su contenido como `.js`, `.py`, `.html` aunque para Linux las extensiones no son obligatorias para crear un fichero ejecutable. Sí es cierto que algunos entornos (e.j. GUI) sí asocian extensiones a programas para determinar cómo ejecutarlos.
8+
9+
En este apartado nos centraremos en la shell BASH y BASH scripting
10+
11+
## ¿Cómo ejecutar un script BASH?
12+
13+
Vamos a crear el 'Hola mundo' en BASH. Para ello crearemos un fichero `helloworld` con el siguiente contenido:
14+
15+
```bash
16+
echo "Hello world!"
17+
```
18+
19+
Para ejecutarlo un script en BASH, invocaremos al comando bash pasándole como argumento la ruta a nuestro script. Ejemplo:
20+
21+
```shell
22+
$ bash ./helloworld
23+
Hello world!
24+
```
25+
26+
Otra opción es utilizar el _built in command_ `.` (dot) pasándole como argumento la ruta a nuestro script:
27+
28+
```shell
29+
$ . ./helloworld
30+
Hello world!
31+
```
32+
33+
O incluso con el comando `source`:
34+
35+
```shell
36+
$ source ./helloworld
37+
Hello world!
38+
```
39+
40+
Sí es cierto que en la práctica cuando invocamos algunos comandos no necesitamos anteponer su intérprete como, por ejemplo, el comando `egrep` que es otro BASH script. Esto es posible debido a dos motivos:
41+
42+
- El script tiene **permisos de ejecución**.
43+
- El script sabe qué intérprete usar.
44+
45+
Para poder hacer un script ejecutable necesitamos darle permisos de ejecución. En apartados posteriores veremos cómo funcionan el sistema de permisos en Linux. Por ahora para hacer nuestro script ejecutable haremos lo siguiente:
46+
47+
```shell
48+
$ chmod +x ./helloworld
49+
```
50+
51+
Por último nos falta añadir el **_shebang_**. Es una instrucción que debe de ir al principio del fichero e indica el intérprete que debe de ejecutar. Se indica mediante `#!` seguido de la ruta absoluta del intérprete, en nuestro caso el intérprete es `/bin/bash`:
52+
53+
```shell
54+
#!/bin/bash
55+
56+
echo "Hello world!"
57+
```
58+
59+
Ahora podemos ejecutarlo sin el comando `bash` directamente mediante su ruta y nombre de archivo:
60+
61+
```shell
62+
$ ./helloworld
63+
Hello world!
64+
```
65+
66+
Gracias a este _shebang_ podemos crear scripts no sólo de BASH si no de cualquier otro lenguaje interpretado, veamos un ejemplo en python creando el fichero `helloworld.py`:
67+
68+
```py
69+
#!/usr/bin/python3
70+
71+
def say(message):
72+
print(message)
73+
74+
say("Hello world from Python")
75+
```
76+
77+
Volvemos a darle permisos de ejecución y probamos su ejecución:
78+
79+
```shell
80+
$ chmod +x ./helloworld.py
81+
$ ./helloworld.py
82+
Hello world from Python
83+
```
84+
85+
También es posible utilizar el comando `/usr/bin/env` pasándole el nombre del intérprete como argumento:
86+
87+
```py
88+
#!/usr/bin/env python3
89+
90+
def say(message):
91+
print(message)
92+
93+
say("Hello world from Python")
94+
```
95+
96+
Existen muchas variables que están preestablecidas al utilizar una shell BASH. Muchas de ellas son estáticas y unas pocas cambian conforme interactuamos con el sistema. Para ver el listado de todas las variables disponibles podemos utilizar el comando `env` sin argumentos.
97+
98+
```shell
99+
$ env
100+
SHELL=/bin/bash
101+
LANGUAGE=en_US:
102+
PWD=/home/vagrant
103+
LOGNAME=vagrant
104+
XDG_SESSION_TYPE=tty
105+
MOTD_SHOWN=pam
106+
HOME=/home/vagrant
107+
LANG=C.UTF-8
108+
...
109+
```
110+
111+
```shell
112+
$ echo Mi usuario es $USER
113+
Mi usuario es vagrant
114+
$ echo Mi usuario es USER
115+
Mi usuario es USER
116+
```
117+
118+
> También podemos utilizar el comando `printenv <varname>` para mostrar el contenido de una variable. Sin argumentos mostrará t
119+
120+
En apartados posteriores de _scripting_ veremos cómo trabajar con variables.

0 commit comments

Comments
 (0)