Introducción a los Scripts de Shell ----------------------------------- Un script de shell es un archivo de texto que contiene una secuencia de comandos ejecutados por el intérprete de comandos (shell) en Linux. - Facilita la automatización de tareas repetitivas. - Combina comandos y estructuras de control para crear programas simples. Para crear un script de shell abre un editor de texto y escribe los siguientes comandos en un archivo llamado `mi_script.sh`. .. code-block:: bash #!/bin/bash # Este es un comentario echo "Hola, mundo!" Estructura Básica de un Script ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Un script de shell típicamente incluye: - **Shebang (#!):** Indica el intérprete que ejecutará el script. - **Comentarios:** Líneas que comienzan con ``#``, ignoradas por el shell, útiles para explicar el código. - **Comandos:** Instrucciones que ejecutarías en la terminal. En `mi_script.sh` estas partes se encuentran así: 1. Shebang: .. code-block:: bash #!/bin/bash Esta línea indica que el script debe ejecutarse utilizando el intérprete Bash. Es la primera línea del script y esencial para su ejecución en entornos Unix y Linux. 2. Comentarios: .. code-block:: bash # Este es un comentario Los comentarios se utilizan para explicar el código y no se ejecutan. En Bash, cualquier texto precedido por un símbolo de numeral (`#`) es tratado como comentario. 3. Comando Echo .. code-block:: bash echo "Hola, mundo!" Esta línea es un comando que imprime el texto "Hola, mundo!" en la terminal. Es la parte del script que realiza una acción visible para el usuario. El propósito de este script es demostrar la sintaxis básica de Bash, incluido cómo iniciar un script, comentar el código y ejecutar un comando simple. Al ejecutar este script en una terminal, se muestra el mensaje ``Hola, mundo!`` al usuario.. .. note:: Este script es un ejemplo clásico utilizado en la enseñanza de la programación para demostrar la ejecución de un programa simple. ¿Como se ejecuta un script? ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Después de guardar tu script, para poder ejecutarlo debes darle permiso de ejecución, es decir hacerlo ejecutable: .. code-block:: bash chmod +x mi_script.sh una vez realizado esto, para ejecutar tu script, teclea lo siguiente en la carpeta donde este: .. code-block:: bash ./mi_script.sh Preguntas: ^^^^^^^^^^ 1. ¿Como puedo ejecutar un script que se encuentra en una carpeta diferente a la actual de la consola? 2. ¿Como puedo hacer para que únicamente el propietario del archivo script, pueda ejecutar este programa? Ejercicios: ^^^^^^^^^^^ 1. Crea un script llamado ``saludo.sh`` que imprima "Hola, [tu nombre]", Haz el script ejecutable y correlo. 2. Crea un script que muestre todos los archivos y directorios en el directorio actual. Una posible solución es: .. code-block:: bash #!/bin/bash # Listar archivos y directorios echo "Archivos y directorios en $(pwd):" ls - ¿Que hace `$(pwd)` en este script?, - ¿Que pasa al ejecutar el script, si a esta "instrucción", le quitamos el simbolo `$`? Herramientas de Compresión y Empaquetado ---------------------------------------- La compresión de archivos se refiere al proceso de reducir el tamaño de uno o más archivos mediante algoritmos específicos. Este proceso es útil para ahorrar espacio en disco y para reducir el tiempo de transmisión de archivos a través de internet o entre dispositivos. Por otro lado, el empaquetado de archivos implica agrupar varios archivos y/o directorios en un solo archivo. Aunque el empaquetado por sí mismo no reduce el tamaño de los archivos combinados, facilita su manejo, organización y distribución. Cuando se combinan, la compresión y el empaquetado son herramientas poderosas para la gestión eficiente de archivos. Por ejemplo, al empaquetar primero varios archivos en uno y luego comprimir el paquete resultante, se puede ahorrar significativamente espacio de almacenamiento. Además, esta combinación simplifica el proceso de compartir múltiples archivos, ya que solo se necesita transferir un único archivo comprimido en lugar de varios archivos individuales. Esto es especialmente útil en contextos donde la eficiencia en la gestión de archivos y el ahorro de recursos son críticos, como en el envío de documentos por correo electrónico, la realización de copias de seguridad de datos o la distribución de software. Uso de ``tar`` para Empaquetar Archivos ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``tar`` (Tape Archive) es una herramienta para empaquetar múltiples archivos en un solo archivo (tarball), facilitando su manejo y transferencia. - Crear un tarball: .. code-block:: bash tar -cvf mi_archivo.tar /ruta/al/directorio - Extraer un tarball: .. code-block:: bash tar -xvf mi_archivo.tar Compresión con ``gzip`` y ``bzip2`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``gzip`` y ``bzip2`` son herramientas para comprimir archivos, reduciendo su tamaño. - Comprimir un archivo con ``gzip``: .. code-block:: bash gzip mi_archivo - Comprimir con ``bzip2`` para una mayor tasa de compresión: .. code-block:: bash bzip2 mi_archivo Empaquetado y Compresión Combinados con ``tar`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``tar`` puede combinarse con métodos de compresión para empaquetar y comprimir simultáneamente. - Crear un tarball comprimido con ``gzip``: .. code-block:: bash tar -czvf mi_archivo.tar.gz /ruta/al/directorio - Crear un tarball comprimido con ``bzip2``: .. code-block:: bash tar -cjvf mi_archivo.tar.bz2 /ruta/al/directorio Descomprimir con ``gzip`` y ``bzip2`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Para revertir la compresión y recuperar el archivo original, se utilizan los comandos `gunzip` para archivos `.gz` y `bunzip2` para archivos `.bz2`. - Descomprimir un archivo `.gz`: .. code-block:: bash gunzip mi_archivo.gz - Descomprimir un archivo `.bz2`: .. code-block:: bash bunzip2 mi_archivo.bz2 Desempaquetar Archivos con ``tar`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``tar`` también permite extraer el contenido de los tarballs, ya sean comprimidos o no. - Extraer un tarball sin compresión: .. code-block:: bash tar -xvf mi_archivo.tar - Extraer un tarball comprimido con ``gzip`` (`.tar.gz` o `.tgz`): .. code-block:: bash tar -xzvf mi_archivo.tar.gz - Extraer un tarball comprimido con ``bzip2`` (`.tar.bz2`): .. code-block:: bash tar -xjvf mi_archivo.tar.bz2 Ejercicio: Empaquetar y Comprimir ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. Selecciona tres archivos en tu directorio actual. 2. Usa ``tar`` y ``gzip`` para crear un tarball comprimido de esos archivos. 3. Envia este archivo comprimido, por correo electrónico a un compañero. 4. Una vez descargado el archivo, el compañero deberá extraer el contenido del archivo comprimido y verificar que los contenidos correspondan. Ejercicio: Verificación de compresión ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. Descarga el archivo `https://babel.upm.es/~angel/teaching/pps/quijote.txt`. 2. Comprime el archivo utilizando gzip, y bzip. 3. Compara el tamaño de los archivos finales con el archivo original. 4. ¿Según esta prueba, cual de los dos programas de compresión funciona mejor? 5. Comprime el archivo usando tar -zcvf y tar -jcvf, y compara los resultados de los tamaños de los archivos obtenidos con los del punto 2. ¿Que se puede concluir? .. note:: La descarga del archivo, se puede realizar usando firefox desde el entorno gráfico, o desde la consola usando la instrucción: .. code-block:: bash wget https://babel.upm.es/~angel/teaching/pps/quijote.txt más información sobre el comando wget, se puede encontrar en: .. code-block:: bash man wget