Scripts útiles

Bueno, a ver si sale adelante la idea. He buscado un rato y creo que no hay ya un hilo similar.

La idea es simple, explicar en pocas líneas la utilidad de un script que hayamos hecho o hayamos encontrado por ahí y consideremos útil, la forma de uso y el código.

Empiezo yo con un par de scripts y si os gusta la idea ya sabéis.

Descomprimir

Descomprime los formatos más comunes. Bastante fácil de modificar. Lo encontré en algún foro de Arch (no recuerdo en cual) hace unos meses y lo modifiqué un poquillo, casi nada.

Uso: $ descomprimir fichero

#!/bin/bash

if [ -f $1 ] ; then
   case $1 in
      *.tar.bz2)   tar xjf $1 ;;
      *.tar.gz)   tar xzf $1 ;;
      *.bz2)      bunzip2 $1 ;;
      *.rar)      rar x $1 ;;
      *.gz)         gunzip $1 ;;
      *.tar)      tar xf $1 ;;
      *.tbz2)      tar xjf $1 ;;
      *.tgz)      tar xzf $1 ;;
      *.zip)      unzip $1 ;;
      *.Z)         uncompress $1 ;;
      *.7z)         7z x $1 ;;
      *)            echo "'$1' No se puede extraer." ;;
   esac
else
   echo "'$1' No es un fichero válido."
fi



Iniciar/parar/reiniciar servicios

Éste es menos útil, excepto para mí. Sirve para lanzar unos servicios que sólo quiero iniciar en determinadas ocasiones. Está hecho para Arch, pero es fácil de modificar.

Uso: # servicios {start|stop|restart}

#!/bin/bash

if [ $(whoami) = "root" ]; then
   case "$1" in
      start|stop|restart)
         /etc/rc.d/noip $1
         /etc/rc.d/sshd $1
         /etc/rc.d/pure-ftpd $1
         ;;
      *)
         echo "uso: $0 {start|stop|restart}"
   esac
else
   echo "Se necesitan permisos de root para proceder"
fi
amuchamu escribió:Descomprimir

Descomprime los formatos más comunes. Bastante fácil de modificar. Lo encontré en algún foro de Arch (no recuerdo en cual) hace unos meses y lo modifiqué un poquillo, casi nada.

Uso: $ descomprimir fichero

#!/bin/bash

if [ -f $1 ] ; then
   case $1 in
      *.tar.bz2)   tar xjf $1 ;;
      *.tar.gz)   tar xzf $1 ;;
      *.bz2)      bunzip2 $1 ;;
      *.rar)      rar x $1 ;;
      *.gz)         gunzip $1 ;;
      *.tar)      tar xf $1 ;;
      *.tbz2)      tar xjf $1 ;;
      *.tgz)      tar xzf $1 ;;
      *.zip)      unzip $1 ;;
      *.Z)         uncompress $1 ;;
      *.7z)         7z x $1 ;;
      *)            echo "'$1' No se puede extraer." ;;
   esac
else
   echo "'$1' No es un fichero válido."
fi

O puedes instalar unp o usar el propio file-roller:
http://mundogeek.net/archivos/2007/06/2 ... -en-linux/
zootropo escribió:O puedes instalar unp o usar el propio file-roller:
http://mundogeek.net/archivos/2007/06/2 ... -en-linux/

Hombre, eso ya lo sé... El objetivo de este hilo no era ése.
muy utiles, no se si seran los que voy a poner, pero son scripts mios, y a alguien igual le dan alguna idea para algo :P

#!/bin/bash
clear

# archivo 1
if [ "$1" != "" ]; then
echo -e "\033[0;31m Descargando $1 \033[0m"
wget ${1}
echo -e "\033[0;33m $1 finalizado \033[0m"
echo -e "\033[0;34m ------------------------------------------------ \033[0m"
echo
fi &&

# archivo 2
if [ "$2" != "" ]; then
echo -e "\033[0;31m Descargando $2 \033[0m"
wget $2
echo -e "\033[0;33m $2 finalizado \033[0m"
echo -e "\033[0;34m ------------------------------------------------ \033[0m"
echo
fi &&

# archivo 3
if [ "$3" != "" ]; then
echo -e "\033[0;31m Descargando $3 \033[0m"
wget $3
echo -e "\033[0;33m $3 finalizado \033[0m"
echo -e "\033[0;34m ------------------------------------------------ \033[0m"
echo
fi &&

# etc etc etc, tantos archivos como quieras



