Jump to content

Search the Community

Showing results for tags 'variables'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Contacto con el staff
    • Novedades / Anuncios del foro
    • Sugerencias
    • Problemas relacionados con el foro
  • Zona general de charla
    • Presentaciones
    • Charla
    • Zona de Humor, Curiosidades y Otros
    • Mascotas Vagos
    • Noticias del Mundo
    • Tecnología
    • Ayuda y consultas de carácter general
  • Zona GNU/Linux
    • Ayuda, consultas y soporte GNU/Linux
    • Distribuciones GNU/Linux
    • Repositorios. Software GNU/Linux
    • Personalización
    • Raspberry Pi
    • Arduino
    • Manuales / Tutoriales / Guías GNU/Linux
    • Programación
    • Noticias GNU/Linux
    • Hablando de GNU/Linux
  • Zona Gaming
    • Juegos GNU/Linux
    • Noticias Gamer
    • Charla Gamer
  • Zona Móvil
    • Ayuda y soporte para dispositivos móviles
    • Apps Móviles
    • Manuales / Tutoriales / Guías Móviles
    • Roms para dispositivos Móviles
    • Noticias sobre dispositivos Móviles
    • Hablando sobre dispositivos Móviles
  • Zona Android
    • Ayuda, consultas y Soporte Android
    • Apps Android
    • Roms Android
    • Manuales / Tutoriales / Guías Android
    • Noticias Android
    • Hablando de Android
  • Zona Mozilla
    • Ayuda, consultas y soporte Mozilla
    • Aplicaciones Mozilla
    • Roms Firefox OS
    • Manuales / Tutoriales / Guías Mozilla
    • Noticias Mozilla
    • Hablando de Mozilla
  • Microsoft
    • Papelera del Foro

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Página Web


Diaspora


Pump


GNU Social


Google +


Twitter


Facebook


Xmpp


Skype


Steam


Desura


MediaGoblin


Youtube


Vimeo


Picasa


Flickr


Email


Lugar


Intereses

