0% encontró este documento útil (0 votos)
45 vistas47 páginas

Introducción a Scripts Bash en Linux

Este documento habla sobre scripts en Bash. Bash es un intérprete de comandos que permite automatizar tareas a través de scripts. Los scripts en Bash requieren un editor de texto y conocimientos básicos como los modos de Vim y Nano. El documento explica cómo crear un script simple en Bash, establecer permisos de ejecución y ejecutarlo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
45 vistas47 páginas

Introducción a Scripts Bash en Linux

Este documento habla sobre scripts en Bash. Bash es un intérprete de comandos que permite automatizar tareas a través de scripts. Los scripts en Bash requieren un editor de texto y conocimientos básicos como los modos de Vim y Nano. El documento explica cómo crear un script simple en Bash, establecer permisos de ejecución y ejecutarlo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Sistemas GNU-LINUX

Rodrigo Ortiz Fallas


Trabajar con scripts Bash
SCRIPTS EN BASH

• ¿QUE ES BASH?

• Bash es un intérprete de comandos (lo que normalmente puedes encontrar en la


literatura anglosajona como shell). Se trata de una interfaz de usuario con la que
relacionarte con el sistema operativo con el que estás trabajando. Así, esta
aplicación es capaz de leer y ejecutar instrucciones.

• Además de Bash existen otros muchos intérpretes de comandos, como sh, o el


intérprete de comandos de Korn, conocido como ksh o el C shell, csh.
• UN POQUITO DE HISTORIA SOBRE BASH
• Por ponerte en contexto, indicarte que Bash es un acrónimo de Bourne-
again shell. Un juego de palabras que viene a significar algo así como nacido
de nuevo.
• Desde ese momento, Bash se ha convertido en el intérprete de comandos más
popular de los utilizados en Linux.
• Actualmente, Bash, también se puede encontrar en algunas versiones de Linux.
• ¿PORQUE NECESITAS SCRIPTS EN BASH?
• Una de las principales razones para iniciarte en el mundo del scripting
es sin lugar a dudas la automatización.
• Pero ¿para qué automatizar?
• ¿QUE NECESITAS PARA APRENDER A REALIZAR SCRIPTS EN BASH?

• UN EDITOR DE TEXTO
• A parte de un sistema operativo que tenga Bash, también se necesita un editor de texto.
El terminal
• El terminal, además de administrar sistemas, permitirá ser más productivo. Podemos hacer
cualquier cosa que podamos imaginar, sin que estemos pendientes y consumiendo los
mínimos recursos.
• Uso de emuladores en tu navegador
• Otra opción muy interesante es utilizar un emulador. Se recomienda diferentes
servicios, entre los cuales puedes encontrar,
• JSLinux
• Copy.sh
• Webminal
• Unix Terminal Online
Visores y editores para el terminal
• El terminal de línea de comandos es una de las principales herramientas del día a día de
desarrolladores a la hora de crear una web y administradores de sistemas y la edición de
texto una de las tareas más habituales que desempeñamos vía consola.
Vim
• Vim. Es el más potente de los editores por línea, con comandos y atajos de gran utilidad. Tanto es así, que
muchos desarrolladores usan únicamente Vim en su día a día, obteniendo básicamente el mismo nivel de
utilidades que muchos editores de interfaz gráfica.

• Cómo iniciar con Vim


Los modos de Vim
• Modo comando
• Cuando abrimos un archivo para editar con Vim, algo que conseguimos desde el terminal con el
comando vim seguido del nombre del archivo que se desea editar.

• Una vez abierto Vim, se inicia en modo comando.


• El modo comando permite realizar gran cantidad de acciones administrativas sobre el fichero, como
buscar en el texto, salir, guardar, borrar líneas, etc.
Los modos de Vim
• Modo inserción

• El modo inserción nos sirve cuando queremos editar el texto del archivo, añadiendo nuevo
contenido con el teclado, o borrando carácter a carácter con las correspondientes teclas
(Retroceso/Supr).

