tutorial_de_programacion_en_bash

Diferencias

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

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
tutorial_de_programacion_en_bash [2023/02/27 02:32] – [Operaciones aritméticas] perontutorial_de_programacion_en_bash [2023/06/06 18:27] (actual) – [Tutorial de Programación en Bash] peron
Línea 1: Línea 1:
 =====Tutorial de Programación en Bash===== =====Tutorial de Programación en Bash=====
-Además de ser un [[interpretes de comandos|intérprete de comandos], [[Bash]] también consiste en un //lenguaje de comandos interpretado//, lo que permite escribir [[script|guiones]] y correrlos con el mismo intérprete. +[[Bash]] es una [[interpretes de comandos|shell]], que además cuenta con un  //lenguaje de comandos interpretado// incorporado. Esto te permite escribir [[script|guiones]] y correrlos directamente en tu entorno.
- +
-Este tutorial te enseña algunas de sus características avanzadas.+
  
 +Si ya has completado [[lenguaje_del_interprete_de_comandos|el primer Tutorial del lenguaje de intérprete de comandos]] y sabes cómo hacer [[script|guiones simples de programación]], sin dudas este tutorial te enseñará algunas de sus características más avanzadas de Bash.
 ====Variables==== ====Variables====
  
Línea 9: Línea 8:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 NAME="Tutoriales texto-plano.xyz" NAME="Tutoriales texto-plano.xyz"
Línea 23: Línea 22:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 #Define una variable global de bash  #Define una variable global de bash 
Línea 43: Línea 42:
  
 <code bash> <code bash>
-env+env
 </code> </code>
  
-Generalmente se suele definir estas variables en mayñusculas, por ejemplo: ''PATH'', ''SHELL'', ''HOME'', ''LANG'', ''PWD'' y muchas mas.+Generalmente se suele definir estas variables en mayúsculas, por ejemplo: ''PATH'', ''SHELL'', ''HOME'', ''LANG'', ''PWD'' y muchas mas.
  
 ==== Citas ==== ==== Citas ====
Línea 54: Línea 53:
 ===Cita con cadena=== ===Cita con cadena===
  
-No existe diferencia al utilizar una comilla simple ''<nowiki>''</nowiki>'' o comillas ''""'' mientras operas con textos simples y cadenas.+No existe diferencia al utilizar apóstrofo ''<nowiki>'...'</nowiki>'' o comillas ''"..."'' mientras operas con textos simples y cadenas.
  
-El siguiente guión correrá sin errores y presentará el mensaje indicado y creará ambos directorios:+El siguiente guion correrá sin errores y presentará el mensaje indicado y creará ambos directorios:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
-echo 'Cadena entre comillas simples+echo 'Cadena apostrofada
-echo "Cadena entre comillas"+echo "Cadena entrecomillada"
  
-mkdir 'Dir 1' +mkdir 'Directorio 1' 
-mkdir "Dir 2"+mkdir "Directorio 2"
 </code> </code>
  
Línea 72: Línea 71:
 Recuerda que las expansión de variables de Bash __únicamente operará con las comillas__. Si defines cualquier variable en comillas simples, ¡no funcionarán! Recuerda que las expansión de variables de Bash __únicamente operará con las comillas__. Si defines cualquier variable en comillas simples, ¡no funcionarán!
  
-Ejecuta el siguiente guión. La primer echo presentará el valor de la variable (ej. ''Bienvenid@ ~fulana''). Pero la segunda variable solo presentará ''$NOMBRE'' porque está entre comillas simples:+Ejecuta el siguiente guion. La primer echo presentará el valor de la variable (ej. ''Bienvenid@ ~fulana''). Pero la segunda variable solo presentará ''$NOMBRE'' porque está entre comillas simples:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 NOMBRE="Bienvenid@ ~$USER" NOMBRE="Bienvenid@ ~$USER"
Línea 85: Línea 84:
 ====Depuración en Bash ==== ====Depuración en Bash ====
  
-El guionado de Bash provee una funcionalidad de depuración durante el tiempo de ejecución. Emplea el comando ''set -xv'' dentro del guión o en la línea de comando cuando ejecutes el guión para depurarlo.+El guionado de Bash provee una funcionalidad de depuración durante el tiempo de ejecución. Emplea el comando ''set -xv'' dentro del guion o en la línea de comando cuando ejecutes el guion para depurarlo.
  
 ===Depurado durante la ejecución=== ===Depurado durante la ejecución===
Línea 97: Línea 96:
 ===Depurado de un guión=== ===Depurado de un guión===
  
-Si deseas activar la depuración __dentro del mismo guión__, podrás depurar cierta parte del guión.+Si deseas activar la depuración __dentro del mismo guion__, podrás depurar cierta parte del guion.
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 set -xv   # Esta línea activa el depurado set -xv   # Esta línea activa el depurado
Línea 110: Línea 109:
 </code> </code>
  
-Ahora corre el script... +Ahora corre el guion... 
 <code bash> <code bash>
-$ ./script.sh+$ ./guion.sh
 </code> </code>
  
Línea 133: Línea 132:
 ====Código de Salida==== ====Código de Salida====
  
-Un //código de salida// en Bash es un valor en código que representa el resultado de la ejecución apropiada de un programa, representado por un valor entre 0 y 255. Tal número denota el status de salida del último comando introducido, en otras palabras, es la indicación que dá - al cese de su ejecución - el proceso hijo, al retornar al su proceso padre.+Un //código de salida// en Bash es un valor en código que representa el resultado de la ejecución apropiada de un programa, representado por un valor entre 0 y 255. Tal número denota el status de salida del último comando introducido, en otras palabras, es la indicación que da - al cese de su ejecución - el proceso hijo, al retornar al su proceso padre.
  
 | ''0'' - Success | Un //valor cero// (0) representa éxito. | | ''0'' - Success | Un //valor cero// (0) representa éxito. |
Línea 143: Línea 142:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 echo "Viva Bash, más rápido que un flash!" > /tmp/fichero_prueba.txt echo "Viva Bash, más rápido que un flash!" > /tmp/fichero_prueba.txt
Línea 159: Línea 158:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 STRING="fulana" STRING="fulana"
Línea 196: Línea 195:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 read -p "Ingresa tu nombre de usuari@: " miusuario read -p "Ingresa tu nombre de usuari@: " miusuario
Línea 204: Línea 203:
 </code> </code>
  
-==== Operaciones aritméticas ==== +==== Operadores ====  
-Utiliza entre paréntesis dobles ''<nowiki>(())</nowiki>'' para realizar las operaciones aritméticas sobre variables constituidas por valores numéricos en Bash, según esta sintaxis:+Los [[operadores en unix]] permiten realizar distinto tipo de operaciones en la shell. Bash cuenta con los mismos operadores, y extiende su utilización, 
 + 
 +A continuación encontrarás ejemplos de su uso en Bash. 
 + 
 + 
 +===Operadores aritméticos ==== 
 +En Bash podrás encerrar entre paréntesis dobles ''<nowiki>(())</nowiki>'' para realizar las operaciones aritméticas sobre variables constituidas por valores numéricos, según esta sintaxis:
  
 <code bash> <code bash>
Línea 215: Línea 220:
 </code> </code>
  
-===Ejemplo de operadores aritméticos===+==Ejemplo de operadores aritméticos==
  
 Este guion permite ingresar dos valores numéricos para realizar las cinco operaciones básicas: Este guion permite ingresar dos valores numéricos para realizar las cinco operaciones básicas:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 read -p "Ingresa un valor numérico: " n1 read -p "Ingresa un valor numérico: " n1
Línea 229: Línea 234:
 echo "La División de $n1 / $n2 es       = " $((n1/n2)) echo "La División de $n1 / $n2 es       = " $((n1/n2))
 echo "La Multiplicación de $n1 * $n2 es = " $((n1*n2)) echo "La Multiplicación de $n1 * $n2 es = " $((n1*n2))
-echo "El porcentaje entre $n1 % $n2 es        = " $((n1%n2))+echo "El módulo entre $n1 % $n2 es        = " $((n1%n2)) 
 +</code> 
 + 
 +===Operadores de comparación de cadena=== 
 +Utiliza doble igual (''=='') para comparar cadenas. 
 + 
 +<code bash> 
 +if [ "$cadena" == "$cadena2" ]     # True si es igual 
 +if [ "$cadena1" != "$cadena2" ]     # True si es no igual 
 +</code> 
 + 
 + 
 +===Operadores de comparación numérica=== 
 + 
 +Como en todos los shells de tipo Unix, en Bash podrás utilizar operadores de comparación numérica. 
 + 
 +<code bash> 
 +((n1 == n2))    ## n1 es igual a n2 
 +((n1 != n2))    ## n1 es no igual a n2 
 +((n1 > n2))     ## n1 es mayor a n2 
 +((n1 >= n2))    ## n1 es mayor o igual a n2 
 +((n1 < n2))     ## n1 es menor a n2 
 +((n1 <= n2))    ## n1 es menor o igual a n2
 </code> </code>
  
Línea 246: Línea 273:
 </code> </code>
  
-En forma similar, puedes utilizar operadores de pre-decremento y post-decremento.+En forma similar, puedes utilizar //operadores de pre-decremento// //operadores de post-decremento//.
  
 <code bash> <code bash>
Línea 257: Línea 284:
 $ echo $((--variable))  ## Primero decrementa el valor en 1 luego imprime 9 $ echo $((--variable))  ## Primero decrementa el valor en 1 luego imprime 9
 </code> </code>
 +
 +
 ===== Condicionales ===== ===== Condicionales =====
 En un lenguaje de programación se utilizan bucles para repetir la ejecución de un bloque de código hasta que se satisfaga una condición definida. Esto es sumamente útil para realizar tareas repetitivas. Existen tres tipos de bucles principales: ''for'' (en caso), ''do'' ("hacer"), y ''do-while'' ("hacer-en tanto"). En un lenguaje de programación se utilizan bucles para repetir la ejecución de un bloque de código hasta que se satisfaga una condición definida. Esto es sumamente útil para realizar tareas repetitivas. Existen tres tipos de bucles principales: ''for'' (en caso), ''do'' ("hacer"), y ''do-while'' ("hacer-en tanto").
Línea 277: Línea 306:
  
 ===Ejemplo if-then=== ===Ejemplo if-then===
 +Este programa solicita que ingreses una cifra, y te informa si es mayor a ''10''.
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 read -p "Ingrese un valor numérico: " myvar read -p "Ingrese un valor numérico: " myvar
Línea 289: Línea 318:
 </code> </code>
  
-===Ejemplo If-else===+===Ejemplos If-else===
  
-Usando la declaración if-else, es posible ejecutar una declaración condicional si esta resulta falsa. Para ello se define un bloque de texto con ''else'':+Usando la declaración if-else ("//si-además//"), es posible ejecutar una declaración condicional si esta resulta falsa. Para ello se define un bloque de texto con ''else''
 + 
 +Este ejemplo implica un condicional por comparación numérica. Dará //Verdadero// si el valor ingresado por el usuario es  mayor a ''10'', y si cumple tal prerrogativa ("then", "//luego//") presentará ''Correcto''; luego //si además// resulta //Falso// (de aquí el "if-else"), presentará ''No es correcto''.
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
-read -p "Ingresa un valor numérico: " myvar+read -p "Ingresa una cifra: " myvar
    
 if [ $myvar -gt 10 ] if [ $myvar -gt 10 ]
Línea 306: Línea 337:
 </code> </code>
  
-Este texto difiere en que si es verdadero que el valor ingresado por el usuario es  mayor a ''10'', presentará ''Correcto'', si es falso, realizará la acción de presentar ''No es correcto''.+Este ejemplo realiza una comparación de cadenas las compara: 
 + 
 +<code bash> 
 +#!/bin/bash 
 +  
 +read -p "Ingresa la primer cadena: " cadena1 
 +read -p "Ingresa la segunda cadena: " cadena2 
 +if [ "$cadena1" == "$cadena2"
 +then 
 +  echo "Ambas cadenas son iguales" 
 +else 
 +  echo "Ambas cadenas son diferentes" 
 +fi 
 +</code> 
  
 ===Ejemplo if-elif-else=== ===Ejemplo if-elif-else===
-La condición **elif** (else-if) se usa para incorporar múltiples condicionales ''if''+La condición **elif** (else-if, "si además") se usa para incorporar múltiples condicionales ''if''
  
-En este ejemplo de condicioniales //else-if//, ingresa tus calificaciones. Si son mayores o iguales a ''80'', presentará ''Muy satisfactorio''. Si son inferiores a ''80'' o igual a ''50'' presentará ''Satisfactorio'', etcétera.+En este ejemplo de condicioniales //else-if//, debes indicar tus calificaciones. Si son mayores o iguales a ''80'', presentará ''Muy satisfactorio''. Si son inferiores a ''80'' o igual a ''50'' presentará ''Satisfactorio'', etcétera.
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 read -p "Ingresa tus calificaciones: " calificacion read -p "Ingresa tus calificaciones: " calificacion
Línea 335: Línea 380:
 ===Ejemplo de condicionales if anidados === ===Ejemplo de condicionales if anidados ===
  
-Con los **if anidados**, si una condición resulta verdaderaentonces sólo comprobará otra condición.+Con los **if anidados**, sólo se comprobará la veracidad de una condición anidadasi otra condición nido resulta verdadera.
  
-Por ejemplo, recibe 3 valores numéricos como entrada y revisa el valor mayor.+Por ejemplo, este programa solicita ingresar 3 valores numéricos como entrada y realiza una comparación numérica para analizar cuál es el valor mayor.
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
-read -p "Ingresa el valor de i :" i +read -p "Cuantas copas tiene Boca :" boca 
-read -p "Ingresa el valor de j :" j +read -p "Cuantas copas tiene River :" river 
-read -p "Ingresa el valor de k :" k+read -p "Cuantas copas tiene Independiente :" independiente
    
-if [ $-gt $]+if [ $boca -gt $river ]
 then then
-    if [ $-gt $]+    if [ $boca -gt $independiente ]
     then     then
-        echo "es el mayor"+        echo "Boca es el más grande"
     else     else
-        echo "es el mayor"+        echo "Independiente es el Rey de Copas"
     fi     fi
 else else
-    if [ $-gt $]+    if [ $river -gt $independiente ]
     then     then
-        echo "es el mayor"+        echo "River es el más grande"
     else     else
- echo "es el mayor"+ echo "Independiente es el Rey de Copas"
     fi     fi
 fi fi
Línea 398: Línea 443:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 while true while true
Línea 409: Línea 454:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 while true while true
Línea 445: Línea 490:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 num=1 num=1
Línea 519: Línea 564:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 read -p "Ingresa una cadena:" choice read -p "Ingresa una cadena:" choice
Línea 573: Línea 618:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 for i in 1 2 3 4 5 for i in 1 2 3 4 5
Línea 584: Línea 629:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 for i in {1..5} for i in {1..5}
Línea 595: Línea 640:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 for dia in DOM LUN MAR MIE JUE VIE SAB DOM for dia in DOM LUN MAR MIE JUE VIE SAB DOM
Línea 623: Línea 668:
  
 <code bash> <code bash>
-#!/bin/bash+#!/usr/local/bin/bash
    
 for nombrefichero in * for nombrefichero in *
Línea 632: Línea 677:
  
  
 +====Funciones====
 +Una función (también llamadas subrutinas o procedimientos) es una sección de código utilizada para realizar una tarea específica. Estas pueden ser reutilizadas.
  
 +Sintaxis:
 +
 +<code bash>
 +nombreFuncion(){    
 +  // procedimiento de la función
 +}
 +
 +nombreFuncion  //llamada a la función
 +</code>
 +
 +===Creación de una función ===
 +
 +Crea tu primer función de un guion de bash para que presente la cadena "Hola Texto-plano.xyz!". Elabora el guion de Shell "saludo.sh" con el siguiente código fuente:
 +
 +<code bash>
 +#!/usr/local/bin/bash
 +
 +funSaludazo(){
 +    echo "¡Hola texto-plano.xyz!";
 +}
 +
 +# llama a la función saludazo desde cualquier lugar del guion, por ejemplo, ahora mismo:
 +
 +funSaludazo
 +</code>
 +
 +Ejecuta el guion creado:
 +
 +<code bash>
 +$ ./saludo.sh
 +</code>
 +
 +<code>¡Hola texto-plano.xyz!</code>
 +
 +===Función con argumento===
 +Para indicarle un argumento a la función es necesario hacerlo de la misma manera que argumentarías cualquier comando desde el intérprete de comandos: agregándolos a continuación con un espacio en blanco. Las funciones reciben argumentos ''$1'', ''$2'', etcétera. En consecuencia, para crear un guion de shell con argumento podrías incluir un código semejante a este:
 +
 +<code bash>
 +#!/usr/local/bin/bash
 +
 +funArgumentos(){
 +   echo "Primer Argumento: " $1
 +   echo "Segundo Argumento: " $2
 +   echo "Tercer Argumento: " $3
 +   echo "Cuarto Argumento: " $4
 +}
 +
 +# Llama a funArgumentos desde cualquier lugar en el guion, utilizando parámetros como los indicados a continuación
 +
 +funArgumentos 1 Bienvenido a Texto-plano.xyz 
 +</code>
 +
 +Ejecuta el guion desde la shell de Bash:
 +
 +<code bash>
 +$ ./saludo.sh
 +</code>
 +
 +<code>
 +Primer Argumetno : 1
 +Segundo Argumento : Bienvenido
 +Tercer Argumento : a
 +Cuarto Argumento : Texto-plano.xyz
 +</code>
  • tutorial_de_programacion_en_bash.1677465139.txt.gz
  • Última modificación: 2023/02/27 02:32
  • por peron