Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| tutorial_de_programacion_en_bash [2023/04/07 01:32] – [Funciones] peron | tutorial_de_programacion_en_bash [2026/04/21 16:09] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 2: | Línea 2: | ||
| [[Bash]] es una [[interpretes de comandos|shell]], | [[Bash]] es una [[interpretes de comandos|shell]], | ||
| - | 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/local/bin/bash |
| NAME=" | NAME=" | ||
| Línea 23: | Línea 22: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| #Define una variable global de bash | #Define una variable global de bash | ||
| Línea 54: | Línea 53: | ||
| ===Cita con cadena=== | ===Cita con cadena=== | ||
| - | No existe diferencia al utilizar apóstrofo ''< | + | No existe diferencia al utilizar apóstrofo ''< |
| El siguiente guion 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/local/bin/bash |
| echo ' | echo ' | ||
| Línea 75: | Línea 74: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| NOMBRE=" | NOMBRE=" | ||
| Línea 100: | Línea 99: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| set -xv # Esta línea activa el depurado | set -xv # Esta línea activa el depurado | ||
| Línea 140: | Línea 139: | ||
| ===Ejemplo=== | ===Ejemplo=== | ||
| - | Escribe un programa para escribir una cadena de texto en ''/ | + | Escribe un programa para escribir una cadena de texto en ''/ |
| - | <code bash> | + | <file bash fichero_prueba.txt> |
| - | # | + | #!/usr/local/bin/bash |
| echo "Viva Bash, más rápido que un flash!" | echo "Viva Bash, más rápido que un flash!" | ||
| Línea 152: | Línea 151: | ||
| echo "Lo siento, no puedo escribir en / | echo "Lo siento, no puedo escribir en / | ||
| fi | fi | ||
| - | </code> | + | </file> |
| Línea 158: | Línea 157: | ||
| Este fichero buscará la cadena '' | Este fichero buscará la cadena '' | ||
| - | <code bash> | + | <file bash buscapersona.sh> |
| - | # | + | #!/usr/local/bin/bash |
| - | STRING=" | + | CADENA=" |
| - | if grep ${STRING} /etc/passwd | + | if grep ${CADENA} /etc/passwd |
| then | then | ||
| echo "Si! Encontré la cadena" | echo "Si! Encontré la cadena" | ||
| Línea 169: | Línea 168: | ||
| echo "Buu!, no encontré la cadena" | echo "Buu!, no encontré la cadena" | ||
| fi | fi | ||
| - | </code> | + | </file> |
| ====Entrada de Usuario==== | ====Entrada de Usuario==== | ||
| Línea 181: | Línea 180: | ||
| </ | </ | ||
| - | También podrás indicar algún texto que se presentará a modo de información, a la hora de solicitar la entrada: | + | También podrás indicar algún texto con '' |
| <code bash> | <code bash> | ||
| - | read -p "Dime tu nombre de usuari@: " | + | read -p "Dime tu nombre de usuari@: " |
| </ | </ | ||
| - | Podrás utilizar el argumento | + | Podrás utilizar el argumento |
| <code bash> | <code bash> | ||
| - | $ read -sp "Dime de que equipo eres fanátic@: " | + | $ read -sp "Dime de que equipo eres fanátic@: " |
| </ | </ | ||
| Utiliza en un guion de Bash la funcionalidad del comando //read// para solicitar el ingreso de datos al usuario: | Utiliza en un guion de Bash la funcionalidad del comando //read// para solicitar el ingreso de datos al usuario: | ||
| - | <code bash> | + | <file bash dime_tu_nombre.sh> |
| - | # | + | #!/usr/local/bin/bash |
| - | read -p " | + | read -p " |
| - | read -sp "Dime de qué equipo eres fanátic@: " | + | read -sp " |
| - | echo -e "\nTu nombre de usuari@ es $miusuario | + | echo -e "\nTu nombre de usuari@ es $tuusuario |
| - | </code> | + | </file> |
| ==== Operadores ==== | ==== Operadores ==== | ||
| Línea 211: | Línea 210: | ||
| ===Operadores aritméticos ==== | ===Operadores aritméticos ==== | ||
| - | En Bash podrás encerrar entre paréntesis dobles ''< | + | En Bash podrás encerrar entre //paréntesis dobles// ''< |
| <code bash> | <code bash> | ||
| - | (expresion)) | + | ((expresion)) |
| - | (variable1+variable2)) | + | ((variable1+variable2)) |
| - | (variable1-variable2)) | + | ((variable1-variable2)) |
| - | (variable1*variable2)) | + | ((variable1*variable2)) |
| - | (variable1/ | + | ((variable1/ |
| </ | </ | ||
| Línea 226: | Línea 225: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| read -p " | read -p " | ||
| Línea 298: | Línea 297: | ||
| <code bash> | <code bash> | ||
| - | if [ condicion | + | if [ condición |
| then | then | ||
| hacer-algo | hacer-algo | ||
| Línea 309: | Línea 308: | ||
| Este programa solicita que ingreses una cifra, y te informa si es mayor a '' | Este programa solicita que ingreses una cifra, y te informa si es mayor a '' | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| - | read -p " | + | read -p " |
| - | if [ $myvar -gt 10 ] | + | if [ $mivariable |
| then | then | ||
| echo "El valor es mayor que 10" | echo "El valor es mayor que 10" | ||
| Línea 326: | Línea 325: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| - | read -p " | + | read -p " |
| - | if [ $myvar -gt 10 ] | + | if [ $mivariable |
| then | then | ||
| echo " | echo " | ||
| Línea 360: | Línea 359: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| read -p " | read -p " | ||
| Línea 385: | Línea 384: | ||
| 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. | 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> | + | <file bash el_mas_grande.sh> |
| - | # | + | #!/usr/local/bin/bash |
| - | read -p " | + | read -p " |
| - | read -p " | + | read -p " |
| - | read -p " | + | read -p " |
| - | if [ $boca -gt $river ] | + | if [ $copasboca |
| then | then | ||
| - | if [ $boca -gt $independiente | + | if [ $copasboca |
| then | then | ||
| echo "Boca es el más grande" | echo "Boca es el más grande" | ||
| Línea 401: | Línea 400: | ||
| fi | fi | ||
| else | else | ||
| - | if [ $river -gt $independiente | + | if [ $copasriver |
| then | then | ||
| echo "River es el más grande" | echo "River es el más grande" | ||
| Línea 408: | Línea 407: | ||
| fi | fi | ||
| fi | fi | ||
| - | </code> | + | </file> |
| ==== While ==== | ==== While ==== | ||
| Línea 444: | Línea 443: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| while true | while true | ||
| Línea 455: | Línea 454: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| while true | while true | ||
| Línea 491: | Línea 490: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| num=1 | num=1 | ||
| Línea 516: | Línea 515: | ||
| En este ejemplo el se leerá en bucle línea a línea de '' | En este ejemplo el se leerá en bucle línea a línea de '' | ||
| + | __Ver también__: [[while.sh]] (ejemplo '' | ||
| + | ====Until==== | ||
| + | |||
| + | //Until//, es una instrucción de control que sirve para generar bucles, en los cuales grupos de instrucciones anidadas dentro de un bloque se ejecutan de forma repetida hasta que se cumpla una condición. Sigue la sintaxis '' | ||
| + | |||
| + | Cabe destacar que Until, primero comprobará si se cumple la condición y si se cumple y sólo si se cumple entonces finaliza la secuencia de las instrucciones contenidas entre do y done. | ||
| + | |||
| + | Cada vez que se ejecuta un bucle completo (paso de bucle) vuelve a verificar si se cumple la condición antes de volver a ejecutar otro paso de bucle. | ||
| + | |||
| + | ===Ejemplo Until-do-done=== | ||
| + | <code bash> | ||
| + | until [ " | ||
| + | do | ||
| + | | ||
| + | | ||
| + | | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | ==do y done== | ||
| + | |||
| + | Las acciones entre '' | ||
| + | ===Ejemplo Do-Done=== | ||
| + | <code bash> | ||
| + | < | ||
| + | i=10; | ||
| + | |||
| + | until [ $limite -gt $i ] | ||
| + | do | ||
| + | echo Acción $i ejecutada | ||
| + | let i=$i-1 | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | El ejemplo anterior mostraría por pantalla: | ||
| + | < | ||
| + | Acción 10 ejecutada | ||
| + | Acción 9 ejecutada | ||
| + | Acción 8 ejecutada | ||
| + | Acción 7 ejecutada | ||
| + | Acción 6 ejecutada | ||
| + | Acción 5 ejecutada | ||
| + | </ | ||
| ==== case ==== | ==== case ==== | ||
| Línea 565: | Línea 607: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| read -p " | read -p " | ||
| Línea 619: | Línea 661: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| for i in 1 2 3 4 5 | for i in 1 2 3 4 5 | ||
| Línea 630: | Línea 672: | ||
| <code bash> | <code bash> | ||
| - | # | + | #!/usr/local/bin/bash |
| for i in {1..5} | for i in {1..5} | ||
| Línea 641: | Línea 683: | ||
| <code bash> | <code 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 669: | Línea 711: | ||
| <code bash> | <code bash> | ||
| - | #!/bin/bash | + | #!/usr/local/bin/bash |
| for nombrefichero in * | for nombrefichero in * | ||
| Línea 677: | Línea 719: | ||
| </ | </ | ||
| + | __Ver también__: [[manzanas.sh]] (Ejemplo bucle '' | ||
| ====Funciones==== | ====Funciones==== | ||
| - | Una función es una sección de código utilizada para realizar una tarea específica. Estas pueden ser reutilizadas. | ||
| - | >Las funciones | + | Una // |
| Sintaxis: | Sintaxis: | ||
| <code bash> | <code bash> | ||
| - | funcationName(){ | + | nombreFuncion(){ |
| - | // scope of function | + | // procedimiento de la función |
| } | } | ||
| - | functionName | + | nombreFuncion |
| </ | </ | ||
| - | ==Crear función == | + | ===Creación de una función |
| - | Puedes crear tu primer | + | Crea tu primer |
| - | <code bash> | + | <file bash saludo1.sh> |
| - | #!/bin/bash | + | #!/usr/local/bin/bash |
| funSaludazo(){ | funSaludazo(){ | ||
| Línea 707: | Línea 748: | ||
| funSaludazo | funSaludazo | ||
| - | </code> | + | </file> |
| - | Ejecuta el guion: | + | Ejecuta el guion creado: |
| <code bash> | <code bash> | ||
| - | $ ./script.sh | + | $ ./saludo1.sh |
| </ | </ | ||
| < | < | ||
| - | ==Función con argumento== | + | ===Función con argumento=== |
| - | Para pasar un argumento a la función debes hacerlo de la misma manera que hacerlo a un comando desde el intérprete de comandos. Las funciones reciben argumentos $1,$2, etcétera. Crea un guion de shell con el siguiente código fuente de bash: | + | |
| - | <code bash> | + | 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 '' |
| - | #!/bin/bash | + | |
| + | <file bash saludo2.sh> | ||
| + | #!/usr/local/bin/bash | ||
| funArgumentos(){ | funArgumentos(){ | ||
| Línea 733: | Línea 775: | ||
| funArgumentos 1 Bienvenido a Texto-plano.xyz | funArgumentos 1 Bienvenido a Texto-plano.xyz | ||
| - | </code> | + | </file> |
| Ejecuta el guion desde la shell de Bash: | Ejecuta el guion desde la shell de Bash: | ||
| <code bash> | <code bash> | ||
| - | $ ./guion.sh | + | $ ./saludo2.sh |
| </ | </ | ||
| < | < | ||
| - | Primer | + | Primer |
| Segundo Argumento : Bienvenido | Segundo Argumento : Bienvenido | ||
| Tercer Argumento : a | Tercer Argumento : a | ||
| Cuarto Argumento : Texto-plano.xyz | Cuarto Argumento : Texto-plano.xyz | ||
| </ | </ | ||