este simplemente es un wget, en plan bajar mas de una cosa por comando

$comando file1 file2 file3 file4... etc

lo he recortado para que no ocupe toda la pagina(tal cual esta, solo serviria para 3 downloads o menos... pero vamos es añadir mas "modulos" para aumentar el limite.
no son descargas simultaneas, sino consecutivas.



aqui algo parecido:
#!/bin/bash

FILE=$(zenity --entry --title="nueva descarga" --text="escribe o pega la url del archivo a bajar") || exit

if [ $FILE ]; then
   DIR=$(zenity --file-selection --directory --title="selecciona dónde guardar el archivo") || exit
   wget $FILE --tries=0 --directory-prefix=$DIR
   notify-send -t 7500 "Descarga Terminada" "Vea la salida del terminal para comprobar el exito de la descarga"
else
   zenity --error --text="\nNo se ha especificado url de descarga"
fi


simplemente, lanzado desde consola (o como lo tengo yo, desde el menu, con "xterm -hold -e comando") es un wget, con dialogo grafico para introducir url, carpeta de destino, y aviso de fin de descarga.


(sobre wget, tengo otro, totalmente grafico, pero es medianamente inestable... xD)




para despistados con portatil como yo:

#!/bin/bash
while [ $(egrep "remaining" /proc/acpi/battery/BAT1/state | tr -s [:blank:] "-") != "remaining-capacity:-288-mAh" ]
   do
   sleep 30
   done
if [ $(egrep "charging" /proc/acpi/battery/BAT1/state | tr -s [:blank:] "-") != "charging-state:-charging" ]
   then
      zenity --warning --title="eh tu, tio elegante" --text="Bateria al 6% de capacidad.\n\n\nVenga tio, curratelo con el enchufe."
fi


si no tienes bastante con el notify de bateria baja, porque ni te enteras de que aparece, o lo olvidas enseguida... este es tu script xD
la idea es que se inicie al iniciar gnome, desde preferencias->sesiones



y tengo otro mas, que uso para seguir mi "progreso" cuando salgo a correr.. en plan mierda-base-de-datos... pero es demasiado chano xD

a mi me parece una gran idea de hilo ;)
Yo he encontrado una página con un montón de scrips para nautilus que hacen de todo.

Aquí el enlace - http://nautilus-scripts.javielinux.com/ - y aquí un pack que va dentro de "/home/nombre de usuario/.gnome2/nautilus-scripts - http://nautilus-scripts.javielinux.com/ ... pts.tar.gz -

No sé si será esto de lo que va el post, si no lo es lo siento.

Saludos :)
amuchamu escribió:
zootropo escribió:O puedes instalar unp o usar el propio file-roller:
http://mundogeek.net/archivos/2007/06/2 ... -en-linux/

Hombre, eso ya lo sé... El objetivo de este hilo no era ése.

Tú si, pero otras personas no.

¿Y para qué van a usar ese script cuando ya tienen una herramienta instalada en el sistema o en los repositorios que hace eso, y mejor?

Yo he encontrado una página con un montón de scrips para nautilus que hacen de todo.

Aquí el enlace - http://nautilus-scripts.javielinux.com/ - y aquí un pack que va dentro de "/home/nombre de usuario/.gnome2/nautilus-scripts - http://nautilus-scripts.javielinux.com/ ... pts.tar.gz -

No sé si será esto de lo que va el post, si no lo es lo siento.

Aquí están los scripts para Nautilus que yo he escrito, por si a alguno le interesan:

http://mundogeek.net/nautilus-scripts

Hay scripts para:
    * mandar archivos a gmail
    * montar y desmontar imágenes de CD o DVD
    * modificar las etiquetas ID3 de tu música
    * reproducir los archivos o carpetas seleccionadas en Amarok, Banshee o Mplayer
    * y renombrar las fotografías a la fecha en las que fueron tomadas, usando las etiquetas EXIF
zootropo escribió:¿Y para qué van a usar ese script cuando ya tienen una herramienta instalada en el sistema o en los repositorios que hace eso, y mejor?
¿Por qué no? Más complejo no siempre es mejor, que tú lo digas tampoco lo hace mejor, ni el que lo hayas puesto en tu blog. Dudo que esté en los repositorios de todas las distribuciones porque, por ejemplo, en Arch no está y habría que tirar de aur (lo cual tampoco es mucho problema). Y hay gente a la que le gusta aprender cómo funcionan estas cosas, para hacerse los suyos propios, modificarlos, mejorarlos... También hay gente a la que le gusta usar programillas o scripts hechos por uno mismo aunque haya un programa que hasta te cante jotas y haga lo mismo, porque queremos algo funcional o nos hace "ilu" haberlo hecho.