• Estando en modo comando, pasamos a modo inserción pulsando la tecla i.

• Para salir del modo inserción y volver al modo comando pulsamos la tecla escape Esc.
Los modos de Vim
Modo Línea de comandos
• Puede usar este modo para jugar con algunos comandos. Pero los comandos en este
modo tienen el prefijo de dos puntos (:). Puede cambiar a este modo presionando : (dos
puntos) en el Modo Comando.

Modo Visual
• Utiliza este modo para seleccionar visualmente algún texto y ejecutar comandos sobre
esa sección de código. Puede cambiar a este modo presionando v desde el Modo
Comando.
Guía esencial de Vim
• Los comandos más útiles y necesarios para los primeros pasos con Vim
• Para algunos de estos comandos es necesario pulsar la tecla Enter para que realmente se
ejecuten. En este caso, los comandos aparecerán en la parte de abajo del terminal, para que
veamos qué es lo que se va a ejecutar.
Guía esencial de Vim
• Ejemplo
a. Ejecute el siguiente comando para crear un nuevo archivo: :edit sample.txt

b. Para agregar algo de texto al archivo creado, presione i en el teclado.


Guía esencial de Vim
• Ejemplo
c. En este modo, puede escribir lo que quiera en el archivo.

d. Para cambiar al Modo Comando desde el Modo Insertar, debe presionar la tecla Esc.
Guía esencial de Vim
• Ejemplo
e. Para guardar el archivo, escriba el siguiente comando :w

f. Una vez que guarde el archivo, puede cerrar Vim cerrando la terminal :q o :wq
Guía esencial de Vim
• Cómo editar un archivo en Vim
• Para editar un archivo, debe abrir el archivo usando Vim y cambiar al Modo Insertar.
• vim sample.txt

• Cómo cerrar el archivo sin guardar los cambios :q!


• Cómo cortar, copiar y pegar texto de un archivo usando Vim
• Modo Visual --- más facil
• Usando el teclado
Guía esencial de Vim
• Cómo cortar, copiar y pegar texto de un archivo usando Vim
• Modo Visual --- más facil
a. El primer paso es colocar el cursor en el lugar desde donde desea copiar el texto
(estando en modo comando).

b. Ingrese al modo Visual presionando la tecla v en el teclado. - y Copiar o d Cortar o p


Pegar después o P antes
Guía esencial de Vim
Guía esencial de Vim
Nano
• Este es el editor de preferencia de todos aquellos que no se han conseguido adaptar a Vim,
o aquellos que, conociendo Vim, prefieren editar el código sin tantas complicaciones.
También dispone de coloreado de sintaxis y otras ayudas clave para la programación.
Nano

• Nano --version
• Abrir un texto con Nano
• Tan solo tenemos que poner el comando seguido del nombre del fichero:

• En el caso de que esté en una ruta concreta deberemos escribir algo como esto:

• Posición del cursor


• Otro imprescindible de los comandos Nano es conocer la posición en la que está el cursor, saber en
la línea y en la columna en la que nos encontramos. Para ello utilizaremos el siguiente comando:
Nano
• Atajos más utilizados
Nano
• Atajos más utilizados
Como Crear un Script SH para Bash
• Un editor de texto gráfico. Puede servir perfectamente el que venga con el entorno de escritorio (por ejemplo, Gedit en
GNOME), pero se puede instalar otro más completo, como Geany.
• Un editor de texto por consola. Entra en juego el manejo de la terminal, también se puedes utilizar un editor de texto por
consola como puede ser Nano o Vim (este último bastante más complicado de utilizar).

• Ejemplo
• nano Documents/mi-primer-script.sh
• # ! /bin/bash
• #!/bin/bash -- no escribirlo ya que esta en la primera linea

• sudo apt update


• sudo apt upgrade
• sudo apt autoremove

