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 17:00] – [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.
- +
-Si has completado [[lenguaje_del_interprete_de_comandos|el primer Tutorial del lenguaje de intérprete de comandos]], sin dudas este tutorial te enseñará algunas de sus características más avanzadas de Bash.+
  
 +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 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 256: Línea 283:
 $ variable=10 $ variable=10
 $ echo $((--variable))  ## Primero decrementa el valor en 1 luego imprime 9 $ echo $((--variable))  ## Primero decrementa el valor en 1 luego imprime 9
-</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 292: 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 304: 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 321: 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 350: 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 413: Línea 443:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
  
 while true while true
Línea 424: Línea 454:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 while true while true
Línea 460: Línea 490:
  
 <code bash> <code bash>
-#!/usr/bin/bash+#!/usr/local/bin/bash
    
 num=1 num=1
Línea 534: 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 588: 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 599: 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 610: 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 638: Línea 668:
  
 <code bash> <code bash>
-#!/bin/bash+#!/usr/local/bin/bash
    
 for nombrefichero in * for nombrefichero in *
Línea 647: 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.1677517228.txt.gz
  • Última modificación: 2023/02/27 17:00
  • por peron