No me apetece empezar una discusión, así que lo dejamos aquí si te parece bien, cada uno que haga lo que quiera. O responde si quieres, no sé, tú verás, pero no voy a seguir por este camino. Saludos

jorchube escribió:
#!/bin/bash
clear

# archivo 1
if [ "$1" != "" ]; then
echo -e "\033[0;31m Descargando $1 \033[0m"
wget ${1}
echo -e "\033[0;33m $1 finalizado \033[0m"
echo -e "\033[0;34m ------------------------------------------------ \033[0m"
echo
fi &&

# archivo 2
if [ "$2" != "" ]; then
echo -e "\033[0;31m Descargando $2 \033[0m"
wget $2
echo -e "\033[0;33m $2 finalizado \033[0m"
echo -e "\033[0;34m ------------------------------------------------ \033[0m"
echo
fi &&

# archivo 3
if [ "$3" != "" ]; then
echo -e "\033[0;31m Descargando $3 \033[0m"
wget $3
echo -e "\033[0;33m $3 finalizado \033[0m"
echo -e "\033[0;34m ------------------------------------------------ \033[0m"
echo
fi &&

# etc etc etc, tantos archivos como quieras



este simplemente es un wget, en plan bajar mas de una cosa por comando

$comando file1 file2 file3 file4... etc

lo he recortado para que no ocupe toda la pagina(tal cual esta, solo serviria para 3 downloads o menos... pero vamos es añadir mas "modulos" para aumentar el limite.
no son descargas simultaneas, sino consecutivas.

Se puede mejorar el script para no tener que añadir "un módulo" por cada archivo a descargar, tal que así:
for i in $*; do
   echo -e "\033[0;31m Descargando $i \033[0m"
   wget $i
   echo -e "\033[0;33m $i finalizado \033[0m"
   echo -e "\033[0;34m ------------------------------------------------ \033[0m"
   echo
done
Te cogerá todos los parámetros, metas 1, 100 o los que quieras.

Saludos!
Solo una cosa, no es por meter candela, pero "unp" no es ya un script? si hace lo que hace y lo hace bien, siempre se puede recortar para ajustarlo a las necesidades de cada uno, o coger ideas para mejorarlo y fies no? pensaba precisamente que una de las ideas del software libre, es que la competición es inútil frente a la colaboración.

Paz hermanos, pensad en lo que la barba de Richard Stallman haría en ésta situación.
amuchamu escribió:
zootropo escribió:¿Y para qué van a usar ese script cuando ya tienen una herramienta instalada en el sistema o en los repositorios que hace eso, y mejor?
¿Por qué no? Más complejo no siempre es mejor, que tú lo digas tampoco lo hace mejor, ni el que lo hayas puesto en tu blog.

Es mejor porque soportan más formatos, porque puedes comprimir y no solo descomprimir, porque puedes elegir la carpeta donde descomprimir, ...

Dudo que esté en los repositorios de todas las distribuciones porque, por ejemplo, en Arch no está y habría que tirar de aur (lo cual tampoco es mucho problema).

file-roller es parte de Gnome, ark de KDE, y ambos funcionan en consola ;) Dudo mucho que encuentres una distro en el que no tengas ni file-roller ni ark ni unp en los repositorios.

Y hay gente a la que le gusta aprender cómo funcionan estas cosas, para hacerse los suyos propios, modificarlos, mejorarlos... También hay gente a la que le gusta usar programillas o scripts hechos por uno mismo aunque haya un programa que hasta te cante jotas y haga lo mismo, porque queremos algo funcional o nos hace "ilu" haberlo hecho.

Si el objetivo del hilo es el de postear scripts útiles, no veo el problema, porque son útiles.
Si el objetivo del hilo es el de postear scripts a cuyo código puedas acceder para aprender, no veo el problema, porque son libres. ein?


De verdad que no veo qué problema tienes con mi sugerencia.


Solo una cosa, no es por meter candela, pero "unp" no es ya un script? si hace lo que hace y lo hace bien, siempre se puede recortar para ajustarlo a las necesidades de cada uno, o coger ideas para mejorarlo y fies no? pensaba precisamente que una de las ideas del software libre, es que la competición es inútil frente a la colaboración.

Paz hermanos, pensad en lo que la barba de Richard Stallman haría en ésta situación.