Found 1 result

  1. Si bien lo usamos generalmente para operaciones administrativas o de gestión de archivos, la consola de GNU/Linux extiende su funcionalidad mucho más allá de ese propósito, permitiéndonos programar scripts acorde a nuestras necesidades. Esta guía no pretende ser una referencia completa sobre la programación en Bash, sino una introducción a los comandos y estructuras básicas, lo cual nos permitirá ampliar el poder de nuestro sistema GNU/Linux. Parte1 ¿Qué es un “Script”? Básicamente decimos que es un archivo que contiene código escrito en determinado lenguaje de programación que el sistema usa para determinada tarea. No es necesario que tenga una entrada externa ni interfaz gráfica, pero sí que provoque una salida de datos procesados (por más de que el usuario no los vea). El lenguaje usado por Bash está definido por su propio intérprete y combina la sintaxis de otros Shells, como el Korn Shell (ksh) o el C Shell (csh). Muchos de los comandos que usualmente se usan en la consola también pueden usarse en los scripts, salvo aquellos que pertenecen estrictamente a una distribución en particular. Estructura de un Script Para empezar debemos contar con un editor de texto y ganas de programar. Los archivos que guardamos con extensión .sh podrán ser ejecutados (o interpretados) por la consola, siempre y cuando la primera línea sea la siguiente: #!/bin/bash Esto le dice al sistema que deberá usar la consola para ejecutar el archivo. Además, el carácter # permite escribir comentarios. Para crear el ejemplo más simple agregamos una línea más, vista en la siguiente imagen: El comando echo muestra un mensaje en pantalla, en este caso el típico “Hello world!”. Si lo guardamos y ejecutamos con la consola veremos el resultado. Comandos básicos Los siguientes comandos son comunes y muy útiles para cualquier tipo de programa. Aclaramos que existen muchos más, pero por ahora cubriremos los siguientes. Alias: permite que una cadena de palabras sea sustituida por una más corta, permitiendo la reducción del código. #creamos un alias llamado per con la dirección de la #carpeta Descargasalias per=’/home/usuario/Descargas’#Cada vez que queramos usarlo solo debemos llamar a #la nueva palabraper#Para destruir ese alias, usamos unaliasunalias per break: permite salir inmediatamente de un ciclo for, while, until o select (más adelante estudiaremos detalladamente los ciclos) #Creamos un ciclo que asignará los números del 1 al 5 #por cada “vuelta de ciclo”for contador in 1 2 3 4 5do#Imprimimos el actual valor de la variable #contador, el cual es analizado por el carácter $echo “$contador”#Si el valor de contador es igual a 3if [$contador –eq 3]then#El break sale del ciclo forbreakfidone continue: similar al break, excepto que ignora la actual vuelta de ciclo y pasa a la siguiente. #Creamos un ciclo que asignará los números del 1 al 5 #por cada “vuelta de ciclo”for contador in 1 2 3 4 5do#Si el valor de contador es igual a 3if [$contador –eq 3]then#Continue impide que se analize el resto del ciclo #actual saltando a la siguiente vuelta, o sea que el #valor 3 no se imprimirá.continuefiecho “$contador”done declare: declara variables y les asigna valores, al igual que typeset (funcionan de la misma manera). Podemos combinarla con algunas opciones: -i declara números enteros; -r para variables de solo lectura, a las cuales no se les podrá cambiar el valor; –a para matrices o “arrays”; -f para funciones; -x para variables que podrán ser “exportadas” fuera del ambiente del script propio. declare –i num=12declare –x pi=3.14 help: muestra la ayuda de un comando concreto. jobs: muestra los procesos en ejecución. #Con –c mostramos el nombre de los comandos, con –p #el pid (id de proceso) de cada proceso.jobs -cp let: evalúa una expresión aritmética let a=11let a=a+5#Finalmente imprimimos el valor de a que es 16echo “11 + 5 = $a” local: crea variables locales, las cuales deben ser usadas preferentemente en funciones del propio scripts para evitar errores. Puede usar las mismas funciones del comando declare. local v1=”Esta es una variable local” logout: permite salir del inicio de sesión de un Shell completamente; útil para los casos donde trabajemos con más de una ventana de Shell, en los cuales el comando exit solo permitirá finalizar una ventana a la vez. printf: permite imprimir un dato y darle formato. Cuenta con muchas opciones, así que mencionaremos algunas. # %f imprime como número flotante, n para nueva #líneaprintf “%fn” 55.000000# &d permite pasar números decimales como argumentosprintf “Hay %d pedidos valuados en %d dólares.n” 20 500Hay 20 pedidos valuados en 500 dólares. read: lee una línea de standard input (módulo usado en la carga de datos por medio del teclado por ejemplo). Podemos pasar opciones como: -t para dar un tiempo límite de lectura; -a para que cada palabra sea asignada a una posición del array aname; -d para usar un delimitador que se escribirá al final de la línea; entre otros. echo “Ingresá tu nombre y presioná ENTER”#Leemos la variable nombreread nombreecho “Tu nombre es $nombre” type: describe un comando y su comportamiento. Puede ser útil para averiguar las definiciones de datos de cada comando. type –a ‘[’#type nos dice que [ es un comando builtin del Shell[ is a Shell builtin# -a permite encontrar los directorios que contienen #un ejecutable con el nombre escrito.[ is /usr/bin/[ ulimit: limita el acceso y uso de ciertos recursos del sistema a los procesos, ideal para programas que permiten hacer cambios administrativos o que están orientados a distintos tipos de usuarios. Al establecer un límite escribimos un número que representa los kilobytes del límite. #Vemos nuestros límites actualesulimit –a# -f permite limitar a los usuarios a que no puedan #crear archivos de mayor tamaño que 512000 Kb (500 #Mb)ulimit –f 512000# -v limita la memoria virtual del proceso.ulimit –v 512000 wait: espera a que se realice determinado proceso o trabajo para continuar. #El script espera a que se realice el proceso de pid #2585 wait 2585 Otros comandos útiles que podemos agregar a los scripts están representados por símbolos. !!: ejecuta nuevamente el último comando !wer: ejecuta el último comando que comenzaba con la expresión “wer”. '==', '!=', '>', '<', '>=', y '<=': operadores relacionales. |: el operador OR usado generalmente para unir dos expresiones regulares. : comando de escape que permite formatear las expresiones. Por ejemplo: a para una alerta de sonido, n para nueva línea, b para el retroceso, etc. Parte2 Segunda parte de este mini-tutorial de programación en Bash, donde aprendemos a usar ciclos y otras herramientas que nos ayudarán a mejorar las funcionalidades de nuestros scripts. El condicional If La función de If es la de aplicar un filtro y realizar una operación o tarea para cada tipo de filtro aplicado. Su estructura es la siguiente: If [ condición ]; then comandoselif [ condición ]; then comandoselse; comandosfi Se muestra un ejemplo junto al ciclo For en su respectiva sección. Ciclos 1. While: ejecutará todos los comandos especificados entre do y done mientras la condición sea verdadera. Si queremos pasarle operadores de comparación, la expresión deberá encontrarse entre corchetes. while CONDICIÓN/COMANDOdo comandosdone Ejemplo: tabla de multiplicar de un número #!/bin/bashX=1echo “Ingresa un número y presiona ENTER”read M#El ciclo controla que X sea menor o igual a 10while [ $X –le 10 ]do #En R almacenamos la multiplicación de X por M R=$[X*M] #Se imprime dicha multiplicación en pantalla echo “$M * $X= $R” #Con let, incrementamos el valor de X en 1 unidad let X=$X+1done 2. For: almacena una lista de elementos en una variable, la cual será usada para realizar ciertas operaciones con cada ciclo. for VARIABLE in ELEMENTOSdo comandosdone Ejemplo: programa que copia un archivo de una carpeta hacia otra, reemplazando un archivo viejo. #/bin/bash#Establecemos directorios de origen y destinoORIGEN=/home/usuario/DescargasDESTINO=/home/usuario/Documentos#Nos posicionamos en el de origencd $ORIGEN#De todos los archivos, solo queremos aquel que se #llame ARCHIVOfor ARCHIVO in *do ARCH-DESTINO= “$DESTINO/$ARCHIVO” # -f nos filtra los archivos regulares, ya que de #nada nos sirven los directorios. –nt nos filtra #los archivos “más nuevos” que aquellos #encontrados en la carpeta destino if [ -f $ARCHIVO ] && [ $ARCHIVO –nt $ARCH-DESTINO ]; then echo “Copiando $ARCHIVO…” #copiamos el archive con cp cp $ARCHIVO $ARCH-DESTINO fidone#Hacemos cd para salir de la carpeta de origencd Otro ejemplo: script donde el usuario debe adivinar un número al azar generado por la computadora. #/bin/bash#Se genera un número aleatorio del 1 al 10, se lo #guarda en AZARAZAR=$[$RANDOM%10+1]while [ 1 ]do echo –n “Ingrese un numero: “ read NUM#Compara si el número elegido por el usuario es #igual a AZAR; recordemos usar $ para evaluar los #valores de las variables y no sus nombres if [ “$NUM –eq “$AZAR” ]; then echo “Acertaste!” #break permite finalizar el ciclo while break #Si el número es menor a AZAR elif [ “$NUM –gt “$AZAR” ]; then echo “Es menor” “Sino, es más grande que AZAR else echo “ES mayor” fidone 3. Until: bastante similar en estructura al While, except que el código siempre se ejecuta mientras la evaluación de la condición sea negativa, es decir, el programa sigue ejecutándose “hasta que sucede la condición” until CONDICIÓN/COMANDOdo comandosdone Ejemplo: imprimir los números del 10 al 20 en orden descendente #!/bin/bash CONT=20#Mientras el contador sea menor que 10 (-lt, “lower #than”) se ejecuta el códigountil [ $CONT -lt 10 ]; do echo “CONTADOR $CONT” #A CONT se le resta una unidad let CONT-=1done 4. Select: este último ciclo es un caso especial, ya que es usado generalmente para realizar menúes de forma rápida. Trabaja de forma similar al ciclo For. select VARIABLE in LISTAdo comandosdone Ejemplo: darle al usuario la posibilidad de continuar o finalizar el script. #!/bin/bash #item es una variable que responde a lo que el #usuario elige, Continuar y Finalizar son las #opciones que tiene disponible, aunque pueden ser #agregadas otras más select item in Continuar Finalizardo#Si el usuario elige finalizar el programa, entonces con break salimos del ciclo. if [ $item = "Finalizar" ]; then break fidone Parte 3 Para afianzar nuestros conceptos aprenderemos 2 herramientas muy útiles para programar y que se desenvuelven perfectamente en Bash. Aprender a crear funciones y definir tuberías puede parecer complejo al principio, pero luego veremos la inmensa utilidad que nos proveen. Tuberías (pipes) Concretamente y sin dar muchas vueltas, una tubería es un método que permite dirigir la salida de un proceso como la entrada de otro, lo cual permite una serie de ventajas, como reducir las líneas de código, prescindir de variables de almacenamiento de resultados y mejorar la eficiencia del script. Una tubería se reconoce generalmente por poseer el símbolo | que permite concatenar expresiones; si bien es usada por defecto, existen otras formas de crear tuberías. Ejemplo: imprimir mensajes recientes del kernel #dmesg permite ver los mensajes recientes del kernel y drivers cargados #durante el booteo del sistema; tail imprime las últimas partes de un archivo o #comando dmesg | tail Si bien se pueden complicar tanto como queramos, la estructura básica de una tubería permite que el resultado de un comando sea usado como entrada del siguiente, el cual puede proveer la entrada de un nuevo comando si seguimos agregando tuberías consecutivas. Funciones Las funciones son un conjunto de sentencias que se agrupan para poder ser ejecutadas varias veces sin tener q volver a escribirlas. Es equivalente a pensar que cuando aprendemos a cocinar un tipo de comida escribiremos su receta en una hoja, y cada vez que deseamos cocinar esa comida consultamos la receta en lugar de volver a escribir una nueva hoja con la misma receta. Quizás lo más importante de las funciones es la posibilidad de pasarle parámetros, datos que estas usarán para procesarlos y generar una salida. Su estructura es la siguiente: function nombre-de-la-función { procesos } Ejemplo: función que muestra los servicios que funcionan sobre el protocolo tcp. También podemos ver cómo aplicar más tuberías. #Definimos un nombre de función, puede ser el que nos guste. function servicios_tcp { #cat concatena y muestra el contenido de la carpeta /etc/services, que es la #que contiene todos los servicios con sus puertos asociados. #el primer grep toma la lista y elimina los comentarios, con –v invertimos el resultado #el segundo grep muestra solo los relacionados a tcp cat /etc/services | grep –v “^#” | grep tcp } Cuando necesitemos ejectuar esta función solo tenemos que llarmarla por su nombre: servicios_tcp En este caso funciona sin parámetros; en el caso de que los tenga debemos agregarlos para que la función trabaje adecuadamente, caso contrario la función no funcionará adecuadamente. El uso de return permite a una función devolver un valor como resultado del proceso. Ejemplo: función con parámetros de entrada que calcula la suma de 2 números. #!/bin/bash function suma() { #con let podemos ejecutar la operación dentro de las comillas let "resultado=$1 + $2" #return permite devolver el valor entero. Una vez ejecutado el return, el valor quedará depositado dentro de la variable $? return $resultado; } #se llama a la función suma y pasamos 2 parámetros de entrada. suma 2 3 #se imprime el valor de $? con echo evaluando el valor real de la variable entre comillas echo -e "Resultado = $?";
×
×
  • Create New...