Herramientas de usuario

Herramientas del sitio


clase:daw:si:2eval:tema12

Diferencias

Muestra las diferencias entre dos versiones de la página.


clase:daw:si:2eval:tema12 [2025/11/03 11:37] (actual) – creado - editor externo 127.0.0.1
Línea 1: Línea 1:
 +====== 12. Scripts básicos en Linux ======
 +
 +
 +
 +===== VI =====
 +  * [[https://www.atareao.es/tutorial/vim/|VIM, Un editor atemporal]]
 +  * [[https://www.atareao.es/tutorial/vim/moverte-en-vim/|Moverte en Vim]]
 +  * [[https://www.atareao.es/tutorial/vim/manipular-y-editar-con-vim/|Manipular y editar con Vim]]
 +  * [[https://www.atareao.es/tutorial/vim/el-lenguaje-de-vim/|El lenguaje de Vim]]
 +  * [[https://www.atareao.es/tutorial/vim/la-linea-de-comandos-en-vim/|La línea de comandos en Vim]]
 +  * [[https://www.atareao.es/tutorial/vim/buscar-y-reemplazar-en-vim/|Buscar y reemplazar en VIM]]
 +  * [[https://www.atareao.es/tutorial/vim/el-modo-visual-de-vim/|El modo visual de Vim]]
 +  * {{:clase:daw:si:2eval:vi.pdf |Manual de VI}}
 +
 +{{:clase:daw:si:2eval:chiste-vim29.png?600|}}
 +
 +{{:clase:daw:si:2eval:bash-montar-en-bici.png?direct&600|}}
 +
 +
 +===== Introducción a los Scripts =====
 +Para crear un Script en Linux hay que seguir los siguientes pasos:
 +  * Crear el fichero del Script con la extensión ".sh"
 +
 +  vi miscript.sh
 +
 +  * Añadir en la primera línea del fichero lo siguiente (([[https://stackoverflow.com/questions/21612980/why-is-usr-bin-env-bash-superior-to-bin-bash/21613039|Why is #!/usr/bin/env bash superior to #!/bin/bash?]])):
 +
 +  #!/usr/bin/env bash
 +o
 +  #!/bin/bash
 +
 +  * Darle permisos de ejecución:
 +
 +  chmod u+x miscript.sh
 +
 +  * Ejecutar el Script con la ruta del directorio actual:
 +
 +  ./miscript.sh
 +
 +
 +===== Parámetros y Variables =====
 +
 +  * [[http://how-to.wikia.com/wiki/How_to_read_command_line_arguments_in_a_bash_script|How to read command line arguments in a bash script]]
 +  * [[https://www.atareao.es/tutorial/scripts-en-bash/variables-en-bash/|Variables en Bash]]
 +  * [[https://victorroblesweb.es/2016/08/27/parametros-en-shell-script/|Parámetros en Shell Script]]
 +  * [[http://www.linux-es.org/node/147|Bash (III) - Variables y funciones]]
 +
 +
 +
 +  * Principales variables del bash
 +    * ''$HOME'': Directorio inicial del usuario
 +    * ''$PATH'': Lista de directorios donde buscar un ejecutable
 +    * ''$PWD'': El directorio de trabajo actual
 +    * ''$UID'' : Identificador del usuario actual
 +    * ''$$'' : El PID del proceso actual
 +    * ''$1'', ''$2'' , ''$3'', ...: Cada uno de los argumentos
 +    * ''$#'': El Nº de argumentos
 +
 +
 +===== Redirecciones =====
 +
 +En Linux se permite hacer la redirección de la entrada y la salida a un fichero y desde un fichero.
 +
 +
 +
 +
 +
 +  * Redireccionar la salida
 +
 +  find / -name "*.mkv" > mis-peliculas.txt
 +
 +    * Añadir a la salida
 +
 +  find / -name "*.avi" >> mis-peliculas.txt
 +
 +    * Redireccionar la entrada
 +
 +  sort < mis-peliculas.txt
 +
 +
 +Mas información:
 +  * [[https://www.sololinux.es/guardar-la-salida-de-un-comando-en-un-archivo|Guardar la salida de un comando en un archivo]]
 +
 +
 +===== Operador Substitución =====
 +
 +  * [[http://www.cyberciti.biz/faq/unix-linux-bsd-appleosx-bash-assign-variable-command-output/|Bash: Assign Output of Shell Command To Variable]]
 +  * [[http://bash.cyberciti.biz/guide/Command_substitution|Command substitution]]
 +
 +<sxh bash>
 +  ANYO_ACTUAL=$(date +%Y)
 +  echo $ANYO_ACTUAL
 + </sxh>
 +
 +===== Operador matemático =====
 +Para hacer operaciones matemáticas con bash usar ''$[   ]''
 +
 +<sxh bash>
 +  a=3
 +  b=1
 +  c=$[ $a - $b ]
 +  echo $c
 + </sxh>
 +
 +Mostrará por pantalla 2
 +
 +
 +También se puede usar la orden ''bc'' que permite decimales.
 +
 +<sxh bash>
 +  a=3.7
 +  b=1.2
 +  c=$( echo "$a - $b" | bc -l)
 +  echo $c
 + </sxh>
 +
 +Mostrará por pantalla 2.5
 +
 +
 +Otro ejemplo de ''bc''
 +
 +<sxh bash>
 +  echo "1.3+2.6+7.8+8.9" | bc -l
 + </sxh>
 +
 +Mostrará por pantalla 20.6
 +
 +
 +===== Condicional =====
 +  * [[http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html|6. Conditionals]]
 +  * [[http://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes/El_b%C3%A1sico_%28If-Then%29|El Manual de BASH Scripting Básico para Principiantes/El básico (If-Then)]]
 +  * [[https://www.tldp.org/LDP/abs/html/comparison-ops.html|Operadores de comparación en Bash]]
 +
 +<sxh bash>
 +if [ "$SALUDO" == "HOLA" ]; then
 +    echo "Ha saludado con Hola"
 +else
 +   echo "No ha saludado con Hola"
 +fi
 +</sxh>
 +
 +<sxh bash>
 +if [ "$SALUDO" == "HOLA" ]; then
 +    echo "Ha saludado con Hola"
 +elif [ "$SALUDO" == "Hello" ]; then
 +    echo "Ha saludado con Hello"
 +else
 +   echo "No ha saludado con Hola"
 +fi
 +</sxh>
 +
 +
 +<sxh bash>
 +if [ "$SALUDO" == "HOLA" ] || [ "$SALUDO" == "Hello" ]; then
 +    echo "Ha saludado "
 +else
 +   echo "No ha saludado"
 +fi
 +</sxh>
 +
 +<sxh bash>
 +if [ "$SALUDO" == "HOLA" ] && [ "$NOMBRE" == "Lorenzo" ]; then
 +    echo "Hola Lorenzo "
 +fi
 +</sxh>
 +
 +<sxh bash>
 +if [ "$ANYO_ACTUAL" -le "2020" ]; then
 +    echo "El año actual es menor o igual que 2020"
 +fi
 +</sxh>
 +
 +^  Operadores para textos  ^^^
 +^ Operador en Bash ^ Significado ^ Ejemplo ^
 +| == | = | ''if [ "$a" == "$b" ]; then'' |
 +| != | ≠ | ''if [ "$a" != "$b" ]; then'' |
 +
 +
 +^  Operadores para números enteros  ^^^
 +^ Operador en Bash ^ Significado ^ Ejemplo ^
 +| -eq | = (**eq**ual) | ''if [ "$a" -eq "$b" ]; then'' |
 +| -ne | ≠ (**n**ot **e**qual)  | ''if [ "$a" -ne "$b" ]; then'' |
 +| -gt | > (**g**reater **t**han)  | ''if [ "$a" -gt "$b" ]; then'' |
 +| -ge | ≥ (**g**reater or **e**qual)  | ''if [ "$a" -ge "$b" ]; then'' |
 +| -lt | < (**l**ess **t**han)  | ''if [ "$a" -lt "$b" ]; then'' |
 +| -le | ≤ (**l**ess or **e**qual)  | ''if [ "$a" -le "$b" ]; then'' |
 +
 +^  Operadores lógicos  ^^^
 +^ Operador en Bash ^ Significado ^ Ejemplo ^
 +| <nowiki>||</nowiki> | O lógico | ''if [ "$a" == "$b" ] || [ "$a" == "$c" ]; then'' |
 +| <nowiki>&&</nowiki> | Y lógico | ''if [ "$a" != "$b" ] && [ "$a" != "$c" ]; then'' |
 +
 +
 +
 +===== Bucles =====
 +  * [[https://www.cyberciti.biz/faq/bash-for-loop/|Bash For Loop Examples]]
 +<sxh bash>
 +#Muestra los números del 0 al 9
 +for I in 0 1 2 3 4 5 6 7 8 9
 +do
 +    echo Es valor de I=$I
 +done
 +</sxh>
 +<sxh bash>
 +#Borra todos los ficheros del directorio
 +for FICHERO in $(ls)
 +do
 +    rm $FICHERO
 +done
 +</sxh>
 +
 +
 +===== Ejercicios =====
 +
 +==== Ejercicio 1 ====
 +Haz un Script que muestre por pantalla "Hola Mundo" , para ello usa la orden "echo".
 +
 +
 +
 +==== Ejercicio 2 ====
 +Parámetros básicos:
 +
 +  * Crea un Script llamado "ejer1.sh" y haz que se le pase un parámetro y que lo muestre por pantalla.
 +  * Crea un Script llamado "ejer2.sh" y haz que se le pasen 2 parámetros y que se muestren por pantalla.
 +
 +==== Ejercicio 3 ====
 +Haz un Script llamado "sumar.sh" que sume dos números enteros que se pasan como argumentos.
 +
 +Modifica el Script para que acepte números decimales
 +
 +==== Ejercicio 4 ====
 +Haz un Script llamado "nota_media_sistemas.sh" que dados 3 notas **enteras** (Examen, Prácticas y Actitud) , obtenga la nota media del módulo de "Sistemas Informáticos". Sabiendo que el peso de cada nota es del 60%, 30% y 10% respectivamente
 +
 +Modifica el Script de la siguiente forma:
 +  * Si la nota del examen es un 10 que  muestre por pantalla "Felicidades!!"
 +  * Si alguna de las notas es menor que 0 o mayor que 10 que muestre un aviso de que esa nota no tiene un valor válido y no haga nada mas.
 +
 +
 +
 +==== Ejercicio 5 ====
 +Haz un script llamado "format.sh" que le pasemos como argumentos:
 +  * El nombre de una partición
 +  * El nombre de un sistema de archivos. Solo se permitirán los siguientes sistemas de archivos:
 +    * ext4
 +    * XFS
 +    * Btrfs
 +
 +Y deberá hacer:
 +  * Si no pasan los 2 argumentos deberá darse un error.
 +  * Si el sistema de archivos es "ext3" deberá indicarse que "El sistema de archivos es demasiado viejo" y no hacer nada mas
 +  * Si el sistema de archivos es "ext2" deberá indicarse que "El sistema de archivos no soporta Journaling" y no hacer nada mas
 +  * Si están los dos argumentos se deberá crear un sistema de archivos en la partición del tipo indicado.
 +
 +
 +==== Ejercicio 6 ====
 +Haz un script llamado "permitir_ejecucion.sh" que acepte como argumento el nombre de un fichero. La orden añadirá el permiso de ejecución al propietario de ese fichero
 +
 +Modifica el Script para que acepte un segundo argumento que sea alguno de los siguientes valores:
 +  * "PROPIETARIO": Añadirá el permiso solo al propietario
 +  * "GRUPO": Añadirá el permiso solo al grupo
 +  * "TODOS":  Añadirá el permiso al propietario , al grupo y a otros.
 +
 +Con cualquier otro valor deberá mostrar un mensaje de error y no hacer nada.
 +
 +
 +