Sip, es un script en Perl.
zootropo escribió:De verdad que no veo qué problema tienes con mi sugerencia.
Tú has preguntado y yo he respondido :S Ya te he dicho que no quería seguir por ahí, así que no te respondo lo demás. Saludos
yo veo este post mas como algo para aprender... por ejemplo la correccion de amuchamu sobre mi script.. pues ese tipo de cositas es lo que me gustaria de este post, porque no es lo mismo mirar un script, que hacer tu uno y que te resalten fallos o lineas innecesarias...
Lo suyo sería ir actualizando el post principal con los scripts corregidos, ¿no?

Bueno, voy a poner el mio, fue en unos momentos de aburrimiento:

#!/bin/bash
# Bash color functions 0.1
# Have bugs, I know... WIP!
# Created by Pyronhell (http://www.pyronhell.com)
# License: CC Attribution-Noncommercial-Share Alike 2.5
# http://creativecommons.org/licenses/by-nc-sa/2.5/es/deed.en

# Init some vars...
TEXTCOLOR=0
TEXTMODE=0
TEXTBG=0

# Modes...
BOLD=1
STROCKED=9
UNDERLINE=4

# Colors...
BLACK=39
BLUE=34
CYAN=36
GRAY=30
GREEN=32
PURPLE=35
RED=31
WHITE=37
YELLOW=33

# textDefault
# Sets textcolor, mode and background to its defaults
function textDefault {
   echo -ne "\033[0m"
   echo -ne "\033["${BLACK}"m"
   echo -e "\033[1A";
   echo -ne "\033[K"
   TEXTCOLOR=0
   TEXTMODE=0
   TEXTBG=0
}

# textMode [-r] $1
# $1 -> Mode (avobe) [$BOLD/$UNDERLINE/$STROCKED]
# param:
# -r -> Replace all prev modes (unactive all) and only
#    active the new mode.
# -d -> Remove all set modes
function textMode {
   if [ "$1" == "-r" ]; then
      echo -ne "\033[0;"${TEXTCOLOR}"m"
      echo -ne "\033["$2";"${TEXTCOLOR}"m"
      TEXTMODE=$2
   elif [ "$1" == "-d" ]; then
      echo -ne "\033[0;"${TEXTCOLOR}"m"
      TEXTMODE=0
   else
      echo -ne "\033["$1";"${TEXTCOLOR}"m"
      TEXTMODE=$1
   fi
}

# textColor $1 [$2]
# $1 -> Color variable (avobe) for text color
# $2 -> Color variable (avobe) for background color [Optional]
function textColor {
   if [ $2 > 39 ]; then
      echo -ne "\033["${TEXTMODE}";"`expr $2 + 10`"m"
      echo -ne "\033[K\r"
      #echo -ne "\033[1A"
      TEXTBG=$2   
   elif [ $TEXTBG > 0 ]; then
      echo -ne "\033["${TEXTMODE}";"`expr ${TEXTBG} + 10`"m"
      echo -ne "\033[K\r"
      #echo -ne "\033[1A"
   fi
   echo -ne "\033["${TEXTMODE}";"$1"m"
   TEXTCOLOR=$1
}

## SOME EXAMPLES ##
echo Hello...
textColor $RED         # Set text red
echo Wow! Now im red!
textMode $BOLD         # Set text bold
echo By the power of greyskull!!
textColor $PURPLE      # Set text yellow
echo Im gay
textColor $PURPLE $PURPLE   # Set text purple and bg purple
echo T_T
textMode $UNDERLINE      # Add mode underlined
textColor $WHITE $BLACK      # Text: white | Bg: Black
echo Now im clean!
textMode -d         # Delete text modes
echo Finish em!         # Not really...
textDefault
textColor $CYAN $YELLOW      # DO NOT WORK!
echo "More colors? (TODO)"
textMode $UNDERLINE
echo "Yay! (Yay... what?) (TODO)"
textDefault
echo "Leaving... (it may be better...)"


Los comentarios con urls y demás es porque lo publiqué en mi blog, aún tengo que mejorarlo.