• echo "Todo bien! Hasta luego"

• exit
Como Crear un Script SH para Bash
• Establecer Permisos de Ejecución sobre el Fichero - ya que tiene estos permisos - rw- r-- r—
• sudo chmod +x Documentos/mi-primer-script.sh
• Ejecutar Script SH de Forma Manual
• ./mi-primer-script.sh
• sh mi-primer-script.sh
El primer shell script
#/bin/bash
#Primer shell script sencillo
#Escrito por estudiante
clear
echo “El conocimiento es poder”
El segundo shell script
#/bin/bash
#Segundo shell script sencillo
#Escrito por estudiante
clear
echo “Hola $USER”
echo “Hoy es: “;date
echo “Es decir estamos en: “;cal
Procesos y entorno
VARIABLES
• Variable: información a la que se asigna un nombre.

• Las variables existentes en un momento y en un entorno dados


pueden ser de dos tipos:
- Variables de entorno: aquéllas que transmiten el valor (con el mismo
nombre) a los procesos hijo. Contienen informaciones que forman parte
Sistema Operativo UNIX Curso básicodel entorno de un30proceso.
de Linux de 65
- Variables locales: aquéllas que no se transmiten a los procesos hijo.

• Debe quedar claro que las variables de entorno transmiten la


información a los procesos hijo, pero no al revés.
Procesos y entorno
VARIABLES
• Las variables pueden ser clasificadas también según otro criterio en:
- Variables de sistema: son variables con un nombre y un contenido
específico, que normalmente es común a todos los sistemas UNIX. Las
más habituales son:
 HOME: su contenido es el nombre absoluto del directorio login del usuario.
 PS1: su contenido es el símbolo del prompt (habitualmente el $).
Sistema Operativo UNIX
 PATH: su contenido
Curso básico de Linux 31 de 65
es el conjunto de directorios donde el sistema buscará
los comandos a ejecutar.
 TERM: su contenido es el tipo de terminal que se utiliza.

- Variables de usuario: todas las variables asignadas por el usuario, y


que no tienen un contenido fijo.
Procesos y entorno
VARIABLES
• Para crear una variable, basta con asignarle un valor de la forma siguiente:
$ VAR=valor
• Cuando se define una variable, ésta no es de “entorno”. Para que lo sea:
$ export VAR VAR1 ...

• export sin argumentos  lista de las variables de entorno


• env  conjunto de variables de entorno junto con su contenido.
Sistema Operativo UNIX set
• Curso valor de todas las
Linux
básico de 32 devariables
65 existentes, ya sean de entorno o locales.
• unset  elimina variable.

$ A=$A$B  asigna a la variable A el contenido que tenía junto con la variable B


o bien la expresión

$ A=$A:b  modifica el contenido de la variable A añadiéndole los caracteres


:b.
Automatización de
tareas
Programación de tareas con cron en Ubuntu, Linux Mint y derivados
• Para mejorar nuestra productividad, uno de los aspectos a tener en cuenta es
evitar en la medida de lo posible la realización de tareas repetitivas. (Son aquellas
tareas que se tienen que hacer cada cierto tiempo).
• Los usuarios de Linux contamos con cron. Cron no es otra cosa que una utilidad
que ejecuta tareas según la programación de tareas que le hayamos establecido.
Iniciar cron
• Cron es un demonio (servicio), lo que significa que solo requiere ser iniciado una vez, generalmente con
el mismo arranque del sistema. El servicio de cron se llama crond. En la mayoría de las distribuciones el
servicio se instala automáticamente y queda iniciado desde el arranque del sistema, se puede comprobar
de varias maneras:

