Ir al contenido

Buscar en La Comunidad

Mostrando resultados por etiquetas 'script'.

  • Buscar Por Etiquetas

    Añade etiquetas separadas por comas.
  • Buscar Por Autor

Tipo de Contenido


Foros

  • 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 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

Encontrar resultados en...

Encontrar resutados que...


Fecha de Creación

  • Start

    Fin


Última Actualización

  • Start

    Fin


Filtrar por numero de...

Joined

  • Start

    Fin


Grupo


Página Web


Diaspora


Pump


GNU Social


Google +


Twitter


Facebook


Xmpp


Skype


Steam


Desura


MediaGoblin


Youtube


Vimeo


Picasa


Flickr


Email


Lugar


Intereses

Encontramos 26 resultados

  1. Saludines GNU/Linuxeros Hace poco leí en un articulo que se pueden usar los códigos QR para conectar el Smartphone a la red WiFi simplemente escaneando el código con un programa como Barcode Scanner, ahorrándose uno así la faena de buscar el nombre de la red e introduciendo la contraseña manualmente. Para generar el QR existen páginas web con un simple formulario que hasta ofrecen en github su código fuente en Javascript, concretamente he visto esta: https://qifi.org La idea me pareció fantástica, ya que en casa a uno le pueden pedir esos datos cuando menos se lo espera. Pero la idea de poner todos esos datos en una web publica no me hace mucha gracia, aunque en la página aseguran que el código javascript se ejecuta localmente y no se envía nada a nadie. A pesar de eso, solo se trata de codificar una cadena cuyo "estándar" se encuentra aquí: https://github.com/zxing/zxing/wiki/Barcode-Contents#wifi-network-config-android Así que pensé en hace un aplicación local igual de sencilla para generar los QR que no tenga muchas dependencias, por eso he elegido usar programación con bash y zenity para la GUI y a elección del usuario python-qrcode o qrencode para generar el QR. Para la GUI habría quedado mejor con PyGTK o TkInter pero de momento es lo que hay. A continuación os dejo los comandos para instalar estas dependencias (que me extrañaría que no las tuvieseis ya instaladas) y el programa en si: Ubuntu: sudo apt-get install zenity python-qrcode Arch: sudo pacman -S zenity python-qrcode Para el que prefiera qrencode: sudo apt-get install qrencode o sudo pacman -S qrencode El script usando zenity: Para los que no quieran instalar zenity, sin GUI: Hace tiempo que no hago nada en bash así que es posible que os salte algún que otro error. Pero como es un simple script podéis corregirlo y personalizarlo vosotros mismos (he procurado mantener la legibilidad del código lo mejor posible), y si es muy grave me lo comentáis por aquí y edito el mensaje para corregirlo. Yo he realizado varias pruebas y me ha funcionado todo correctamente así que espero que no me acribilléis con muchos reportes XD Y eso es todo, espero que os pueda ser útil
  2. Apt-fast es un script shell que permite la paralelización de descargas de paquetes deb, tanto con apt-get, apt o aptitude. Éste nos permite descargar varios paquetes simultáneamente, desde diferentes mirros estableciendo varias conexiones por cada uno, en lugar de descargarlos de uno en uno como ocurre por defecto. Esto tiene una ventaja para el usuario, ya que puede exprimir al máximo su conexión a Internet para descargar los paquetes deb mucho más deprisa, pero también tenemos que tener en cuenta el lado del servidor, ya que las descargas en paralelo, para quien las sirve, suponen trabajo extra y no son ni remotamente tan divertidas como para quien los descarga. En este sentido, además de no exagerar con el número de conexiones y descargas en paralelo, tendremos a bien definir varios mirrors en el archivo de configuración, para no sobrecargar uno sólo, sino hacer descargas de distintos paquetes desde diferentes servidores cada uno. PPA Existe un reporitorio PPA desde el que podemos descargar e instalar Apt-fast. Tan sencillo como add-apt-repository ppa:saiarcot895/myppa aptitude update aptitude install apt-fast Manualmente Pero como ya nos conocemos, vamos a indicar también cómo instalar el script manualmente desde github. Como dependencias tendremos los paquetes aria2 y, obviamente, git. El proceso es tan sencillo como clonar el repositorio github, copiar el binario del script a /usr/bin (con permisos de ejecución) y sus archivo de configuración a /etc aptitude install aria2 git git clone https://github.com/ilikenwf/apt-fast /tmp/apt-fast cd /tmp/apt-fast cp apt-fast /usr/bin chmod +x /usr/bin/apt-fast cp apt-fast.conf /etc Bash completion La opción de autocompletado bash es muy útil a la hora de trabajar con paquetes, así que nos conviene activar dicha opción antes de empezar a lidiar con apt-fast cp completions/bash/apt-fast /etc/bash_completion.d chown root:root /etc/bash_completion.d/apt-fast . /etc/bash_completion Zsh completion Igualmente, sin el lugar de bash nos valemos de zsh, la situación es la misma, pero el proceso ligeramente distinto. cp completions/zsh/_apt-fast /usr/share/zsh/functions/Completion/Debian chown root:root /usr/share/zsh/functions/Completion/Debian/_apt-fast source /usr/share/zsh/functions/Completion/Debian/_apt-fast Páginas Man Porque en algún momento puede que necesitemos consultar el manual cp ./man/apt-fast.8 /usr/share/man/man8 gzip -f9 /usr/share/man/man8/apt-fast.8 cp ./man/apt-fast.conf.5 /usr/share/man/man5 gzip -f9 /usr/share/man/man5/apt-fast.conf.5 Configuración Apt-fast cuenta con un asistente, que nos aparecerá tanto al instalar el paquete como al invocar la orden: dpkg-reconfigure apt-fast Pero ya que nos hemos estado ensuciando las manos desde el principio, voy a seguir con la configuración manual. El archivo de configuración de apt-fast está bien comentado, así que me limitaré a hablar de las opciones más relevantes en nuestro caso dentro de /etc/apt-fast.conf: Por defecto utilizará apt-get, pero los que ya me conocen saben que en mi caso siempre recomiendo aptitude en su lugar, así que: Definir mirrors El listado de mirrors es muy importante, como ya hemos dicho, así que nos tomaremos un momento para definirlos. No es necesario que los especifiquemos tal y como los tenemos en /etc/apt/sources.list, sólo necesitamos la dirección del mirror, ni ramas ni opciones ni nada por el estilo, tal y como se expresa en los ejemplos, simplemente una serie de direcciones separadas por comas: Número máximo de conexiones, definido por _MAXNUM. El valor por defecto es de 5, es decir, 5 descargas en paralelo, que es un valor bastante bueno, así que salvo que tengamos otros planes, podemos dejarlo así (¿Han visto cuantos mirros he definido antes? ) Máximo de conexiones por servidor. De nuevo el valor por defecto es más que suficiente Descargando e instalando paquetes Apt-fast no se diferencia de las herramientas utilizadas hasta ahora. De hecho, hemos definido la que utilizará por defecto, así que las opciones a utilizar serán las mismas que apt-get o aptitude, sólo que el comanda será apt-fast Repositorio github https://github.com/ilikenwf/apt-fast
  3. hay un nuevo lenguaje para hacer que Estados Unidos vuelva a ser un gran país. https://www.unocero.com/2016/01/23/trumpscript-el-lenguaje-de-programacion-de-donald-trump/
  4. Saludos. Hay bases de datos públicas las cuales te las puedes bajar, por ejemplo el INE (Instituto Nacional de Estadística), y trabajar con ellas y hacer diversos estudios. Lo malo es que para trabajar con estos datos, por lo general, necesitas programas de pago y que sólo funcionan bajo windows. Pero también te dan la opción de bajártelos en formato csv y así poder importarlos a base de datos MySql. Me surgió la pega de que al ser bases de datos muy grandes el gestor de MySql, phpmyadmin, no puede con ellas, da errores múltiples, de tiempo de ejecución, etc, y después de hacer varias configuraciónes en php.ini seguía sin poder importarlas. Encontré por la red un script en bash para hacer esa importación masiva (mérito a su autor), pero me seguía fallando y le hice unos "retoques" y ahora me funciona de maravilla. En el script hay que poner el nombre de la base de datos que has creado previamente (ten en cuenta que vas a importar tablas), el usuario de la base de datos, la contraseña y la ruta del directorio donde están los archivos csv, ya sea un archivo o varios, te creará una tabla por cada archivo que haya. Aquí el script: #!/bin/bash # By brian@brianyoungblood.com to keep original files and import based on tab delimited data # orginal script based on work from Eric London. http://ericlondon.com/bash-shell-script-import-large-number-csv-files-mysql # show commands being executed, per debug #set -x # define database connectivity _db="nombre_bade_de_datos" _db_user="usuario" _db_password="contraseña" # define directory containing CSV files _csv_directory="/directorio/donde/estan/csv" # go into directory cd $_csv_directory # get a list of CSV files in directory _csv_files=`ls -1 *.csv` # loop through csv files for _csv_file in ${_csv_files[@]} do # remove file extension _csv_file_extensionless=`echo $_csv_file | sed 's/\(.*\)\..*/\1/'` # define table name _table_name="${_csv_file_extensionless}" # get header columns from CSV file, creándola como un array _header_columns=(`head -1 $_csv_directory/$_csv_file | tr ',' '\n' | sed 's/^"//' | sed 's/"$//' | sed 's/ /_/g'`) # Crea un array con los datos de la segunda fila _header_columns_numero_texto=(`head -2 $_csv_directory/$_csv_file | tail -1 | tr ',' '\n' | sed 's/^"//' | sed 's/"$//' | sed 's/ /_/g'`) _header_columns_string=`head -1 $_csv_directory/$_csv_file | sed 's/ /_/g' | sed 's/"//g'` echo "header============>${_header_columns[@]}" echo "header============>$_header_columns_string" # ensure table exists mysql -u $_db_user -p$_db_password $_db << eof CREATE TABLE IF NOT EXISTS \`$_table_name\` ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_spanish2_ci eof # Se hace un bucle for con el numero de campos, si el dato de la segunda fila es numerico o texto asi crea el campo for (( c=0; c<${#_header_columns[@]}; c++ )) do if [[ ${_header_columns_numero_texto[$c]} =~ [[:alpha:]] ]] ; then mysql -u $_db_user -p$_db_password $_db --execute="alter table $_table_name add column ${_header_columns[$c]} text" else mysql -u $_db_user -p$_db_password $_db --execute="alter table $_table_name add column ${_header_columns[$c]} Float" fi done # import csv into mysql mysqlimport --local --ignore-lines=1 --fields-enclosed-by='"' --fields-terminated-by=',' --lines-terminated-by="\n" --columns=$_header_columns_string -u $_db_user -p$_db_password $_db $_csv_directory/$_csv_file done exit Edito: He mejorado un poco el script. Antes creaba todos los campos tipo texto.... ahora detecta si los datos son texto o numero y así los crea. Bueno, espero que a alguien le sirva y le funcione bien. Saludos
  5. Hola, Os escribo a ver si pueden ayudarme a solventar una duda. Estoy creando un script, el cual básicamente, ejecuta la acción de reproducir unos audios y lleva a cabo la acción de unos "mirrors" a través de Lftp. El tema es que a la hora de poder ejecutar estas acciones o no, quiero condicionarlo a través de unas variables. Una de estas variables sería la conexión o no a Internet. Poniendo en el caso de que si hay Internet, me entre a ejecutar la acción (reproductor) y si no la hay (conexión) me ejecute otros comandos. Hay algún comando que pueda darme esta información y que pueda guardarla en la variable? Estuve probando con "ping" bajo mi red local, y he podido observar que me dice cuando estoy conectado (recibiendo datos) y cuando no. Pero no se como podría utilizar esta info para usar como condicionante. Espero puedan ayudarme y si necesitan más información, háganmelo saber. Saludos y gracias de antemano.
  6. Yo uso Git para soncronizar mis documentos entre mis PCs. El problema que estaba teniendo es que a veces me olvidaba de sincronizar antes de apagar la PC, entonces hice un script que ejecuto justo antes de que se apague el equipo. El script no hace nada solo, va preguntando que hacer. Por si alguien le sirve lo pongo aca, uno puede agregarle todos los repositorios que uno quiera. Va pasando uno por uno, lo que hace es: Si hay modificaciones sin guardar Uno puede pedir que el script agregue, haga commit, pull y push solo. Lo único que hace falta hacer es poner el nombre del commit Sino uno puede pedir una shell para hacer cosas manualmente, y con "exit" volver al script Sino se puede saltear y no hacer nada Si no hay modificaciones pero hay commits para pushear Uno puede pedir que el script haga pull y push solo Sino uno puede pedir una shell para hacer cosas manualmente, y con "exit" volver al script Sino se puede saltear y no hacer nada Si no hay nada que hacer en este repositorio Uno puede pedir que el script haga pull solo Sino uno puede pedir una shell para hacer cosas manualmente, y con "exit" volver al script Sino se puede saltear y no hacer nada El script es este, al final hay que poner los paths a los repositorios:
  7. Hola a todos, sé que me he presentado hace nada, pero ya que estoy planteo una duda que me ha surgido en el trabajo; estoy tratando de diseñar un script para un sistema de colas, basado en bash que se encargue (entre muchas otras cosas, pero esta es la que más problemas me está dando) de hacer una comprobación de si las particiones de los nodos (cada nodo es un ubuntu) está montada, y si no lo está montarla, mi duda recae en como comprobar con un script esto, puede que sea un script muy básico para alguno de vosotros, pero yo os aseguro que no soy capaz de plantearlo para que me funcione. Espero vuestra ayuda, la necesito! Un saludo.
  8. Hola, os escribo para ver podéis solucionarme un problema que me esta dando varios dolores de cabeza. Estoy utilizando una raspberry, con el Raspbian, de cara a andar trasteando e introduciéndome en el mundillo de la frambuesa. Una de las pruebas que estoy llevando a cabo, es la incorporación de un pulsador para poder apagar la Raspberry. He incorporado un script para ello. Es el siguiente: # Import the modules to send commands to the system and access GPIO pins from subprocess import call import RPi.GPIO as gpio # Define a function to keep script running def loop(): raw_input() # Define a function to run when an interrupt is called def shutdown(pin): call('halt', shell=False) gpio.setmode(gpio.BOARD) # Set pin numbering to board numbering gpio.setup(7, gpio.IN) # Set up pin 7 as an input gpio.add_event_detect(7, gpio.RISING, callback=shutdown, bouncetime=200) # Set up an interrupt to look for button presses loop() # Run the loop function to keep script running Dicho programa consigo hacerlo correr en el terminal y funciona. O sea, cuando presiono el pulsador, se apaga. El problema esta en que el script inicia con error al arrancar la maquina. Lo incorporo al archivo: sudo nano /etc/rc.local python /home/off.py El error en sí viene marcado en la línea: File "/home/off.py, line 17, in <module> loop() # Run the loop function to keep script running ​File "/home/off.py, line 7, in loop raw_input() EOFError: EOF when reading a line A ver si podéis ayudarme a solucionar el problema. Llevo poco tiempo en el mundo GNU/Linux y se me escapan muchas cosas de este amplio universo. Salud y gracias por adelantado
  9. Hice un script que ejecuta los comandos de este tutorial de CyberAngel en ubuntuforums, sirve para hacer Timelapses o Stop in Motions. Los Timelapses son videos creados a partir de varias (muchas) fotos tomadas a intervalos de por ejemplo 5 segundos, cuando se pasan esas fotos varias veces por segundo parece un video a cámara rápida. Los Stop in Motion son parecidos nada más que en vez de tomar las fotos cada un cierto tiempo se toman manualmente y se cambia algo de la escena entre cada foto Ejemplo de Timelapse: Ejemplo de Stop in Motion: El script hace un video con mencoder de las fotos que tengas en la carpeta seleccionada, también se le debe elegir los FPS (cúantas fotos por segundo se ven en el video) Script: Script 2, Es un deflicker, ajusta el brillo de las imagenes para que el video no parpadee cada vez que por ejemplo una nube tape el sol y la foto salga más brillante: https://github.com/cyberang3l/timelapse-deflicker/blob/master/timelapse-deflicker.pl Uso: Copiar y pegar el script que esta en el spoiler en un archivo llamado timelapse.sh Hacer ejecutable al script haciendo click derecho > propiedades o con chmod +x timelapse.sh Descargar todos los programas necesarios, creo que son mogrify perlmagick mencoder libfile-type-perl libterm-progressbar-perl Guardar el segundo script del deflicker en un archivo llamado timelapse-deflicker.pl Poner los dos archivos en una misma carpeta Ejecutar el script con ./timelapse.sh [carpeta/con/las/fotos] [resolucion] [formatodelasfotos] fps. Por ejemplo: ./timelapse.sh TimelapseNubes/Fotos 1920x1080 *.jpg 30 Cuando termine va a aparecer video.avi en la ubicacion del script Si hace falta se puede comprimir el video con avconv o ffmpeg. Por ejemplo: ffmpeg -i video.avi -c:v libx264 -preset slow -crf 15 video-final.mkv
  10. Hola, soy nuevo en Linux y ando bastante perdido. Asique si alguien me pudiese ayudar, paso por paso, se lo agradecería. Uso Lubuntu con LXDE. El caso es que quiero crear un script ejecutable de terminal en el escritorio, que al darle doble click en escritorio, me habra la aplicación terminal (Lxterminal) y me ejecute el comando "sudo nast -m" automáticamente. Yo lo que intento es crear un script (script.sh) cuyo código es: Pero al ejecutarlo, con doble click, no me responde (no hace nada). He seleccionado "Abrir con LxTerminal" Si me pudieseis ayudar, os estaría muy agradecido (No tengo experiencias anteriores con Linux, asique mis conocimientos son muy limitados) Un saludo
  11. El proyecto ODUSO automatiza la instalación de algunos temas GTK incluidos los iconos. También incluye un buscador de aplicaciones para incluir su instalación mediante ppa con el script generado. Al final de la página se pueden incorporar diversas opciones incluidas las de actualizar paquetes o repositorios. El script generado también puede hacer un reboot después de ejecutarse o apagar el equipo; incluso puede estarse quietecito (do nothing). Está pensada para las versiones Precise y Trusty de Ubuntu, y para las derivadas Elementary OS Luna y Freya. Permite elegir el tipo de iconos (Moka, Numix, El Faenza...) y el tema GTK, para generar el script que lo instalará todo. Dependiendo de la versión de Ubuntu habrá disponibles más o menos temas GTK: para Precise y Luna está disponible Numix, mientras que para Trusty y Freya también se incluyen los temas Vertex y Paper. Una vez generado el script pulsando en el botón «Generate» este se puede o ver en una página web, o enviarlo por correo electrónico, o bajar el archivo con el script. Por ahora se ofrece para usuarios de Ubuntu y Elementary, aunque tienen intención de extender sus scripts a otras distribuciones.
  12. elmoyer

    Bash vs. Python

    Buenos días compañeros! Estoy comparando código en bash y en python, así que he decidido compartirlo con vosotros. Iré publicando algunos scripts cuya comparación me ha gustado VS. Empezamos con algo simple: Listado del contenido de un directorio: ## Bash: ls -l /tmp/ ## Python: import subprocess subprocess.call(["ls", "-l", "/tmp"]) Obtener información del sistema: ## Bash ---------- #!/usr/bin/env bash function uname_funct { UNAME="uname -a" printf "Obteniendo informacion del sistema con el comando $UNAME : \n\n" $UNAME } function disk_funct { DISKSPACE="df -h" printf "Obteniendo informacion del disco duro con el comando $DISKSPACE : \n\n" $DISKSPACE } ----------- ## Python: ----------- #!/usr/bin/env python import subprocess def funcion_uname(): uname = "uname" uname_arg = "-a" print "Obteniendo informacion del sistema con el comando %s :\n" % uname subprocess.call([uname, uname_arg]) def funcion_disco(): diskspace = "df" diskspace_arg = "-h" print "Obteniendo informacion del sistema con el comando %s :\n" % diskspace subprocess.call([diskspace, diskspace_arg]) def main(): funcion_uname() funcion_disco() main() Utilidad en Python: Autocompletado!! ## Iniciar python desde el terminal y escribir: import rlcompleter, readline readline.parse_and_bind('tab : complete') Cuando vaya avanzando, iré completándolo Espero que os guste y os sirva de algo
  13. Hola Estoy haciendo algunos script en bash, perl y cosas así que tienen que usar contraseñas, por ejemplo, para acceder a un correo electronico. Normalmente lo que hago para estos casos es una de estas opciones: Almacenar la contraseña en un fichero al que solo tiene permiso de lectura mi usuario Esto no se si es suficiente ni lo mejor, pero además no siempre me vale porque a veces lo que quiero es crear un script que sea ejecutado por otros usuarios. Usuarios que no quiero que sepan la contraseña que se usa pero que puedan ejecutar el comando que la usa Para estos casos lo que estoy haciendo es lo siguiente Creo el script como root y luego creo un grupo que tiene permiso para ejecutar como sudo dicho comando, y añado a ese grupo los usuarios que quiero que puedan ejecutar el comando pero que no puedan leer el fichero de configuración en el que esta la contraseña Un ejemplo se puede ver aqui: http://apuntes.pusku.com/914 Pero mi pregunta es ¿no hay una manera mejor o más correcta de hacer estas cosas? He probado cosas más sencillas como por ejemplo: pi@bot /tmp $ sudo chmod 771 ejemplo.sh pi@bot /tmp $ ls -lh ejemplo.sh -rwxrwx--x 1 root root 25 sep 27 00:19 ejemplo.sh pi@bot /tmp $ ./ejemplo.sh /bin/bash: ./ejemplo.sh: Permiso denegado Pero no funciona. Crei que si se tenia permiso de ejecución y no de lectura ni escritura se podria ejecutar de todos modos, pero parece que no. Muchas gracias por adelantado.
  14. Hoy pude hacer algo que debería existir en todas las computadoras y sistemas operativos, un atajo de teclado para invertir la capitalización de las letras de un texto. Por ejemplo "Soy Feliz!!" pasaría a ser "sOY fELIZ!!" La idea es que uno se pone a escribir apurado, por escribir sin mirar se da cuenta que escribió una oración mientras tenía Bloq Mayus activado. Entonces hay que borrar y empezar de nuevo, salvo que uses Linux!. Entonces seleccionas el texto, apretás Ctrl-B (O su atajo de teclado de preferencia) y seguidamente Ctrl-V para pegar el texto convertido, como el texto erróneo ya estaba seleccionado Ctrl-V va a sobreescribir todo el texto Situación 2: Te ponés a buscar la tarea en internet y lo que estás buscando está todo en mayúsculas, a no desesperar. Seleccionás todo, apretás Ctrl-B y pegás en tu editor de texto favorito con Ctrl-V. Soy feliz Entonces lo que hace Ctrl-B es algo así como copiar el texto invertido Por favor no me digan que esto ya existía, porque o si no me hubieran avisado antes jaja El script es este: #!/bin/bash xclip -selection primary -o | tr [:lower:][:upper:] [:upper:][:lower:] | xclip -selection clipboard Yo lo hice buscando en internet como copiar, como pegar, y como invertir la capitalización, y después junté todo en un script. Por lo que entiendo es así: La primer línea le dice a la computadora que el archivo es un programa, después: xclip -selection primary -o Muestra el texto que está en el portapapeles primario, o sea ese que al presionar el boton del medio del mouse pega el texto seleccionado anteriormente. Entonces el comando muestra la selección Luego con el símbolo "|" lo que uno hace es "pasarle" la salida de un comando a otro. Entonces pasamos la salida del comando anterior al comando siguente que es este: tr [:lower:][:upper:] [:upper:][:lower:] Eso convierte todas las letras minúsculas que encuentra a mayúsculas y viceversa, luego con otro "|" pasamos la salida de ese comando al siguiente: xclip -selection clipboard Ese comando guarda en el portapapeles (otro portapapeles, no el primario, este portapapeles es el que funciona con Ctrl-V y Ctrl-C) todo lo que le pasamos Por último manualmente pegamos el texto guardado en el portapapeles con Ctrl-V Acá explico cómo "instalar" este script por si no saben cómo: Primero peguen todo el script (el primer cuadro de código) en un archivo de texto con un nombre original, "invertirCapitalizacion.sh" es lo más original que se me ocurre. El ".sh" no hace falta, pero por lo que sé por convención guardamos los scripts con esa extensión Después al archivo guardado le hacemos click derecho, propiedades y en la parte de permisos ponemos marcar como ejecutable (desde la consola de puede usar el comando chmod) Por último hay que hacer que al presionar Ctrl-B se ejecute el programa. Eso depende de cada distribución, tiene que estar en preferencias o por ahí
  15. Script casero para resolver dependencias en Slackware Escribi un pequeño script para obtener un listado ordenado ( ordenado por prioriad de dependencia) de las dependencias necesarias (solo lista las que necesitas en tu sistema) para instalar un paquete en Slackware. Es para agilizar un poco la resolucion de dependencias y no hacerlo de forma tan manual, es cierto que existen paquetes que resuelven las dependencias solos, pero yo prefiero no usarlos y ver que estoy instalando. Hago uso de la pagina SlackBuilds para obtener informacion de los paquetes, ya que uso ese repositorio mediante Sbopkg para instalarlos de forma mas rapida. El script por ahi es un poco precario, pero funciona bastante bien, resuelve las dependencias de forma recursiva , avisa si ya esta instalado, o si no es necesario instalar ninguna dependencia. #!/bin/bash #=============================================================================== # # FILE: dependencias.sh # # USAGE: ./dependencias.sh paquete # # DESCRIPTION: Resolver dependencias para un paquete determinado, el script # proporcionas un listado ordenado de paquetes a instalar # para sistemas basados en SLACKWARE. # # OPTIONS: # REQUIREMENTS: Curl, wget, gawk # NOTES: - # AUTHOR: Skilltik Henry Suarez skilltik@gmail.com # ORGANIZATION: --- # CREATED: 17/04/14 # REVISION: 0.2 #=============================================================================== packages_dir=/var/log/packages/ function resuelve(){ for paquete in $@ do lista='' lista=`ls $packages_dir | grep $paquete-'[[:digit:]]*\>' ` if [ "${#lista}" == 0 ] then c=" " echo "$paquete$c" >> resul curl -s "slackbuilds.org/result/?search=$paquete&sv=14.1" > salida.html ; variable=`grep -i $paquete\/ salida.html | gawk '{print $6}' FS="\"" | gawk '{print $4}' FS="/"` nombreokpaquete=`grep -i $paquete\/ salida.html | gawk '{print $6}' FS="\"" | gawk '{print $5}' FS="/"` wget -q http://slackbuilds.org/slackbuilds/14.1/$variable/$nombreokpaquete/$nombreokpaquete.info ; vari=`grep REQUIRES $nombreokpaquete.info` vari=`echo ${vari:10: -1}` rm *.info if [ "${#vari}" != 0 ] then resuelve $vari fi fi done } for arreglo in $@ do curl -s "slackbuilds.org/result/?search=$arreglo&sv=14.1" > verifica.html ; verificapaq=`grep -i "No results" verifica.html ` rm verifica.html if [ "${#verificapaq}" == 0 ] then resuelve $arreglo if [ -f resul ] then tac resul > resul2 cat resul2 | tr -s " " "\n" > resul awk '!array_temp[$0]++' resul > resul2 cat resul2 | tr -s "\n" " " > resul tr -d "\n" < resul > resul2 echo "|-----------------------------------------------------------|" echo "Las dependencias a resolver para $arreglo son :" cat resul2 echo " " echo "|-----------------------------------------------------------|" echo " " rm resul resul2 rm salida.html else echo "|-----------------------------------------------------------|" echo "No hay dependencias por resolver para $arreglo " lista=`ls $packages_dir | grep $paquete-'[[:digit:]]*\>' ` if [ "${#lista}" != 0 ] then echo "$lista ya se encuentra instalado" fi echo "|-----------------------------------------------------------|" fi else echo "|-----------------------------------------------------------|" echo " $arreglo no existe en base de datos" echo "|-----------------------------------------------------------|" fi done Por ejemplo, consideremos este listado de paquetes que tenemos en mente para instalar: dvdrip openlp paqueteimaginario ffmpeg tan solo ejecutamos el scritp de esta forma: ./dependencias.sh dvdrip openlp paqueteimaginario ffmpeg Y con esto estamos listo para instalarlos de la forma que prefieran, yo uso SBopkg, asi que para instalar Dvdrip, solo ejecuto : sbopkg -i "transcode perl-libintl perl-extutils-pkgconfig perl-extutils-depends perl-glib perl-cairo perl-pango perl-gtk2 perl-event dvdrip" y se va a ir instalando en el orden necesario. Dudas, errores o sugerencias me avisan.
  16. Estoy intentando descargar unos panoramas de gigapan.com para poner de fondo (bueno, puede que sea ilegal pero descargar un fondito para mí nada más no pasa nada o no? ) Para eso hay un programita escrito en Python que es gigapanDownloader.py (click derecho, guardar como...) EDIT: Esta es la página del programa: https://github.com/DeniR/Gigapan-Downloader-and-stitcher El problema es que no me anda. Por lo que veo el programa primero descarga la imagen en pedazos y luego las une con Imagemagick, las imágenes las descarga bien pero no anda la parte de unir. Como ejemplo pongo lo que pasa cuando descargo el panorama más chico que hay en gigapan: el 2427. para descargarla hay que poner en un terminal "python gigapanDownloader.py 2427". Al hacer eso me aparece esto en una terminal: python gigapanDownloader2.py 2427 600 174 256 3 1 1 http://www.gigapan.org/get_ge_tile/2427/1/0/0 0000-0000.jpg http://www.gigapan.org/get_ge_tile/2427/1/0/1 0000-0001.jpg http://www.gigapan.org/get_ge_tile/2427/1/0/2 0000-0002.jpg Stitching... Traceback (most recent call last): File "gigapanDownloader2.py", line 76, in <module> subprocess.call('"'+imagemagick+'" -depth 8 -geometry 256x256+0+0 -mode concatenate -tile '+str(wt)+'x '+str(photo_id)+'\\*.jpg '+str(photo_id)+'-giga.'+outputformat) File "/usr/lib/python2.7/subprocess.py", line 522, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py", line 709, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1326, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory Al parecer el error está en esta línea del programa: subprocess.call('"'+imagemagick+'" -depth 8 -geometry 256x256+0+0 -mode concatenate -tile '+str(wt)+'x '+str(photo_id)+'\\*.jpg '+str(photo_id)+'-giga.'+outputformat) Lo malo es que el error que tira no se entiende nada . Lo que sería más probable es que la ruta al programa "montage" de imagemagick esté mal. Pero yo modifiqué el programa para que use mi ruta, que es: "/etc/alternatives/montage". Yo sé que esa ruta está bien porque cuando yo corro montage por mí mismo sí funciona, por ejemplo esto en una terminal sí funciona: /etc/alternatives/montage -depth 8 -geometry 256x256+0+0 -mode concatenate -tile 2x 2427/*.jpg 2427-giga.tif A esa línea la hice viendo mas o menos cómo reemplazar los argumentos Por las dudas este es mi script modificado: También probé a ver si el problema era "subprocess.call()" que no funcionaba, pero cuando hacía "subprocess.call("ls")" sí funciona Entonces el problema es lo que está dentro de "subprocess.call()", pero como no se de Python no lo puedo solucionar. Otro dato es que dice que se necesita Python 2 en vez de Python 3. Pero no sé cómo reemplazar las versiones
  17. Universal Decompress es un sencillo script que permite descomprimir de forma universal diversos formatos de ficheros en GNU/Linux con un solo comando, evitando tener que acordarnos de los distintos comandos y opciones de tar rar zip... #!/bin/bash #Universal Decompress, Este Script sirve para descomprimir ficheros en diferentes formatos #Copyright (C) 2013 Francisco Dominguez Lerma # #This program is free software; you can redistribute it and/or #modify it under the terms of the GNU General Public License #as published by the Free Software Foundation; either version 2 #of the License, or (at your option) any later version. # #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. # #You should have received a copy of the GNU General Public License #along with this program; if not, write to the Free Software #Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. nombre=$1 nombre_extension=${nombre#*.} version=0.1 function mostrar() { echo ------------------------------------ echo "Tipo de archivo: $nombre_extension" echo ------------------------------------ echo ------------------------------------ echo "Nombre de archivo: $nombre" echo ------------------------------------ } function comprobar() { if [ $error == 0 ]; then echo echo -e "\e[32mArchivos extraidos con éxito :)" echo -e "\e[39m" echo elif [ -z "$nombre" ]; then echo Debes escribir un nombre de archivo, para mostrar la ayuda escriba "ud --help" exit elif ! [ -e "$nombre" ]; then echo El fichero $nombre no existe, para mostrar la ayuda escriba "ud --help" exit else echo echo -e "\e[31mError al extraer los archivos :(" echo -e "\e[39m" echo fi } case $nombre_extension in *tar.gz) mostrar tar zxf "$nombre" error=$? comprobar;; *tar.bz2) mostrar tar jxvf "$nombre" error=$? comprobar;; *gz) mostrar gzip -d "$nombre" error=$? comprobar;; *bz2) mostrar bzip2 -d "$nombre" error=$? comprobar;; *rar) mostrar unrar x "$nombre" error=$? comprobar;; *zip) mostrar unzip "$nombre" error=$? comprobar;; *tar) mostrar tar -xvf "$nombre" error=$? comprobar;; #En esta linea es donde se deben de añadir más opciones de la construcción case con la misma estructura que los demás para añadir más formatos para descomprimir --help) echo echo echo ---------- Ayuda ---------- echo echo Universal Decompress le sirve para descomprimir echo archivos de forma sencilla e universal echo echo El único argumento necesario es el archivo a descomprimir echo echo Ejemplo: ud mis_fotos.tar.gz echo echo --------------------------- echo echo exit;; --version) echo --------------------------- echo "Version: $version" echo ---------------------------;; *) error=1 comprobar echo ------------------------------- echo Formato no valido echo ------------------------------- echo echo echo Este script no entiende la extensión de archivo $nombre_extension echo echo Para mostrar la ayuda escriba "ud --help" echo echo;; esac También podéis descargarlo de http://sourceforge.net/projects/easydecompress/ El script es muy sencillo, no es nada del otro mundo pero puede ser de ayuda si en un momento dado tenéis que descomprimir por consola y no os acordais muy bien de tar, para instalarlo simplemente copiar el sh en /bin darle permisos de ejecución y listo, para usarlo: ud mi_fichero.rar ud mi_fichero.tar.gz ud mi_fichero.tar.bz2 ud mi_ficherio.zip Lo que si es importante es que el nombre incluya la extensión, ya que es lo que reconoce para descomprimirlo de una forma u otra, bueno lo dicho, espero que os sea útil. Saludos
  18. Un sencillo (y cutre) script que me he hecho para descargar vídeo o audio de youtube, requiere los paquetes youtube-dl y ffmpeg. Pensé que a alguien más le puede ser útil así que lo he "formalizado" un poco Al seleccionar vídeo apareceran los distintos formatos del vídeo disponibles para descargar. Al seleccionar audio, éste se extraera a partir del vídeo con la máxima calidad disponible (normalmente en formato .m4a) Saludos
  19. Quico

    Ejecutar scripts en Ubuntu

    El objetivo de estas líneas es la de mostrar como ejecutar un script en Ubuntu, sin escribir ningún comando en nuestra terminal. Esto va dedicado a todas aquellas personas a las que les da un poco de fobia el intérprete de comandos. Empecemos, creamos un script que podemos guardar en nuestro escritorio. Abrimos gedit y escribimos lo siguiente. #!/bin/sh echo Script de prueba echo ...dentro de 3 seg se inicia el script,o cierra la terminal sleep 3s Después los guardamos con el nombre que queramos.sh, ahora hacemos clic botón derecho y propiedades. En la ventana que aparece pinchamos la pestaña "permisos" y tildamos "permitir abrir el archivo como un programa". Una vez hecho esto hacemos doble clic y ya está, se ejecutará el script. En casa de que no funcione abrir la aplicación "gconf" y buscáis la entrada org->gnome->nautilus->preferences y seleccionamos la opción executable-text-activation. Por defecto esta en diplay, elegimos "ask" y cuando ejecutemos el scrpit el sistema nos preguntará que queremos hacer. Seleccionamos Ejecutar en terminal y listo!!!
  20. Esta vez no es maestro, sino maestra. Niky45 nos deja este interesante script para apagar nuestro equipo si están un tiempo determinado sin ninguna actividad. La idea es que el sistema se apague solo tras X minutos de inactividad, a no ser que decidamos, esa vez, que debe seguir funcionando. Es decir, un demonio en bash que monitorice la actividad, y que podamos parar en cualquier momento. Los requisitos para que este script funcione son: Bash (como no podia ser de otra manera) xprintidle, que nos dira cuanto tiempo llevan inactivas las X (Lo encontraremos en repositorios) screen, que lanzara el daemon y lo mostrara en una consola (Lo encontraremos en repositorios) Una vez hayamos instalado Xprintidle y screen, el script en cuestión es el siguiente: [ "$1" ] && TIMEM=$(("$1" * 60 * 1000)) || TIMEM=$(( 60 * 60 * 1000 )) # Permite setear el tiempo en minutos vía línea de comandos #NOTA: xprintidle da el tiempo en milisegundos. [ "$2" ] && INTERVAL="$2" || INTERVAL="1m" TIME=$(( $TIMEM / (60*1000) )) echo "El sistema se apagará tras $TIME minutos de inactividad" while [ true ]; do [ $(xprintidle) -gt "$TIMEM" ] && poweroff sleep "$INTERVAL" ELAP="$(( $(xprintidle) / (60*1000) ))" echo -e "\033[3;5f Tiempo de inactividad: $ELAP min \033[4;5f restantes para el apagado: $(( $TIME - $ELAP )) min" done Se copia al directorio de scripts (Como puede ser /usr/local/bin), y se le llama desde algun sitio, en este caso desde screen: (~/.screenrc) ##launchers screen -t shell 1 bash screen -t root 0 su #screen -t info 0 screen -c ~/.altscreen screen -t autoshutdown 2 /usr/local/bin/autoshutdown select 1 Tambien se le puede llamar directamente con el siguiente formato: Donde MINUTOS son los minutos de inactividad hasta el apagado, e INTERVALO el tiempo entre iteraciones (es decir, el timepo que pasa entre comprobacion y comprobacion), con formato sleep (10m = 10 minutos, o se puede especificar directamente en segundos) Podemos hacer que el script se ejecute durante el arranque, bien incluyéndolo en /etc/init.d/ o donde dicte nuestra distribución o sistema de arranque o bien ejecutarlo manualmente cuando queramos, eso ya queda al gusto y necesidades de cada uno NOTA: Para los que tenga un portatil, dado que pueden estar conectados a la correinte o tirando de batería, tendremos que ajustar los tiempos en el segundo caso, pues no tiene mucho sentdio que se apague en una hora si la batería se acaba antes. La condicion para la bateria vendria a ser algo asi. Es necesario tener instalado acpi instalado (esta en repos) [[ "$(acpi -V |grep -i "Adapter" |cut -c 12-)" != on-line ]] && sleep $INTERVAL && continue E iría justo después de entrar en el bucle while. OJO, no poner un intervalo de menos de 5 minutos. Es posible un intervalo dinámico, bastaria con poner sleep 10m, para que espere 10 minutos a ver si estamos con bateria, y activar el resto del bucle con el intervalo especificado al principio. http://man-linux.comli.com/?p=331
  21. Muy buenas. A ver si alguien puede ayudarme porque no se si donde mirar. Me explico. El otro día me conecte por SSH a un servidor linux e hice un script que comprobaba si un proceso se estaba ejecutando y si no lo estaba lo lanzaba de nuevo con nohup. Bien, como vi que iba lo añadí al crontab con "crontab -e" para que se ejecutase cada hora y añadí al script que si tenía que relanzar el proceso me envíase un mail. A la siguiente hora recibí el mail pero el proceso estaba ejecutandose bien por lo que entendí que el script tenía algún error. Lo arreglé, cambié el nombre del script, cambié el subject del mail, cambié la línea del crontab... y cada hora sigo recibiendo el mail del antiguo script que ya no está en el crontab. Es más, ¡borré el script!. Si miro el crontab con "crontab -l" veo está el nuevo script que envía un mail diferente con otro texto, y del script antiguo no hay ni rastro. ¡Pero cada hora se ejecuta el que ya no está! O al menos cada hora recibo un mail como si se hubiese ejecutado! ¿Alguien sabe que puede pasar? Si no me he explicado bien, cualquier pregunta será bien recibida. Gracias. Sergio.
  22. skilltik

    Script para paquetes en Slackware

    Hola, soy nuevo por aca.. este es mi primer tema. Escribi un pequeño script que sirve para verificar si uno o mas paquetes estan instalados en el sistema, es muy util cuando se estan resolviendo dependencias para instalar un programa. Aca les dejo el script, es muy corto pero bastante util #!/bin/sh packages_dir=/var/log/packages/ for var in $@ do if !(ls $packages_dir | grep $var) then echo $var "no esta instalado" fi done Si el programa esta instalado devuelve la version instalada, y sino un aviso de que no se encuentra en el sistema. un ejemplo de uso: saludos!
  23. southside54

    Script para mostrar el escritorio

    Lo primero es instalar el paquete wmctrl Abrimos un documento vacío y copiamos esto en el interior: #!/bin/sh if wmctrl -m | grep "mode: ON"; then exec wmctrl -k off else exec wmctrl -k on fi Renombramos a show_desktop.sh (por ejemplo) y le damos permiso de ejecución chmod +x show_desktop.sh La principal utilidad es que podemos crear un lanzador con el script, y añadirlo al panel tint2, al dash de gnome-shell, etc; docks que no soporten la función de mostrar el escritorio. Ejemplo en el panel tint2: Un saludo
  24. southside54

    Comprobar archivos sfv desde nautilus

    Un script que encontré para para verificar archivos sfv desde nautilus, ya que todavía no he encontrado ningún programa en linux que haga esto de forma gráfica. Se necesita tener instalado cksfv (programa para chequear sfv por consola) y zenity Copiar el contenido a un archivo vacío y renombrar a "CheckSFV.sh" (por ejemplo), mover al directorio "/home/TuUsuario/.gnome2/nautilus-scripts" como viene en la descripción (en nautilus 3.6 iría en "/home/TuUsuario/.local/share/nautilus/scripts") y dar permisos de ejecución: chmod +x /home/TuUsuario/.gnome2/nautilus-scripts/CheckSFV.sh Clickar con el botón derecho en un archivo sfv y buscar la entrada del menu de nautilus para verificarlo. Un saludo
  25. granjero

    Una primera ayuda con un script

    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 = $?";
×