Salu3!
Por casualidad he encontrado este curioso Script: Compiz Check
Sirve para ver si tu equipo está preparado para instalar Compiz Fusion.
Uno que acabo de hacer.
El proposito es conseguir los valores maximos y medios de una base de datos rrd y mostrarlo por pantalla.
#!/bin/bash
#
# This script gets data from RRD database and generates a report
#
# Usage:
# report.sh date_start date_end database_name path_to_rrd_database
#
# While:
# date_start = "hh:mm DD/MM/YYYY"
# date_end = "hh:mm DD/MM/YYYY"
# database_name = ds_name
# path_to_rrd_database = /data/rrd/...
#
# Exit:
# "$BBDD $PARAM ($START-$END) = $RESULT
#
# While:
# BBDD = Database (memory, rta, cpu,...)
# PARAM = average, max
# START = "hh:mm DD/MM/YYYY"
# END = "hh:mm DD/MM/YYYY"
#

usage()
{
        echo "Usage:"
        echo "$0 \"dd/mm/yyyy HH:MM:ss\" \"dd/mm/yyyy HH:MM:ss\" database_name path_to_rrd_database [avr|max]"
        echo ""
        exit
}

if [ $# -lt 5 ]
then
        echo "Wrong number of params."
        usage
fi

START=`date +%s -d "$1"`
END=`date +%s -d "$2"`
BBDD=$3
RRD=$4
PARAM=$5

if [ ! -f $RRD ]
then
        echo "$RRD is not a file"
        usage
fi

case $PARAM in
        "avr")
        AVERAGE=`rrdtool graph /dev/null -s $START -e $END DEF:nombre=$RRD:$BBDD:AVERAGE PRINT:nombre:AVERAGE:%lf | tail -n1`
        echo "Average $BBDD ($1 - $2) $AVERAGE"
        exit
        ;;
        "max")
        MAX=`rrdtool graph /dev/null -s $START -e $END DEF:nombre=$RRD:$BBDD:AVERAGE PRINT:nombre:MAX:%lf | tail -n1`
        echo "Max $BBDD ($1 - $2) $MAX"
        exit
        ;;
esac

Aporto una pequeña cosita al hilo, lo puse en el hilo de Ubuntu pero nadie dijo nada...
#!/bin/bash
gdialog --title "XBOX360Burner" --msgbox "Grabando" & growisofs -use-the-force-luke=dao -use-the-force-luke=break:1913760 -dvd-compat -speed=4 -Z /dev/scd0=~/Escritorio/$1 && eject && gdialog --title "XBOX360Burner" --msgbox "Grabacion Terminada"

Este pequeño script es para nautilus " ~/.gnome2/nautilus-scripts " , sirve para grabar imagenes de xbox360 y no tener que meter la linea del growisofs a mano cada vez, su uso es simple, botón derecho en la iso y ejecutar script, (dependiendo de la configuración del pc deberemos de cambiar el dev de la dvdrw) ahora bien en la versión anterior de Ubuntu el script me ha funcionado sin problemas, pero ahora en la nueva distro 'Hardy Heron' el $1 que es lo que reemplaza al nombre de la iso curiosamente en este script no funciona :o , en cambio tengo este otro:
#!/bin/bash
rar x $1 ~/Escritorio/ && gdialog --title "UNRARDESKTOP" --msgbox "Descomprimido"

que hice de prueba para ver el funcionamiento del $1 y el zorrón si que funciona Oooh
A ver si alguno podría darme alguna idea de como arreglar este problemilla y si alguien quiere aportar algo bienvenido sea :)
Aquí os dejo otro script que podeis darle mas utilidad:
#! /bin/sh
echo Renombrando archivos.....
for i in *
do
   if test -d $i
   then
      rar rn $i/*.rar *.avi $i.avi
   fi
done
echo Descomprimiendo archivos.....
for i in *
do
   if test -d $i
   then
      rar x $i/*.rar      
   fi
done
#echo Borrando directorios.....
#for i in *
#do
#   if test -d $i
#   then
#      rm -r $i
#   fi
#done
echo Terminado OK

Este lo que hace es renombrar un un archivo .avi con el nombre del directorio en cuestión, es valido si bajas varias pelis con varios rars, esto te lo hace todo solo y te las renombra ^^ , el final del script te borraria al acabar los directorios de las pelis que ya no valdrían para nada, pero lo tengo comentado ya que a veces no se porque motivo falla el script, tambien he de decir que este script solo funciona con pelis en 1 CD xD puesto que si hay 2 directorios (CD1 y CD2) no he sabido hacer como entrar en ellos y renombrarlos con sus respectivos nombres y numero de disco. Igual que antes, si alguien se anima a perfeccionar que me avie :)
Pues eso si alguien sabe el problema del puñetero $1 que me avise ^^y espero que a alguien le sea un poco útil lo aquí expuesto.
14 respuestas