• Instalación sudo apt install cron y para mantenerlo siempre en ejecución sudo systemctl enable cron
Crontab Syntax
• Para ejecutar una lista de comandos, la utilidad cron lee los archivos de configuración. Para interpretar las líneas
en el crontab tablas de configuración, sigue una sintaxis Crontab. Crontab tiene seis campos y los primeros cinco
(1-5) campos definen la fecha y hora de ejecución. El último campo, es decir, el sexto campo, podría ser un
nombre de usuario y / o tarea / trabajo / comando / script que se ejecutará.

• El asterisco (*) se utiliza para hacer coincidir todos los valores posibles de un campo. Por ejemplo, un asterisco
usado en el campo de la hora sería equivalente a cada hora o un asterisco en el campo del mes sería equivalente
a cada mes.
• el nombre de usuario es opcional (disponible solo si es el archivo crontab del sistema)
Funcionamiento de Cron
• Las tareas se guardan y se manejan a través de un archivo llamado crontab y estas se almacenan en la
siguiente ruta: /var/spool/cron/crontabs/
• Sintaxis
Esta expresión ejecuta el comando curl http://www.google.com cada martes a las 5:30 p. m.:

Funcionamiento de Cron
• Juntos la Schedule y el comando a ejecutar quedaría así:
• Minutos horas dia_del_mes mes dia_de_la_semana comando_a_ejecutar
• Ejemplo
• Esta expresión ejecuta el comando curl http://www.google.com cada martes a las 5:30 p. m.:
• 30 17 * * 2 curl http://www.google.com
• *: en las expresiones de Cron, el asterisco es la variable comodín que representa “todo”. Por lo tanto, una tarea
programada con * * * * * ... se ejecutará cada minuto de cada hora de cada día de cada mes.
• ,: las comas separan los valores de programación para crear una lista. Si desea que una tarea se ejecute al
comienzo y a la mitad de cada hora, en lugar de escribir dos tareas separadas (por ejemplo, 0 * * * * ... y 30 * * *
* ...​), podría lograr la misma funcionalidad con una sola (0,30 * * * * ...).
• -: el guión representa una variedad de valores en el campo de programación. En lugar de tener 30 tareas
programadas por separado para un comando que desee ejecutar durante los primeros 30 minutos de cada hora
(como en el caso de 0 * * * * ..., 1 * * * * ... y 2 * * * * ..., entre otros), podría programarlo con el valor 0-29 * * *
* ....
• /: puede usar una barra diagonal con un asterisco para expresar un valor de paso. Por ejemplo, en lugar de
escribir ocho tareas de Cron separadas para ejecutar un comando cada tres horas (como en el caso de 0 0 * * * ...,
0 3 * * * ... y 0 6 * * * ..., entre otros), podría programarlo con el siguiente valor: 0 */3 * * * ....
Esta expresión ejecuta el comando curl http://www.google.com cada martes a las 5:30 p. m.:

Funcionamiento de Cron
• *****
• 12 * * * *
• 0,15,30,45 * * * *
• */15 * * * *
• 04***
• 0 4 * * 2-4
Funcionamiento de Cron
• Primera vez crontab
Programación de tareas con cron
• cron se gestiona a través de crontab que es un archivo de configuración donde indicaremos que es lo que
se tiene que ejecutar y con que periodicidad.
• Llegados a este punto, hay que tener en cuenta, que pueden haber tablas, crontab para cada uno de los
usuarios del equipo, y por lo tanto también crontab para el administrador.
• Para ver el contenido de nuestra programación de tareas ejecutaremos la orden,

• si lo que queremos ver son las del administrador, ejecutaremos

• Mientras que para editar nuestra tabla de programación de tareas ejecutaremos la orden,
Programación de tareas con cron
• Por otro lado, si queremos hacer una copia de seguridad de nuestra tabla de programación, solo tenemos
que ejecutar la siguiente orden,

• Mientras que, para eliminar nuestra tabla de programación, solo tendremos que ejecutar la orden,

