Ir al contenido

Buscar en La Comunidad

Mostrando resultados por etiquetas 'bash'.

  • 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 17 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. Por favor necesito ayuda con un problema con variables en linux: Resulta que tengo un script de configuración llamado config. Sh en el que defino diferentes variables de uso temporal y les asigno un valor preestablecido, por ejemplo: export ip1=99 export ip2=100 Y luego tengo un script llamado general.sh desde el cual quiero ejecutar el script anterior config.sh, este es su contenido #!/bin/bash Echo exportando variables . Config. Sh Source config. Sh Pues el problema es que no consigo exportar esas variables, al ejecutar desde la terminal el script "general.sh" se ejecuta todo sin problemas pero si hago un "echo $ip1" la variable no tiene ningún valor, lo curioso es que si desde la terminal añado "source config.sh" entonces la variable $ip1 si que me devuelve su valor. No entiendo porque al poner "source config.sh" desde el script no se asignan las variables y al hacerlo desde la terminal si se añaden, ¿qué estoy haciendo mal? He probado varias cosas como " echo 'source config.sh' " pero no consigo que funcione desde el script. Entonces, ¿de qué manera se añaden ejecutan comandos desde un script como si fuesen desde la terminal? He probado todo tipo de cosas y no entiendo porque sucede esto, si es el mismo comando que mas da que este en el script que lo ejecute en la terminal...
  3. No encuentro la solución googleando, y ya perdí ayer todo el santo día por mi cabezonería. Se trata de que quiero perfeccionar y adaptar a mis necesidades un script bash que hay en GitHub: https://github.com/servisys/ispconfig_setup/ El caso es que en algunos archivos de configuración inserta líneas en un lugar preciso, pero le mete un retorno de carro "\r", y estoy empecinado en dar con una formuna que se limite a insertar solo el salto de linea unix "\n" pero no hay manera. Tanto el comando "echo" como "sed" introducen el puto retorno de carro, si o si. Por ejemplo esto debería insetar solo un salto de línea unix, en el archivo al que se aplica echo -e "linea1 \n liena2" pero no, en la practica inserta un '\n\r' No hablo del resultado que muestra en pantalla, que en ese caso todo correcto, hablo del resultado en el archivo al que se aplica el comando Después probar múltiples variantes con echo y sed, el retorno de carro sigue estando ahí, con un editor de texto gráfico como Mousepad o Gedit, se ve doble salto de línea, y con el editor de línea de comandos "nano" o "vim" se ve un salto de línea y el carácter ^M al principio de la siguiente como se ve aquí:
  4. Guía de programación en Bash de la UTN Descarga http://www.gnutnfra.com.ar/material/programacion_bash.pdf Mirror 1Fichier http://k9hv3d.1fichier.com/ Mirror Bayfiles http://bayfiles.com/file/pdef/YwbGtJ/programacion_bash.pdf Box: https://www.box.com/s/3w34ul77j83vehr9ag45 Google drive: https://docs.google.com/file/d/0B4FF12HzhOl4aUlyTTJHcUY3X3M/edit?usp=sharing
  5. Yo hace bastante que ya sabía que habían reemplazos para bash, pero nunca había probado ninguno porque pensaba que eran engorrosos para configurar. Hoy le dí 5 minutos a fish, y me gustó que no perdí nada de tiempo. Una cosa es el emulador de terminal, que vendría a ser la ventana (gnome-terminal, konsole, etc.) y otra cosa es la shell (como bash y fish), que es lo que hay adentro. Si usan debian es cuestión de sudo apt install fish, y nada más. Para probarlo hay que abrir una terminal (que sigue siendo bash) y escribir el comando fish para pasarse a fish (temporalmente hasta cerrar la ventana). Para cambiar los colores o el prompt se puede usar el comando fish_config que abre una página web de configuración muy fácil de usar. Es sobre todo para ver que tiene muchas funciones útiles de autocompletado que bash no tiene. Por lo menos yo no creo que lo termine usando pero lo voy a tener en cuenta. Otra alternativa es zsh, que por lo que ví es más avanzada paro no tan rápido de probar como fish.
  6. Cursos, manuales y guías de programación de la wikiversity.org y wikilibros.org En la wikiversidad y en wikilibros podremos encontrar un compendio con diversos contenidos relacionados a la educación y aprendizaje, en algunos casos el contenido no está acabado (tiempo al tiempo), pero sin duda en una estupenda fuente del conocimiento colectivo al alcance de todo el mundo. En este caso los enlaces propuestos son algunos relativos a los temas tratados en este foro de programación. C. https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C C++. https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B HTML. https://es.wikibooks.org/wiki/Lenguaje_HTML Php. https://es.wikiversity.org/wiki/Curso_de_PHP JavaScript. https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_JavaScript BASH Scripting Básico para Principiantes. https://es.wikibooks.org/wiki/El_Manual_de_BASH_Scripting_B%C3%A1sico_para_Principiantes Y mucho mas en el menú de categorías. https://es.wikibooks.org/wiki/Categor%C3%ADa:Programaci%C3%B3n Espero que sirva de ayuda, un saludo.
  7. 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.
  8. 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:
  9. 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.
  10. 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
  11. El autocompletado bash es una función muy útil que nos permitirá ahorra muchísimo tiempo reduciendo considerablemente el número de pulsaciones que realizamos al trabajar en la terminal. Mediante la pulsación del tabulador, bash completion nos ayudará con comandos, rutas, nombres de archivos, opciones, incluso nombres de paquetes y en caso de existir algún conflicto (términos muy similares, inexistentes o no disponer de suficientes datos) nos presentará una lista con todas las posibilidades. Para habilitarlo en Debian (Si no lo tenemos ya) hacen falta dos cosas, empezando por instalar el paquete que contienen la herramienta aptitude install bash-completionLuego queda cerciorarnos que en nuestro archivo de configuración /etc/bash.bashrc tenemos habilitado bash completion ya que en ocasiones aunque tenemos el bloque correspondiente a esta función dentro del archivo, todas las líneas de éste aparecen comentadas. En ese caso bastaría eliminar los "#" para volver a habilitarlo e iniciar una nueva terminal para que entre en funcionamiento. # enable bash completion in interactive shells #if ! shopt -oq posix; then # if [ -f /usr/share/bash-completion/bash_completion ]; then # . /usr/share/bash-completion/bash_completion # elif [ -f /etc/bash_completion ]; then # . /etc/bash_completion # fi #fiComo ya hemos dicho, no nos interesa que todas esas líneas estén comentadas, así que eliminamos las almohadillas para rehabilitarlas # enable bash completion in interactive shells if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fiUna vez hecho esto ya podremos disfrutar de bash completion en nuestras próximas sesiones de terminal
  12. Quizá alguno ya conozca la web de Hacker typer, un portal que simula ser una terminal que responde como lo haría una terminal de película de hackers. Aunque pulsemos teclas aleatorias o aporreemos sin más el teclado por pantalla irán apareciendo los códigos más maravillosos y bien construidos que existen, como si fuéramos los gurús más habilidosos del planeta Emulando este divertido portal, Emiliano, la persona tras Linuxito, tuvo la idea de crear un script bash que reproduzca el mismo comportamiento en nuestro sistema con apenas una línea de código: EXT=".c"; for F in $(find / -iname "*$EXT" -nowarn -readable 2> /dev/null); do cat $F | while IFS= read -rN 10 C; do read -s -n 1 <&1; echo -n "$C"; done; echo; done Evidentemente no es mágico ni se inventa el código que va apareciendo por pantalla, lo toma de los archivos ya presentes en nuestro sistema (find /) cuya extensión coincida con la que hemos definido en "EXT" (-iname "*$EXT"), para luego volver su contenido según aporreamos el teclado (do read -s -n 1 <&1) en lotes de 10 caracteres (IF= read -rN 10 C), repitiendo el proceso constantemente y pasando al siguiente archivo encontrado al llevar al final del que estamos utilizando. Además, con sólo cambiar la extensión podemos definir otro tipo de archivos, lenguajes de programación o lo que sea, además de otros parámetros como el número de caracteres por pulsación, etc. No es un script que nos vaya a resolver la papeleta, pero con el que podemos pasar un buen rato haciendo como que trabajamos Además de ser didáctico al mismo tiempo :lol:
  13. 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í
  14. 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
  15. 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
  16. Pues eso tenía entendido que con descomentar en el fichero /etc/bash.bashrc el siguiente apartado: # enable bash completion in interactive shells Con esto funcionaba, al tabular autocompleta en el terminal. A ver si me podéis decir en que me estoy confundiendo o quizás es en /usr/share/bash-completion/bash_completion?
  17. 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 = $?";
×
×
  • Crear Nuevo...