• Por ejemplo, si queremos realizar una captura de pantalla todos los días a las 13:00, añadiremos la
siguiente orden a nuestro crontab,
Programación de tareas con cron
• Una utilidad interesante es sincronizar nuestro directorio local con un directorio remoto a una hora
determinada. Por ejemplo, todos los días a las 12:00
• 0 12 * * * rsync -avz /home/lorenzo/datos/ 192.168.1.50:/home/rodrigo/datos
• También podemos indicar mas de una hora, por ejemplo
• 0 6,12,18 * * * rsync -avz /home/lorenzo/datos/ 192.168.1.50:/home/rodrigo/datos
• Nos haría la sincronización a las seis de la mañana, a las 12 y a las seis de la tardes.
• Otra opción interesante es indicar un intervalo, por ejemplo, si queremos que la sincronización solo se
realice de lunes a viernes le diríamos,
• 0 6,12,18 * * 1-5 rsync -avz /home/lorenzo/datos/ 192.168.1.50:/home/rodrigo/datos
• De esta manera la sincronización sería de lunes (1) a viernes (5), a las 6, a las 12 y a las 18 horas.
Indicar que el domingo es el 0.
• Ahora, ¿y si queremos realizar la programación de tareas en lugar de a una hora determinada cada 15
minutos por ejemplo? Vamos a guardar la temperatura de nuestra CPU en un archivo para consultarlo
posteriormente,
• * */15 * * * cat /sys/class/thermal/thermal_zone0/temp >> /home/rodrigo/temperaturas.log
Programación de tareas con cron
• A parte de la programación de tareas que hemos visto, también, existen algunas definiciones
establecidas. Que son las siguientes,

• @yearly, equivale a 0 0 1 1 * esto es que la tarea se ejecutará una vez al año. En concreto el 1 de
enero a las 0:00 (medianoche).
• @monthly, equivale a 0 0 1 * *. La tarea se ejecutará una vez al mes. En particular se ejecutará el
primer día del mes a las 0:00 (medianoche).
• @weekly, equivale a 0 0 * * 0. La tarea se ejecutará una vez a la semana. En particular se ejecutará
el domingo a las 0:00 (medianoche).
• @daily, equivale a 0 0 * * *. La tarea se ejecutará una vez al día. Exactamente a las 0:00
(medianoche).
• @hourly, equivale a 0 * * * *. La tarea se ejecutará al comienzo de cada hora.
• @reboot, se ejecuta en el arranque. Esta es quizá la mas interesante de las definiciones
establecidas, puesto que no se puede realizar de otra manera, y nos permite ejecutar acciones
cuando arranca la máquina.
Programación de tareas con cron
• Si queremos comprobar que cron está funcionando correctamente, ejecutaremos la siguiente orden en
un emulador de terminal

• Algunos ejemplos de programación de tareas


• 1.- Programación de una copia de seguridad todos los años el 10 de junio a las 8:30
• 30 08 10 06 * /home/rodrigo/copia-de-seguridad.sh
• 2.- Realizar la copia de seguridad a las 10:00 y a las 20:00 todos los días de la semana
• 00 10,20 * * * /home/rodrigo/copia-de-seguridad.sh
• 3.-La copia de seguridad la haremos cada hora entre las 8:00 y las 18:00 pero solo los días laborables
(de lunes a viernes)
• 00 08-18 * * 1-5 /home/rodrigo/copia-de-seguridad.sh
• 4.- En este caso la copia de seguridad la realizaremos cada 15 minutos entre las 8:00 y las 18:00 y de
lunes a viernes
• */15 08-18 * * 1-5 /home/rodrigo/copia-de-seguridad.sh
Programación de tareas con cron
• 6.- Ejecutar una tarea cada 30 segundos. Esto tampoco se puede definir mediante la programación de
tareas de cron, pero hay una solución,
* * * * * /home/rodrigo/copia-de-seguridad.sh
* * * * * sleep 30; /home/rodrigo/copia-de-seguridad.sh
Gracias

También podría gustarte