Buscador de Malware

d
Autor: @WizardIP
Descripción: Script que permite buscar malware en el directorio actual y subdirectorios por hashes MD5
se imprime el nombre y envía el hash a MHR para una búsqueda en su base de datos.
El 3er valor en el resultado es el porcentaje de detección proporcionado por una mezcla de paquetes AV.
Motor del script visto en Command Line Fun
#!/bin/bash
ifnetcat=`type -p netcat`
        if [ -z $ifnetcat ]; then

                echo -e "\n\nNetcat necesita estar instalado\n"
                exit 0
        fi
echo "Realizando escaneo"
IFS=$'\n' && for f in `find . -type f -exec md5sum "{}" \;`; do echo $f | sed -r 's/^[^ ]+/Checking:/'; echo $f | cut -f1 -d' ' | nc hash.cymru.com 43 ; done
echo "Escaneo finalizado"
exit 0
Leer más...

Remover firewall

d
Autor: LINUXTITLI
Visto en: cyberciti.biz
Descripción: Script que permite remover las reglas del firewall completamente.
#!/bin/bash
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Damos permisos de ejecución 
chmod +x flush.bash
Tiramos el firewall
./flush.bash
Leer más...

Script borrado interactivo

d
Autor: Leo Gutierrez
Descripción: Script para hacer un borrado interactivo

#!/bin/bash
# Script de borrado interactivo.
# Leo Gutiérrez Ramírez. leorocko13@hotmail.com
 
function rmsecure()
{
 
 select archivos in * "SALIR"
 do
  if [ "${archivos}" = "SALIR" ]
  then
 
   exit 0;
 
  elif [[ -n "${archivos}" ]]
  then
 
   sudo rm -rvi "${archivos}" || {
   echo -e "Error borrando archivo : ${archivos}";
   exit 0;
  }
 
  clear;
  rmsecure;
 
  else
 
   echo -e "Error eligiendo archivo.";
 
  fi
 
 done
}
 
clear;
rmsecure;
Leer más...

Script to Install and Secure Apache2 PHP5 MySQL5 in Ubuntu/Debian

d
Autor: @Desconocido
Descripción: Script que permite instalar de manera automática, y configurar Apache2 PHP y Mysql

MYSQL_PASS="YOUR_PASSWORD_HERE";

echo "+Updating apt-get..."
apt-get update

echo "+Installing SSH..."
apt-get install -q -y ssh

echo "+Changing default SSH port..."
sed -i 's/Port 22/Port 28/' /etc/ssh/sshd_config
/etc/init.d/ssh restart

echo "+Installing Apache2..."
apt-get install -q -y apache2
sed -i 's/ServerTokens Full/ServerTokens Prod/' /etc/apache2/conf.d/security
sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf.d/security
sed -i 's/TraceEnable On/TraceEnable Off/' /etc/apache2/conf.d/security
/etc/init.d/apache2 reload
a2enmod rewrite
/etc/init.d/apache2 restart

echo "+Installing PHP5..."
apt-get install -q -y php5
echo "+Securing PHP.ini file..."
sed -i 's/disable_functions =/disable_functions = show_source, system, exec/' /etc/php5/apache2/php.ini
sed -i 's/expose_php = On/expose_php = Off/' /etc/php5/apache2/php.ini
sed -i 's/display_errors = On/display_errors = Off/' /etc/php5/apache2/php.ini
sed -i 's/log_errors = Off/log_errors = On/' /etc/php5/apache2/php.ini
sed -i 's/allow_url_fopen = On/allow_url_fopen = Off/' /etc/php5/apache2/php.ini

echo "+Installing MySQL Server..."
DEBIAN_FRONTEND='noninteractive' apt-get install -q -y mysql-server
mysqladmin -u root password $MYSQL_PASS
apt-get install -q -y php5-mysql
mysql_secure_installation

history -c

echo "+Installation Completed!"

Fuente: Unixmen
Leer más...

The shell it's alive!

d
Autor: Ricardo Osorio
Twitter: @HackeaMesta
Descripción: Script que permite que la terminal hable y salude
Visto en: HackeaMesta
#!/bin/bash 

ifespeak=`type -p espeak`
 if [ -z $ifespeak ]; then
  echo "Para mejor funcionamiento necesita tener instalado espeak"
  echo "sudo apt-get install espeak"
  echo "sudo yum install espeak"
  echo "Intentalo nuevamente"
  exit 1
 fi
 
NOMBRE=`cat /etc/passwd | grep "^$LOGNAME" | cut -d: -f5 | cut -d' ' -f1` 
HORA=`date | cut -c12-13 | tr -d ' '` 
tiempo=`date +%H:%M` 
dia=`date +%d` 
mes=`date +%m` 
ano=`date +%Y` 
if expr '$HORA <= 4' > /dev/null  
then 
echo 'Buenas noches, '$NOMBRE | espeak -v es-la -s 150 2>/dev/null 
sleep=1 
echo 'Son las, '$tiempo',, horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 2>/dev/null 
sleep=1 
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 2>/dev/null 
sleep=1 
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 2>/dev/null 
elif expr '$HORA < = 11' > /dev/null ] 
then 
echo 'Buenos dias, '$NOMBRE | espeak -v es-la -s 150 
sleep=1 
echo 'Son las, '$tiempo', horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 
sleep=1 
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 
sleep=1 
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 
elif  expr '$HORA < = 18' > /dev/null 
then 
echo 'Buenas tardes, '$NOMBRE | espeak -v es-la -s 150 
sleep=1 
echo 'Son las, '$tiempo', horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 
sleep=1 
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 
sleep=1 
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 
elif expr '$HORA < = 24' > /dev/null  
then 
echo 'Buenas noches, '$NOMBRE | espeak -v es-la -s 150 
sleep=1 
echo 'Son las, '$tiempo', horas,, del '$dia',,,, del '$mes',,,, de '$ano'' | espeak -v es-la -s 140 
sleep=1 
echo 'el sistema operativo esta listo para usarse' | espeak -v es-la -s 150 
sleep=1 
echo ',,,,que disfrutes tu sesión en Debian' | espeak -v es-la -s 140 
fi
El script detecta 3 zonas horarias 
1. Buenos días
2. Buenas tardes
3. Buenas noches
Dependiendo de que hora sea
Damos permisos de ejecución
chmod +x habla.bash
Ejecutamos el script
./habla.bash
Leer más...

Script Cambiando de directorios interactivamente

d
Autor: |Leo Gutiérrez R.
Descripción: Script para cambiar de directorios interactivamente.
 Mail: leorocko13[at]hotmail


#!/bin/bash - 
#===============================================================================
#
#          FILE:  cdprompt.sh
# 
#         USAGE:  ./cdprompt.sh 
# 
#   DESCRIPTION:  Cambio de directorios interactivamente.
# 
#       OPTIONS:  ---
#  REQUIREMENTS:  ---
#          BUGS:  ---
#         NOTES:  ---
#        AUTHOR: |Leo Gutiérrez R.| (), |leorocko13[at]hotmail|
#       COMPANY: 
#       CREATED: 02/26/2011 01:51:28 AM CST
#      REVISION:  ---
#===============================================================================
 
select directorio in */ "SALIR"
do
 if [ "$directorio" = "SALIR" ]
 then
  break;
 elif [[ -n "$directorio" ]]
 then
  cd "$directorio"
  break;
 else 
  echo -e "\aError de opción.";
  break;
 fi
done
Leer más...

Script para navegar entre los DIspositivos USB

d
Autor: Leo Gutierrez R
Descripcion: Script que permite Navegar sobre los dispositivos USB del sistema

#!/bin/bash
# Leo Gutiérrez R.
# Script para navegar por sobre los dispositivos USB en el sistema.
# Uso personal.
select archivo in `ls -1 /media/ | grep -v "^cd$" | grep -v "^dvd$" | grep -v "^fl$" | grep -v "^ubuntu$" | grep -v "^windows$"` 
do
 if [ -n "$archivo" ]
 then
  cd /media/"$archivo"
  break;
 else
  echo -e "Error eligiendo dispositivo";
  exit 1;
 fi
done
Leer más...

Detectar Man In the Middle

d
Autor: flu project
Visto en: Flu Project
Descripción: Script que permite detectar ataques man in the middle y dar de baja la interface de red.
(Para mas información sobre éste tipo de ataques consultar el siguiente link )

#!/bin/bash

if [ $# -ne 1 ]
then
echo "Uso ./mitm.sh  [ dirección mac ]"
exit
fi

mac=$1
while true
do
entradaRouter=$( arp -a | grep 192.168.1.1 | cut -d' ' -f4 )
if [ $mac != $entradaRouter ]
then
echo “Atento la Mac ha cambiado”
ifconfig  [ dispositivo red, ejemplo eth0 ] down
fi
sleep 2
done

Damos permisos de ejecución: chmod +x mitm.sh 
Ejecutamos el script: ./mitm.sh [ dirección mac ]
Ejemplo: ./mitm.sh 00:02:cf:ce:c6:1a
Leer más...

Extractor de Archivos Comprimidos

d
Autor: JuszR
Correo: gentoo[at]rocks.net
Descripción: Script que permite realizar la extracción de archivos de una manera rápida.
#!/usr/bin/env bash
# Script para extraer archivos
# JuszR gentoo@rocks.net
# GPL
 
 
if [ "$#" -lt 1 ]; then
	echo -ne "\n\tUso:"
	echo -e "\n\t$(basename $0) [archivo] (.tar, .rar, .bz2...)"
	echo ""
	exit 1
fi
 
 if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2 | *.tbz2)   tar xvjf $1        ;;
            *.tar.gz)    tar xvzf $1     ;;
            *.bz2)       bunzip2 $1       ;;
            *.rar)       unrar x $1     ;;
            *.gz)        gunzip $1     ;;
            *.tar)       tar xvf $1        ;;
            *.tgz)       tar xvzf $1       ;;
            *.zip)       unzip $1     ;;
            *.Z)         uncompress $1  ;;
            *.7z)        7z x $1    ;;
            *)           echo "'$1' no puede ser extraido" ;;
	 esac
    else
        echo "'$1' no es un archivo valido"
    fi
Para realizar la extracción, el script se utiliza de la siguiente manera: 
./extractor.bash archivo.ext
Leer más...

Colores en Bash

d
Autor: JuzsR [ gentoo[at]rocks.net ]
Descripción: Script que mediante el uso de variables permite tener salidas más estéticas en pantalla.
#!/usr/bin/env bash
# Colores en bash
# JuszR gentoo@rocks.net
# GPL
 
# Variables
txtund=$(tput sgr 0 1)          # Subrayado
txtbld=$(tput bold)             # Negrita
bldred=${txtbld}$(tput setaf 1) #  rojo
bldblu=${txtbld}$(tput setaf 4) #  azul
bldwht=${txtbld}$(tput setaf 7) #  blanco
txtrst=$(tput sgr0)             # Resetear
info=${bldwht}*${txtrst}        # Feedback
pass=${bldblu}*${txtrst}
warn=${bldred}!${txtrst}
 
echo "Ejemplos de colores"
echo -e "$(tput bold) norm  negr  subr   tput-colores$(tput sgr0)"
 
for i in $(seq 1 7); do
  echo " $(tput setaf $i)Texto$(tput sgr0) $(tput bold)$(tput setaf $i)Texto$(tput sgr0) $(tput sgr 0 1)$(tput setaf $i)Texto$(tput sgr0)  \$(tput setaf $i)"
done
 
echo -e '$(tput bold)' 'Para Negrita'
echo -e '$(tput sgr 0 1)' 'Para Subrayado'

echo -e "Ejemplo: "
echo -e "$(tput bold) Negrita" "$(tput sgr 0 1)Subrayado"
Para observar la salida del script 
chmod +x colores.bash
./colores.bash
Leer más...

Script para comprobar si un proceso está corriendo

d
Autor: Leo Gutiérrez R.
Descripción: Script que permite comprobar si un proceso está corriendo,
dicho proceso a comprobar lo recibe como parámetro.
#!/bin/bash
# Leo Gutiérrez R.
# Script para comprobar si un proceso está corriendo.
 
[ $# -ne 1 ] && {
	cat << EOF
        Forma de ejecución: `basename $0` service
        EOF
	exit 1;
}
 
[ -f "/var/run/daemons/$1" ] && {
	echo -e "\"$1\" running.";
} || {
	echo -e "\"$1\" stopped.";
}
exit 0;
Damos permisos de ejecución 
chmod +x Comprueba.bash
Ejecutamos el script
./Comprueba.bash [ servicio ]
./Comprueba.bash mysqld
Leer más...

Script para ArchLinux Desintalación de Paquetes

d
Script para ArchLinux, muestra los paquetes para elegir cuál desinstalar, todo a través de una pequeña interfaz.


#!/bin/bash
 
[ ${UID} != 0 ] && {
 echo -e "Se requieren privilegios de Root";
 exit 1;
}
 
pacman -Qei | sed -n "s/^Name.*\:\s\(.*\)/\1/p" > nombres.txt
pacman -Qei | sed -n "s/^Version.*\:\s\(.*\)/\1/p" > versiones.txt
 
Xdialog --title "Desinstalar paquetes" --menu "Elija su paquete:" 24 51 6 $(paste nombres.txt versiones.txt) 2> /tmp/menu.tmp.$$
 
retval=$?
choice=`cat /tmp/menu.tmp.$$`
rm -f nombres.txt
rm -f versiones.txt
rm -f /tmp/menu.tmp.$$
 
case "$retval" in
  1)
    exit 0;
    ;;
  255)
    exit 0;
    ;;
esac
 
yes | pacman -R "${choice}" && {
 Xdialog --title "Desinatalar paquetes" --msgbox "${choice} desinstalado con éxito." 10 100
} || {
 Xdialog --title "Desinatalar paquetes" --msgbox "${choice} no se pudo desinstalar." 10 100
 exit 1;
}
 
exit 0;
Leer más...

Script para instalar paquetes en Perl

d
Autor: @Desconocido
Descripción: Script que nos permite instar paquetes Perl

#!/bin/bash
# Script para instalar paquetes en Perl.
 
function getch()
{
 OLD_STTY=`stty -g`
 stty cbreak -echo
 look=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
 stty $OLD_STTY
}
 
function installModule()
{
 sudo perl Makefile.PL
 sudo make
 sudo make test
 sudo make install
} 
 
function modins()
{
 archivo=
 select archivo in *.tar.gz "SALIR"
 do
  if [ "${archivo}" = "SALIR" ]
  then
 
   exit 0;
 
  elif [[ -n "${archivo}" ]]
  then
 
   echo -e "Elegiste : ${archivo}";
   tar zxvf "${archivo}" &> /dev/null || {
    echo -e "Error descomprimiendo [ ${archivo} ]";
    exit 1;
   }
 
   cd "${archivo%\.tar.gz}" 2> /dev/null || {
       echo -e "\aError abriendo directorio ${archivo%%.*}";
       exit 1;
      } 
 
   installModule;
 
   echo -e "\E[31;47mMódulo instalado. Presione una tecla para continuar.";
   tput sgr0;
   getch;
   break;
 
  else
 
   echo -e "Error eligiendo archivo.";
   exit 0;
 
  fi
 
 done
}
 
modins;
exit 0;
Leer más...

Script para mostrar listado de Usuarios de un grupo

d
Autor : @Desconocido
Descripción: Script que muestra el grupo con mayor cantidad de usuarios, y el nombre de los usuarios.

#! /bin/bash
if test $# -ge 1
   then
      echo "Este Script no necestia parametros"
   exit 0
   else
ypcat passwd | awk -F: ' NR > 1 { vec[$4] +=1}
         END { VAN=1
            for (x in vec)
               if (VAN==1)
               {MAYOR=vec
;
               GRUPO=x;
               VAN=0}
               else
               if (MAYOR < vec
)
                  {MAYOR=vec
;
                   GRUPO=x;}
               print  GRUPO" " MAYOR+1
         }' > borrar

VAR1=`cat borrar | cut -d" " -f1`
VAR2=`cat borrar | cut -d" " -f2`
VAR3=`ypcat group | grep $VAR1 | cut -d":" -f1`
echo " El grupo $VAR3 tiene la mayor cantidad de usuarios con un total de 
$VAR2"
rm borrar
exit 0
fi
Leer más...

SCRIPT PARA INFORMACION DEL SISTEMA, REDHAT

d
Autor: @Desconocido
Descripción: Script que permite sacar un Reporte del Sistema, para un Reporte de Procesos, para un Reporte de Usuarios .

#! /bin/bash
if test $# -ge 1
then
echo "Este Script no utiliza parametros"
exit 0
else
clear
while true
do
echo "         **********************************************"
echo "         *                                            *"
echo "         *      Seleccione una accion a realizar      *"
echo "         *                                            *"
echo "         **********************************************"
echo "         *                                            *"
echo "         *  Presione (A) para un Reporte del Sistema  *"
echo "         *  Presione (B) para un Reporte de Procesos  *"
echo "         *  Presione (C) para un Reporte de Usuarios  *"
echo "         *  Presione (X) para salir                   *"
echo "         *                                            *"
echo "         **********************************************"
read op
clear

#VARIABLES DE ENTORNO UTILIZADAS EN A)
   #Tamaño del File System expresado en Kbytes
   TAM_FS=`df -l --block-size=1024 | awk 'BEGIN{cant=0} {cant+=$2} END{print 
"Tamaño del file system: "cant}'`

   #Porcentaje del disco usado
   PORC_DISCO_USAD=`df -l | awk 'BEGIN{cant=0} {cant+=$5} END{print 
"Porcentaje del disco utilizado: "cant, "\tLibre: "100-cant}'`

   #Tamaño del directorio actual
   TAM_DIR_AC=`ls -l --block-size=1024 | awk 'BEGIN{cant=0} {cant+=$5} 
END{print cant}'`

   #Cantidad de archivos en el dir actua
   CANT_ARCH_DIR_AC=`ls -l | cut -f1 -d" " | grep ^-......... | awk 'END{print 
NR}'`

   #Cantidad de subdirectorios en el dir actual
   CANT_SUBDIR_AC=`ls -l | cut -f1 -d" " | grep ^d......... | awk 'END{print 
NR}'`

   #Fecha del reporte
   FCHA_REP=`date '+Fecha del reporte: %d/%m/%y'`






   #VARIABLES DE ENTORNO UTILIZADAS EN B)
   #Cantidad de procesos en ejecucion
   

CANT_PROC_EJEC=`ps -aux | wc -l`

   #Tamanio total de la memoria
   TAM_TOT=`free -t | cut -f2 -d":" | cut -d" " -f7 | sort | awk 'END{print}'`

   #Porcentaje de memoria utilizada
   TAM_MEM_USA=`ps -aux | awk 'BEGIN{cant=0} {cant+=$4} END{print "Porcentaje 
de memoria utilizado: "cant, "\tLibre: "100-cant}'`

   #Uso de CPU
   USO_CPU=`ps -aux | awk 'BEGIN{cant=0} {cant+=$3} END{print "Uso de CPU: 
"cant}'`

   #Usuario que utiliza mayor cantida de memoria
   MEM_USU=`ps -aux | awk  ' NR > 1 { vec[$1] +=$4}
         END { VAN=1
            for (x in vec)
               if (VAN==1)
               {MAYOR=vec
;
               GRUPO=x;
               VAN=0}
               else
               if (MAYOR < vec
)
                  {MAYOR=vec
;
                   GRUPO=x;}
            print  "El Usuario que usa mayor cantidad de memoria: " GRUPO
         }'`

   #Usuarios con mayor cantidad de procesos
   CANT_PROC=`ps -aux | awk  ' NR >1  { vec[$1] +=1}
         END { BAN=1
            for (x in vec)
               if (BAN==1)
               {MAYOR=vec
;
               GRUPO=x;
               BAN=0}
               else
               if (MAYOR < vec
)
                  {MAYOR=vec
;
                   GRUPO=x;}
            print  "Usuario con mayor cantidad de procesos: " GRUPO " con " MAYOR " 
procesos"
         }'`


#VARIABLES DE ENTORNO UTILIZADAS EN C)
   #Cantidad total de usuarios
   


   CANT_USER_TOT=`ypcat passwd | awk 'END{print NR}'`

   #Cantidad de usuarios logueados
   CANT_USER_LOG=`who | cut -f1 -d" " | sort | uniq | awk 'END{print NR}'`


   #El usuario con que lleva mas tiempo logueado
   USER_MAS_LOG=`who | awk '{ print $5 "\t"$1}' | sort | awk ' NR==1 ' | cut 
-f2`

#COMIENZA EL MENU DE OPCIONES
case $op in
#EMPIEZA A EJECUTAR A
   A|a)
echo "        A)"
echo "         **********************************************************"
echo "         *            Reporte del Sistema de Archivos             *"
echo "              
*--------------------------------------------------------*"
   echo "         * $TAM_FS                         *"
echo "              *                                    *"
echo "              * $PORC_DISCO_USAD      *"
echo "              *                                                        
*"
echo "         * Tamaño del directorio actual: $TAM_DIR_AC (Kbytes)           
*"
echo "              *                                                        
*"
echo "              * Cantidad de archivos en el directorio actual: 
$CANT_ARCH_DIR_AC        *"
echo "              *                                                        
*"
echo "              * Cantidad de sub-directorios en el directorio actual: 
$CANT_SUBDIR_AC *"
echo "              
*--------------------------------------------------------*"
echo "              * $FCHA_REP                            *"
echo "              
**********************************************************"
sleep 12
;;
#TERMINA DE EJECUTAR A

#EMPIEZO A EJECUTAR B
   B|b)
echo "        B)"
echo "         
******************************************************************"
echo "         *                      Reporte de Procesos                      
  *"

echo "              
*----------------------------------------------------------------*"
echo "              * Cantidad de procesos en ejecucion:$CANT_PROC_EJEC      
                 *"


echo "              *                                                        
         *"
echo "              * Tamaño total de la memoria:$TAM_TOT                    
            *"
echo "              *                                                        
         *"
echo "              * $TAM_MEM_USA            *"
echo "              *                                                        
         *"
echo "              * $USO_CPU                                               
  *"
echo "              *                                                        
         *"
echo "              * $MEM_USU           *"
echo "              *                                                        
         *"
echo "              * $CANT_PROC   *"
echo "              
*----------------------------------------------------------------*"
echo "              * $FCHA_REP                                    *"
echo "              
******************************************************************"
sleep 12;;
#TERMINO DE EJECUTAR B

#EMPIEZO A EJECUTAR C
   C|c)
echo "        C)"
echo "         
******************************************************************"
echo "         *                      Reporte de Usuarios                      
  *"
echo "              
*----------------------------------------------------------------*"
echo "              * Cantidad total de usuarios: $CANT_USER_TOT             
                    *"
echo "              *                                                        
         *"
echo "              * Cantidad de usuarios logueados: $CANT_USER_LOG         
                      *"
echo "              *                                                        
         *"
echo "              * El usuario que lleva mas tiempo logueado: 
$USER_MAS_LOG               *"
echo "              
*----------------------------------------------------------------*"
echo "              * $FCHA_REP                                    *"
echo "              
******************************************************************"
sleep 12;;

#EMPIEZA A EJECUTAR X
   X|x) echo "Fin del programa"
           break
           sleep 1;;
   *) echo "opcion incorrecta"
      sleep 1;;
   esac
clear
done
exit 0
fi
Leer más...

Script para Enviar IP vía Mail

d
Autor: @Desconocido
Descripción: Este script comprueba la dirección IP pública de un PC y la envia a una dirección de correo.
Es útil si tiene el PC con una conexión a internet sin IP fija y se quiere conectar a él remotamente.
Puede ejecutarlo directamente con: ./mailip.sh o añadir la siguiente linea en un script de inicio: nohup mailip.sh &>/dev/null & Para ejecutarlo, primero debe modificar las variables del principio del script con sus datos de correo.
#!/bin/bash

# mailip.sh

# Script designed to read your public IP address from www.whatismyip.org
# at intervals and notify any changes by sending an email for you.

# wget and sendEmail with tsl support must be installed on your system.

# Usage:  mailip.sh  (if it can be found in your session environment PATH)
# or if you want to run it on the background:  nohup mailip.sh &>/dev/null &

# Please, you must modify the next variables to suit your needs:

DELIVER=an_account@gmail.com  # An account to send the email with the ip.
RECEIVE=$DELIVER  # An account to get the email. Don't modify to send it to the same address you especified above.
SMTP_SERVER=server.address.com:port  # The smtp server's port of the emailer account. Example: smtp.gmail.com:587
MAIL_USER=account-user
MAIL_PASS=UseR.p4s5vooRd-
TLS=yes  # yes|no    Does the mail server accept/require TLS or SSL encryption?

# The script starts here.

PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin  # paranoia
READ_IP()
{
wget -q -t 4 --no-proxy --no-cache --no-cookies -o /dev/null -O /var/publicip http://www.whatismyip.org
if [ $? -ne 0 ] ; then sleep 5m ; READ_IP ; fi
}
SEND_IP()
{
sendEmail -q -f $DELIVER -t $RECEIVE -u $SUBJECT -m $MESSAGE -s $SMTP_SERVER -xu $MAIL_USER -xp $MAIL_PASS -o tls=$TLS
if [ $? -ne 0 ] ; then sleep 5m ; SEND_IP ; fi
}

if [ $DELIVER == an_account@gmail.com ]
then echo ; echo "  Warning!  You must carefully edit some variables of the script first of all." ; echo
else
  if [ ! -e /var/publicip-sent ]
  then echo 0 > /var/publicip-sent
  fi
  while true
  do READ_IP ; sleep 12s ; sync  # paranoia
    if [ `cat /var/publicip` != `cat /var/publicip-sent` ]
    then
    SUBJECT=`hostname ; echo "IP changed:" ; cat /var/publicip`
    MESSAGE=`cat /var/publicip ; echo ; date +%F\ %T`
    SEND_IP && mv /var/publicip /var/publicip-sent
    else rm /var/publicip
    fi
  sleep 60m
  done
fi

# That was all.

# Perhaps you didn't like having to type your email password directly in the script,
# a workaround could be to assign a value like MAIL_PASS=`cat ~/password.txt` , then
# write a file called ~/password.txt with only the password in it and run the script.
# Don't forget that the password plain text file should only be readable by you,
# modificate it's permissions with chmod if needed.
Leer más...

Script para indicar señal y ruido de tarjeta WIFI

d
Autor: @Desconocido
Descripción: Este sencillo script le indica los valores de señal y ruido de su tarjeta inalámbrica WIFI.
Es útil para orientar antenas o analizar el rendimiento de una red.
Funcionará en cualquier modo que el dispositivo/driver soporte siempre que sea compatible su uso con iwconfig.

#!/bin/bash

HELP_MESSAGE()
{
clear;echo;echo "This script will show you the the signal quality of a wlan device until you"
echo "press control+c ,  if that info can be obtained with the iwconfig command."
echo;echo "This is useful when orienting an antenna or test your connection."
echo;echo "This script can use any mode your device support and will run without releasing"
echo "any established connection."
echo;echo "Usage: $0 DEV"
echo "where DEV is any of your wlan devices as wlan0, ath0, eth1...";echo
}

ERROR()
{
echo "Sorry, something went wrong. Try $0 --help" ; exit
}

RUN()
{
while true
do printf `date +%T`
iwconfig $1 | grep --ignore-case Link || ERROR
sleep 1s
done
}

if [ ! $1 ]
then HELP_MESSAGE
elif [ $1 == -h ]
then HELP_MESSAGE
elif [ $1 == --help ]
then HELP_MESSAGE
else RUN $1
fi
Leer más...

[RUBY] Shack (Imageshack Uploader)

d
Autor: Elektro H@cker
Descripción: Script realizado en Ruby que permite subir imagenes a ImagesHack.


# -*- coding: UTF-8 -*-
 
 
 
# Modulos
 
require 'rest_client'
exit if Object.const_defined?(:Ocra)
 
 
 
# Metodos
 
def logo()
  print "
     @@
    @   @                  
   @    @      @@@   @@@  @   @
    @   @         @ @   @ @  @
     @  @ @@      @ @     @ @
      @ @@  @  @@@@ @     @@
      @ @   @ @   @ @     @ @
  @  @  @   @ @   @ @   @ @  @
   @@   @   @  @@@@  @@@  @   @
 
 
                                By Elektro H@cker\n\n"
end
 
def help()
  print "\n Modo de empleo:\n\n"
  print "  " + __FILE__.split('/').last + " [Opci\u00F3n] [Imagen]\n\n"
  print "\n Ejemplo:\n\n"
  print "  " + __FILE__.split('/').last + " -d C:\\Test.jpg \n\n"
  print "\n Opciones: \n\n"
  print "  -a --all \n       Devuelve el enlace de la imagen en todos los formatos. \n\n"
  print "  -b --bb \n       Devuelve el enlace de la imagen en formato BB. \n\n"
  print "  -d --directo \n       Devuelve el enlace directo a la imagen. \n\n"
  print "  -h --html \n       Devuelve el enlace de la imagen en formato HTML. \n\n"
  print "  -t --thumb \n       Devuelve el thumb de la imagen. \n\n"
  print "  -k --key \n       Establece su Developer key. \n\n" 
  print "  /?   Muestra esta ayuda. \n\n"
  Process.exit
end
 
def keycode(imput)
 if ARGV[1] == () or not imput.length.eql? 40
   puts "\n Porfavor introduzca una developer key válida..."
   puts "\n Ejemplo:\n\n " + __FILE__.split('/').last + " --key 148CAPSV9465b858a45dc1b4cdb32dee95ff6f59 \n\n"
   puts "\n Para más información, Visite: http://stream.imageshack.us/api/"
   Process.exit
  end # length
 
 if File.exist?("key")
   oldkey = File.read('key')
   print "\n ¿Desea reemplazar el archivo que contiene su developer key?\n\n"
   print " Clave anterior: " + oldkey 
   print "\n Clave nueva   : " + imput
   print  "\n\n [SI/NO] \n\n>> "
   $sino = STDIN.gets
    if $sino[/si/i]
      keyfile = File.new("key", "w")
      keyfile.print(imput)
      print "\nClave reemplazada correctamente.\n"
    elsif $sino[/no/i]
      Process.exit
    elsif
      keycode(imput)
    end # Reemplazar
  else
      keyfile = File.new("key", "w")
      keyfile.print(imput)
      print "\nClave configurada correctamente.\n"
 end # File exist
end
 
def subir(file)
 print "\n Subiendo la imagen, Espere...\n\n" 
 $Imagen = RestClient.post('http://www.imageshack.us/upload_api.php',
   :key => $devkey,
#  :a_username => "USUARIO",
#  :a_password => "PASSWORD",
   :fileupload => File.new(file)
 )
end
 
def show(opcion)
  if opcion == "-d" or opcion == "--directo" 
    print $Imagen.split("").last.split("").first + "\n"
  elsif opcion == "-b" or opcion == "--bb" 
    print $Imagen.split("").last.split("").first + "\n"
  elsif opcion == "-h" or opcion == "--html" 
    print $Imagen.split("").last.split("").first.gsub(">", ">").gsub("<", "<").gsub(""", "'") + "\n"
  elsif opcion == "-t" or opcion == "--thumb" 
    print $Imagen.split("").last.split("").first + "\n"
  elsif opcion == "-a" or opcion == "--all" 
    print "\nDirecto: \n" + $Imagen.split("").last.split("").first + "\n\n" 
    print "BB Forum: \n" + $Imagen.split("").last.split("").first + "\n\n"
    print "HTML: \n" + $Imagen.split("").last.split("").first.gsub(">", ">").gsub("<", "<").gsub(""", "'") + "\n\n"
    print "Thumb: \n" + $Imagen.split("").last.split("").first + "\n"
  end
 Process.exit
end
 
 
 
# Control de errores
 
logo()
 
if ARGV[0] == "-k" or ARGV[0] == "--key"
  keycode(ARGV[1])
  Process.exit
end
 
if not File.exist?("key")
  print "\n ERROR.   Debe configurar su developer key para usar este programa...\n"
  puts "\n Ejemplo:\n\n " + __FILE__.split('/').last + " --key 148CAPSV9465b858a45dc1b4cdb32dee95ff6f59 \n\n"
  puts "\n Para más información, Visite: http://stream.imageshack.us/api/"
  Process.exit
elsif
  $devkey = File.read('key')
end
 
if (ARGV.empty?) or ARGV[0] == "/?"
  help()
end
 
if (ARGV[1])==()
  print "\n ERROR.   Debe introducir la ruta local de la imagen...\n"
  Process.exit
end
 
if not File.exist?(ARGV[1])
  print "\n ERROR.   La imagen no existe...\n"
  Process.exit
elsif not (ARGV[1].split('.').last)[/bmp\z/i] and not (ARGV[1].split('.').last)[/bmp\z/i] and not (ARGV[1].split('.').last)[/gif\z/i] and not (ARGV[1].split('.').last)[/ico\z/i] and not (ARGV[1].split('.').last)[/jpg\z/i] and not (ARGV[1].split('.').last)[/jpeg\z/i] and not (ARGV[1].split('.').last)[/png\z/i] and not (ARGV[1].split('.').last)[/tif\z/i] and not (ARGV[1].split('.').last)[/tiff\z/i] 
    print "\n ERROR.   Archivo de imagen no soportado...\n"
    print "\n Formatos soportados: .BMP, .GIF, .ICO, .JPG, .JPEG, .PNG, .TIF, .TIFF\n"
  Process.exit
end
 
if not ARGV[0] == "-d" and not ARGV[0] == "--directo" and not ARGV[0] == "-a" and not ARGV[0] == "--all" and not ARGV[0] == "-b" and not ARGV[0] == "--bb" and not ARGV[0] == "-h" and not ARGV[0] == "--html" and not ARGV[0] == "-t" and not ARGV[0] == "--thumb"
  print "\n ERROR.   Opcion incorrecta...\n\n"
  print " Use la opcion [/?] para mostrar la ayuda. \n\n"
  print " " +__FILE__.split('/').last +  " /?  \n"
  Process.exit
end
 
 
 
# Proceso
 
subir(ARGV[1])
show(ARGV[0])
IMPORTANTE: Para usar este script necesitan obtener una developer key (No es un capricho mio), Simplemente rellenen este formulario y enseguida recibiran un email con la clave: http://stream.imageshack.us/api/
Luego hay que introducirla (Una única vez) usando el script de tal forma: Código: shack.rb -k "CLAVE"

Modo de Uso:


shack.rb [Opción] [Imagen]
Ejemplo:
 shack.rb -d C:\Test.jpg
Opciones:
 -a --all
      Devuelve el enlace de la imagen en todos los formatos.
 -b --bb
      Devuelve el enlace de la imagen en formato BB.
 -d --directo
      Devuelve el enlace directo a la imagen.
 -h --html
      Devuelve el enlace de la imagen en formato HTML.
 -t --thumb
      Devuelve el thumb de la imagen.
 -k --key
      Establece su Developer key.
 /?   Muestra esta ayuda.

Leer más...

Script para comprimir archivos en el directorio Actual

d
Autor: Leo Gutiérrez R.
Descripción: Script que permite comprimir todos los archivos en el directorio actual, util para las memorias USB Discos duros :D

#!/bin/bash
# Leo Gutiérrez R. leorocko13@hotmail.com
# Script que comprime todos los archivos en el directorio actual.
# Util para hacer espacio en dispositivos extraíbles.

find . -type f | while read file
do
 extension=`echo "${file}" | awk -F . '{print $NF}'`;
 echo -e "$extension" | grep -ie "^\(rar\|Z\|7z\|bz2\|zip\|gz\)$" &> /dev/null && continue;
 rar a "${file}.rar" "$file" -y -df
done
Leer más...

Apagar el PC en una hora determinada

d
Bueno quien no quisiera usar este script al irse del trabajo dejar programado y que se apague solito =)


#!/bin/sh
clear
echo "****Bienvenido al Sitema de Apagado Automatico****"
echo "GeekScripting"
echo ""
echo "MENU"
echo " 1.-Apagar PC ahora"
echo " 2.-Reiniciar PC ahora"
echo " 3.-Apagar PC en un ahora determinada"
echo " 4.-Apagar PC en un lapso determinado"
echo " 5.-Salir"
echo ""
read -p "Seleccionar Opcion: " OPCION
case $OPCION in
1) sudo halt;;
2) sudo reboot;;
3) echo -n "Ingresa la hora de apagado: "
read hora
sudo shutdown -h $hora;;
4)echo -n "Ingresa el numero de minutos, tras cual el PC se apagara: "
read minutos
sudo shutdown -h $minutos;;
5) exit;;
*) echo "Usted ingreso una opcion que no esta en el menu"
exit 1;;

Para darle un buen uso agregarlo a sus alias, y darle permisos de ejecucion ($ chmod 755 *.sh)
Leer más...

Script para levantar como servicio RED5

d
Autor: Sohail Riaz
Descripción: Script que permite levantar como servicio en Fedora/CentOS/RedHat el servidor de RED5. RED5 es un potentisimo servidor de contenidos en flash y en streaming desarrollado en Java y Open Source.

#!/bin/bash
# For RedHat and cousins:
# chkconfig: 2345 85 85
# description: Red5 flash streaming server
# processname: red5
# Created By: Sohail Riaz (sohaileo@gmail.com)

PROG=red5
RED5_HOME=/usr/local/red5
DAEMON=$RED5_HOME/$PROG.sh
PIDFILE=/var/run/$PROG.pid

# Source function library
. /etc/rc.d/init.d/functions

[ -r /etc/sysconfig/red5 ] && . /etc/sysconfig/red5

RETVAL=0

case "$1" in
 start)
 echo -n $"Starting $PROG: "
 cd $RED5_HOME
 $DAEMON >/dev/null 2>/dev/null &
 RETVAL=$?
 if [ $RETVAL -eq 0 ]; then
  echo $! > $PIDFILE
  touch /var/lock/subsys/$PROG
 fi
 [ $RETVAL -eq 0 ] && success $"$PROG startup" || failure $"$PROG startup"
 echo
 ;;
 stop)
 echo -n $"Shutting down $PROG: "
 killproc -p $PIDFILE
 RETVAL=$?
 echo
 [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
 ;;
 restart)
 $0 stop
 $0 start
 ;;
 status)
 status $PROG -p $PIDFILE
 RETVAL=$?
 ;;
 *)
 echo $"Usage: $0 {start|stop|restart|status}"
 RETVAL=1
esac

exit $RETVAL
Leer más...

Cambiar extension de un listado de archivos

d
Autor: LIDSOL
Descripción: Script que recibe como primer parámetro la extensión de un archivo y la cambia por la recibida en el segundo parámetro
Visto en LIDSOL
#!/bin/bash
 
if [ $# -ne 2  ]; then
  #si no recibe argumentos 
  echo "Para correrlo usa: $0 laviejaext lanuevaext" 1>&2
  exit 1
 fi
 for file in *.$1; do
   newname=`echo $file | sed "s/$1$/$2/"`
   echo "Renombrando $file por $newname"
   mv "$file" "$newname"
 done
exit 0
Leer más...

Monitorear acceso de usuarios de linux

d
Autor: @eljeffto
Descripción: Script para monitorear el acceso de usuarios a máquinas linux a través de cualquier medio (Consola, TTY, Sesión gráfica, etc.). El correo es enviado a través de una conexión por telnet al servidor de correo, existen otras formas de realizarlo a través de la librería smtplib de python, con perl o con la función mail de sendmail, depende de lo que se tenga, este es para un caso básico
Fuente: eljeffto

#!/bin/bash

ASUNTO="Acceso de usuario:"
FECHA=$(date)
IP=$(who | cut -d"(" -f2 | cut -d")" -f1)
SERVIDOR= #ip o dominio del servidor de correo
PUERTO=#puerto de conexión SMTP o SMTPS con el servidor de correo
REMITENTE=#correo existente de quien envia
DESTINATARIO=#correo existente de quien recibirá

telnet $SERVIDOR $PUERTO <<_EOF
HELO $SERVIDOR
MAIL FROM:<$REMITENTE>
RCPT TO:<$DESTINATARIO>
DATA
From: <$REMITENTE>
To: <$DESTINATARIO>
Subject: $ASUNTO - $FECHA

Se ha identificado un acceso por parte del usuario __indique-aqui-el-usuario__

Acceso desde $IP

.
QUIT
_EOF

NOTA del AUTOR: En caso de necesitar la autenticación del usuario es necesario revisar si la autenticación es AUTH PLAIN, AUTH LOGIN, recordando que se debe pasar el correo y el password bajo codificación BASE64.
Leer más...

Shell Script para inicio de maquinas virtuales de VirtualBox en modo Headless

d
Autor: @Cesar Yanez


Descripcion: Demonio de inicio de Maquinas virtuales de VirtualBox El objetivo es automatizar el inicio de maquinas virtuales de Virtualbox en modo headless ( que es cuando nose ejecutan en modo interactivo, sin interfaz grafica, sino en background ). Se soportan el inicio de clientes windows como Linux y se mantiene un log por fechas de cuando se arranco/detuvo/guardo una sesion. Los logs se almacenan en el $HOME/.VBoxLogs del usuario que tiene las VM.


#!/bin/bash

##
## virtualbox-daemon-mcy.sh
##
## Version : 0.2 27.01.2012 03:05:43
##
## Descripcion: Demonio de inicio de Maquinas virtuales de VirtualBox
## El objetivo es automatizar el inicio de maquinas virtuales de
## Virtualbox en modo headless ( que es cuando nose ejecutan en modo
## interactivo, sin interfaz grafica, sino en background ). Se soportan
## el inicio de clientes windows como Linux y se mantiene un log por
## fechas de cuando se arranco/detuvo/guardo una sesion. Los logs se
## almacenan en el $HOME/.VBoxLogs del usuario que tiene las VM.
##
## Copyright 2012 Cesar Yanez 
##
## 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.
### MODIFICABLE POR USUARIO ### MODIFICABLE POR USUARIO #######
##
## Info: VMs Windows ###
##
## Ayuda:
## VBX_WIN_TOTAL : cantidad de Maquinas Virtuales con Win
##
## VBX_WIN_NAMEX : nombre de la maquina virtual X con Win
## VBX_WIN_USERX : usuario admin de la maquina virtual X
## VBX_WIN_PASSX : password admin de la maquina virtual X
## VBX_WIN_NUMIPX : numero ip de la maquina virtual X
##
## Si hay mas de 4 maquinas virtuales con windows copiar
## y repetir secciones sin repetir numeros
##
VBX_WIN_TOTAL=1

VBX_WIN_NAME1="Windows XP"
VBX_WIN_USER1="cesar"
VBX_WIN_PASS1="cesar"
VBX_WIN_NUMIP1="192.168.1.140"

VBX_WIN_NAME2=""
VBX_WIN_USER2=""
VBX_WIN_PASS2=""
VBX_WIN_NUMIP2=""

VBX_WIN_NAME3=""
VBX_WIN_USER3=""
VBX_WIN_PASS3=""
VBX_WIN_NUMIP3=""

## Info: VMs Linux ###
##
## Ayuda:
## VBX_LIN_TOTAL : cantidad de Maquinas Virtuales con Linux
##
## VBX_LIN_NAMEX : nombre de la maquina virtual X con Linux
##
VBX_LIN_TOTAL=1

VBX_LIN_NAME1="DebianSqueeze"
VBX_LIN_NAME2=""
VBX_LIN_NAME3=""
VBX_LIN_NAME3=""

### Info: Usuario que es propietario de las maquinas virtuales
###
VBX_USR="rondamon"
### Maxima cantidad de tiempo a esperar para que se apague una
### sesion
MAX_SEC=30

### MODIFICABLE POR USUARIO ### MODIFICABLE POR USUARIO #######

###### NO MODIFICAR ###### NO MODIFICAR ###### NO MODIFICAR ####

setEnvVar(){
 RPC_NET=`which net`
 SYS_SU=`which su`
 SYS_AWK=`which awk`
 SYS_GREP=`which grep`
 SYS_TR=`which tr`
 SYS_WC=`which wc`
 SYS_CUT=`which cut`
 SYS_MKD=`which mkdir`
 SYS_CHW=`which chown`
 CUR_USR=`whoami`
 VBX_MNG=`which VBoxManage`
 VBX_USR_HOME=`$SYS_GREP $VBX_USR /etc/passwd|$SYS_CUT -d: -f6`
 VBX_DIR_LOGS=$VBX_USR_HOME/.VBoxLogs
 VBX_LOG_START=$VBX_DIR_LOGS/start.`date '+%d%m%y'`.logs
 VBX_LOG_STOP=$VBX_DIR_LOGS/stop.`date '+%d%m%y'`.logs
 VBX_LOG_SAVE=$VBX_DIR_LOGS/save.`date '+%d%m%y'`.logs
 if [ ! -d $VBX_DIR_LOGS ]; then
 $SYS_MKD $VBX_DIR_LOGS
 fi
 $SYS_CHW $VBX_USR:$VBX_USR $VBX_DIR_LOGS
}

checkVmRunning(){
 VM_TOTAL=`expr $VBX_WIN_TOTAL + $VBX_LIN_TOTAL`
 VM_TOTAL_RUNNING=`$SYS_SU $VBX_USR -c "$VBX_MNG list runningvms |$SYS_WC -l"`
 if [ $VM_TOTAL_RUNNING -eq $VM_TOTAL ]; then
 echo " - Todas las VMs estan ejecutandose"
 return 10
 elif [ $VM_TOTAL_RUNNING -eq 0 ]; then
 echo " - Ninguna VMs en ejecucion"
 return 0
 elif [ $VM_TOTAL_RUNNING -ne $VM_TOTAL ]; then
 echo " - Algunas VMs estan ejecutandose"
 return 5
 fi
}

checkStatusVms(){
 if [ "$1" = " " ]; then
 return 10
 elif [ "$1" != " " ]; then
 ## VM_STATUS=`$SYS_SU -c "$VBX_MNG showvminfo $1 |$SYS_GREP ^State |$SYS_AWK '{print $2}'" $VBX_USR`
 VM_STATUS=`$SYS_SU $VBX_USR -c "$VBX_MNG showvminfo \"$1\" |$SYS_GREP ^State |$SYS_TR -s ' ' ' '|$SYS_CUT -d ' ' -f 2"`
 ### echo VMSTATUSSSSSS $VM_STATUS
 if [ "$VM_STATUS" = "saved" ]; then return 1
 elif [ "$VM_STATUS" = "powered" ]; then return 2
 elif [ "$VM_STATUS" = "running" ]; then return 3
 fi
 fi
}

startWindows(){
 for i in `seq 1 $VBX_WIN_TOTAL`; do
 NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 1 ] || [ $STS -eq 2 ]; then
 echo " - Iniciando VM Windows: " `eval $NAMELL`
 $SYS_SU $VBX_USR -c "$VBX_MNG startvm \"`eval $NAMELL`\" -type headless >> ${VBX_LOG_START} 2>&1"
 elif [ $STS -eq 3 ]; then
 echo " - La VM `eval $NAMELL` ya esta ejecutandose"
 fi
 done
}

stopWindows(){
 for i in `seq 1 $VBX_WIN_TOTAL`; do
 NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 NAMEU="VBX_WIN_USER$i"; NAMEUU='eval "echo \$$NAMEU"'
 NAMEP="VBX_WIN_PASS$i"; NAMEPP='eval "echo \$$NAMEP"'
 NAMEI="VBX_WIN_NUMIP$i"; NAMEII='eval "echo \$$NAMEI"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 2 ]; then
 echo " - "`eval $NAMELL`" esta apagada"; return 0
 elif [ $STS -eq 1 ]; then
 echo " - "`eval $NAMELL`" esta guardada"; return 0
 elif [ $STS -eq 3 ]; then
 echo -n " - "`eval $NAMELL`" deteniendo ..."
 ## $RPC_NET rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I \"`eval $NAMEII`\" -U `eval $NAMEUU`%`eval $NAMEPP`
 $SYS_SU $VBX_USR -c "$VBX_MNG controlvm \"`eval $NAMELL`\" acpipowerbutton >> ${VBX_LOG_STOP} 2>&1"
 for j in `seq 1 $MAX_SEC`; do
 sleep 1; echo -n "$j."
 done
 echo ''; return 1
 fi
 done
}

saveWindows(){
 for i in `seq 1 $VBX_WIN_TOTAL`; do
 NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 2 ] || [ $STS -eq 1 ]; then echo ''
 elif [ $STS -eq 3]; then
 echo " - Salvando VM Windows: " `eval $NAMELL`
 $SYS_SU $VBX_USR -c "$VBX_MNG controlvm \"`eval $NAMELL`\" savestate >> ${VBX_LOG_SAVE} 2>&1"
 fi
 done
}

startLinux(){
 for i in `seq 1 $VBX_LIN_TOTAL`; do
 NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 1 ] || [ $STS -eq 2 ]; then
 echo " - Iniciando VM Linux: " `eval $NAMELL`
 $SYS_SU $VBX_USR -c "$VBX_MNG startvm \"`eval $NAMELL`\" -type headless >> ${VBX_LOG_START} 2>&1"
 elif [ $STS -eq 3 ]; then
 echo " - La VM Linux `eval $NAMELL` ya esta ejecutandose"
 fi
 done
}

stopLinux(){
 for i in `seq 1 $VBX_LIN_TOTAL`; do
 NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 2 ]; then
 echo " - "`eval $NAMELL`" esta apagada"
 return 0
 elif [ $STS -eq 1 ]; then
 echo " - "`eval $NAMELL`" esta guardada"
 return 0
 elif [ $STS -eq 3 ]; then
 echo -n " - "`eval $NAMELL`" deteniendo ..."
 $SYS_SU $VBX_USR -c "$VBX_MNG controlvm \"`eval $NAMELL`\" acpipowerbutton >> ${VBX_LOG_STOP} 2>&1"
 for j in `seq 1 $MAX_SEC`; do
 sleep 1; echo -n "$j."
 done
 echo ''; return 1
 fi
 done
}

saveLinux(){
 for i in `seq 1 $VBX_LIN_TOTAL`; do
 NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 2 ] || [ $STS -eq 1 ]; then echo ''
 elif [ $STS -eq 3]; then
 echo " - Guardando VM Linux: " `eval $NAMELL`
 $SYS_SU $VBX_USR -c "$VBX_MNG controlvm "`eval $NAMELL`" savestate >> ${VBX_LOG_SAVE} 2>&1"
 fi
 done
}

statusVm(){
 for i in `seq 1 $VBX_WIN_TOTAL`; do
 NAMEL="VBX_WIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 1 ]; then
 echo " - STATUS: "`eval $NAMELL`" esta guardada"
 elif [ $STS -eq 2 ]; then
 echo " - STATUS: "`eval $NAMELL`" esta apagada"
 elif [ $STS -eq 3 ]; then
 echo " - STATUS: "`eval $NAMELL`" esta ejecutandose"
 fi
 done
 for i in `seq 1 $VBX_LIN_TOTAL`; do
 NAMEL="VBX_LIN_NAME$i"; NAMELL='eval "echo \$$NAMEL"'
 checkStatusVms "`eval $NAMELL`"
 STS=$?
 if [ $STS -eq 1 ]; then
 echo " - STATUS: "`eval $NAMELL`" esta guardada"
 elif [ $STS -eq 2 ]; then
 echo " - STATUS: "`eval $NAMELL`" esta apagada"
 elif [ $STS -eq 3 ]; then
 echo " - STATUS: "`eval $NAMELL`" esta ejecutandose"
 fi
 done
 echo ''
}

setEnvVar
echo ''
echo '#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*'
echo '* Script de Arranque y Apagado de Maquinas Virtuales (VMs) #'
echo '#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*'
echo ''
case $1 in
 start)
 echo '*** Iniciando VMs, espere a que inicien los sistemas ***'
 startLinux
 startWindows
 ;;
 stop)
 echo '*** Deteniendo VMs, espere a que terminen de apagar los sistemas ***'
 stopLinux
 stopWindows
 ## si no se apago la VM se guarda su estado para proteccion del filesystem
 checkVmRunning
 STS=$?
 if [ $STS -ne 0 ]; then
 saveWindows
 saveLinux
 elif [ $STS -eq 0 ]; then echo ''; echo " - Todas las VMs Apagadas"; echo ''
 fi
 ;;
 status)
 statusVm
 ;;
 restart)
 $0 stop; $0 start
 ;;
 *)
 echo ''; echo "Modo de Uso: $0 {start|stop|status|restart}"; echo ''
 ;;
esac

###### NO MODIFICAR ###### NO MODIFICAR ###### NO MODIFICAR ####



En las variables a modificar especificaremos datos como nombre de las maquinas virtuales, usuario con el que se ejecuta Virtualbox, tiempo máximo de espera para el apagado de una maquina virtual.
Leer más...

Script Bash para Gestionar Servicios

d
Autor: @danielmichele

Fuente: danieldemichele.com.ar
Descripción :
Las operaciones de control a realizar antes de ejecutar el comando  2:
1) El script debía verificar que quien lo ejecutara fuera Root, de otro modo a rootearse.
2) Además, necesitaba verificar que el servicio pasado como primer flag fuese un archivo existente de hecho en /etc/init.d/

Nota: Para correr se debe de hacer lo siguiente services mysql restart
#!/bin/bash
# Tiny scripts to make your life a bit easier by carp (www.danieldemichele.com.ar)

# Only allow to run script if Root
if [[ $EUID -ne 0 ]];
   then
   echo "Permisos insuficientes. Corra este script como Root!" 1>&2
   exit 1
   
   else
   
        #Check if service exists
        if [ -f /etc/init.d/$1 ]
        then
        # We do have a service, lets shoot the Flag (System will give valid options if bad Flag):
        exec  /etc/init.d/$1 $2 
        
        else
        # No Service at init.d, return error ...
        echo "El servicio "$1" no existe en /etc/init.d/";
        fi

fi

Aqui pueden ver el script realizado en Perl.
Leer más...

Script Perl para Gestionar Servicios

d
Autor: @danielmichele

Fuente: danieldemichele.com.ar

Descripcion:
Las operaciones de control a realizar antes de ejecutar el comando  2:
1) El script debía verificar que quien lo ejecutara fuera Root, de otro modo a rootearse.
2) Además, necesitaba verificar que el servicio pasado como primer flag fuese un archivo existente de hecho en /etc/init.d/

Nota: Pa correr se debe de hacer lo siguiente services mysql restart
#!/usr/bin/perl
# Tiny scripts to make your life a bit easier by carp (www.danieldemichele.com.ar)

# Get Flags:
$service = $ARGV[0];
$task = $ARGV[1];

# Only allow to run script if Root
if ( $< == 0 ){

#Check if service exists
$requested_service = '/etc/init.d/'.$service;

    if(!(-e $requested_service)){
    # No Service at init.d, return error ...
    print "El servicio ".$service." no existe en /etc/init.d/\n";
    }else{
    # We do have a service, lets shoot the Flag (System will give valid options if bad Flag):
    system "/etc/init.d/".$service." ".$task;
    }

}else{
# No Root? =(
print "Permisos insuficientes. Corra este script como Root!.\n";  
}

Script realizado en Bash pueden verlo aqui
Leer más...

Script para monitorear el uso de disco duro

d
Autor: @Desconocio
Descripción: Sencillo script de Bash que monitorea el espacio utilizado en discos duros, y envia una advertencia via correo electronico con información del espacio utlizado en todos los discos o particiones montados en el sistema.


#!/bin/bash
ADMIN="admin@geekscripting.com" 
# Nivel de alarma al 70% 
ALERT=70 
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output; 
do 
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 ) 
partition=$(echo $output | awk '{ print $2 }' ) 
if [ $usep -ge $ALERT ]; then 
echo "Poco espacio en "$partition ($usep%)" en $(hostname) en el dia  $(date)" >> alerta-disco-$(date +%d-%m-%y)-$ALERT.txt 
cat alerta-disco-$(date +%d-%m-%y)-$ALERT.txt | mail -s "Alerta de poco esapcio en disco en $(hostname)" $ADMIN 
fi 
done
Leer más...

FlashDownloader Descargar Videos desde la Terminal

d
Autor: @Kodeinfect
 Descripción: Script que permite, descargar videos Flash desde la consola
Fuente: Kode-L4bs
#!/bin/bash            
# FlashVideo Downloader
# Code By Kypzkore Kodeinfect
# http://kode-labs.blogspot.com
lsof | grep '/tmp/Flash[^ ]*' | awk '{ print "/proc/" $2 "/fd/" $4 }' | sed 's/[rwu]$//'

Se le da permisos de Ejución
chmod +x flashvids.sh

Se le agrega un alias en el bashrc
alias flashtmp='sh /home/use/flashvids.sh'

Luego se lo llama como flashtmp o el alias que dimos, nos dara un codigo, el cual procedemos a copiar
cp /proc/7254/fd/32 /media/geek/Videos
Leer más...

Script Traductor de texto

d
Autor: @Soyfacus
Descripción: Traducto de texto en cualquier idioma
Fuente Soyfacus

#!/usr/bin/env bash
progname=$(basename $0)

if [ -z "$2" ]
then
echo -e "Usage: $progname idiomaDestino 'palabras a traducir...'"
echo -e "Example: $progname en 'Hola como!'\n"
exit
fi

TO="$1"
shift 1

# Google Translate Ajax API Url
TRANSURL='http://ajax.googleapis.com/ajax/services/language/translate?v=1.0'

# Parse string to translate, change ' ' to '+'
# STRING: String to translate.
STRING="$@"
PSTRING=$(echo "$STRING" |tr ' ' '+')
DETECT='http://ajax.googleapis.com/ajax/services/language/detect?v=1.0'
RESPONSE_DETECT=$(/usr/bin/env curl -s -A Mozilla $DETECT'&q='$PSTRING)
FROM=$(echo "$RESPONSE_DETECT" | cut -d ':' -f 3 |cut -d ',' -f 1 | sed -s "s/^\([\"']\)\(.*\)\1\$/\2/g")

LANGPAIR="$FROM|$TO"
# Get translation
RESPONSE=$(/usr/bin/env curl -s -A Mozilla \
$TRANSURL'&langpair='$LANGPAIR'&q='$PSTRING)

echo -n "$progname> "
# Parse and clean response, to show only translation.
echo "$RESPONSE" |cut -d ':' -f 3 |cut -d '}' -f 1
Modo de Uso
gtranslate en hola mundo
Leer más...

Eliminar Virus en dispositivos USB desde GNU/Linux

d
Autor: @epsilon77
Descripcion: Script que permite borrar una memoria de los molestos virus, del amigo WIndows

  •  *.com 
  • *.bat 
  • Carpeta recycler 
  • Autorun 
  • Y algunos .exe 

Fuente:RinconInformatico

##############################
#             Matavirus           #
#autor: epsilon77                 #
#epsilon77@gmail.com              #
#http://www.RinconInformatico.net #
###################################
#!/bin/bash
echo “Bienvenido a MataVirus”
echo “La memoria que desea analizar es: ”
ls /media/|grep -v cdrom
bandera=0
read -p “si o no?” respuesta
if [ "$respuesta" = "si" ];then
memoria=$(ls /media|grep -v cdrom)
cd /media/$memoria
else
read -p  “por favor digite el nombre de la memoria: ” memoria
cd /media/
if [ -d $memoria ];then
cd /media/$memoria
else
echo “La memoria no esta montada”
bandera=1
fi
fi
if [ $bandera -eq 0 ];then
echo “eliminando virus y bichos raros….”
cd /media/$memoria
echo “Escaneando la raiz del dispositivo”
rm -rifv *.com
rm -rifv recycler
rm -rifv *.bat
rm -rifv [Aa]utorun.inf
for j in *
do
if [ -d "$j" ] ; then
cd “$j”
echo “Escaneando el directorio $j”
rm -rifv *.com
rm -rifv recycler
rm -rifv *.bat
rm -rifv [Aa]utorun.inf
cd ..
fi
done
echo “Virus borrados de forma correcta”
echo “Se ha terminado el proceso”
echo “hasta pronto”
fi
Leer más...

CLI Twitter Search

d
Autor: @hecky


Descripción: Script Creado en Bash que al ejecutarlo permite hacer uso del buscador de Twitter desde la comodidad de tu consola.

Algunos acentos no se muestran correctamente por la decodificación del UNICODE. Puede hacer una búsqueda máxima de 1500 tweets por consulta,en promedio Cada 10 segundos.

Fuente: http://Neobits.org



 Para la ejecución se necesita:


  • curl
  • php 
  • uni2ascii


#CLI Twitter Search
#@hecky hecky@neobits.org
#http://Neobits.org
clear && echo -n "Ingresa Palabra a buscar en Twitter.com: " && read parametro && echo "" && for tweet in {1..15};do curl search.twitter.com/search.json?q=$parametro\&rpp=100\&lang=es\&page=$tweet 2> /dev/null | grep text | php -r 'error_reporting(0); $c=""; $a=file_get_contents("php://STDIN"); for($i=100;$i>=1;$i--){$b=explode("text\":\"",$a); $c=explode("\",\"to_user",$b[$i]); echo html_entity_decode($c[0]).((strlen($c[0]) > 2) ? "\n" : "");}';done | nl | ascii2uni -q -a U | php -r 'echo stripslashes(file_get_contents("php://STDIN"));'


Leer más...

Firewall Básico

d
Autor y correo: sergio.gonzalez.duran[at]gmail.com
Descripción: firewall para un solo equipo conectado a traves de modem o adsl
Visto en Linux Total
#!/bin/bash

# ---------------------------------------------------------------------------------
# www.linuxtotal.com.mx
# firewall para un solo equipo conectado a traves de modem o adsl
# por: sergio.gonzalez.duran@gmail.com

# (1) se eliminan reglas previas que hubiera y cadenas definidas por el usuario
/sbin/iptables -F
/sbin/iptables -X

# (2) se establecen politicas "duras" por defecto, es decir solo lo que se autorice
# explicitamente podra ingresar o salir del equipo
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP

# (3)a la interface lo (localhost) se le permite todo
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

# (4) evitamos ataques syn-flood limitando el acceso de paquetes nuevos
# desde internet a solo 4 por segundo y los demas se descartan
/sbin/iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j DROP

# (5) se evitan paquetes tcp que sean nuevos y que no tengan el flag SYN
# es decir, hay ataques o escaneos que llegan como conexiones nuevas
# pero sin ser paquetes syn, definitivamente no nos interesan
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# (6) todo lo que sea icmp (ping) y que intente entrar, se descarta
# con esto bloqueamos cualquier tipo de paquetes con protocolo icmp
# evitando ataques como el del ping de la muerte, aunque esta regla
# podria provocar problemas de comunicacion con algunos ISP.
iptables -A INPUT -p icmp -j DROP

# (7) por ultimo las dos siguientes reglas permiten salir del equipo 
# (output) conexiones nuevas que nosotros solicitamos, conexiones establecidas
# y conexiones relacionadas, y deja entrar (input) solo conexiones establecidas
# y relacionadas.
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# ---------------------------------------------------------------------------------
Damos permisos de ejecución 
chmod +x firewall.bash
Levantamos el firewall
./firewall.bash
Confirmamos que que el firewall esté arriba
iptables --list
Guardamos las reglas para que estén presentes cada que inicie el sistema.
iptables-save > /etc/firewall.conf
echo "#!/bin/sh" > /etc/network/if-up.d/iptables
echo "iptables-restore < /etc/firewall.conf" >> /etc/network/if-up.d/iptables
chmod +x /etc/network/if-up.d/iptables
Leer más...

[Script - Bash]Convert Video to Avi

d
Autor: @Inameiname
Descripción: Script que realiza la conversion de videos MKV, VOB, MPEG, AVI, WMV etc a Avi

Requisitos para que el script funcione correctamente.


  •  lsdvd 
  •  mplayer
  •  mencoder


El script es un poco grande, como siembre dar permisos, y ejecutarlo GeekScripting@GeekScripting:~/./ConversorAvi.sh.


#!/bin/bash

# Video To Avi
# Created: Inameiname
# Version: 3.2

######################################################################################################################################################
###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ###### OPEN IN TERMINAL ######
######################################################################################################################################################

##################################################
# Run in the terminal on double-click   #
##################################################

tty -s; if [ $? -ne 0 ] ; then gnome-terminal -e "$0"; exit; fi

##################################################
# If it doesn't run in the terminal on    #
# double-click, say so     #
##################################################

[ -t 0 ] && [ -t 1 ] || { zenity --warning --text="${0}: this script must be run from a terminal." ; exit 1 ;}

######################################################################################################################################################
###### INPUT SOURCE VIDEO2AVI STUFF ###### INPUT SOURCE VIDEO2AVI STUFF ###### INPUT SOURCE VIDEO2AVI STUFF ###### INPUT SOURCE VIDEO2AVI STUFF ######
######################################################################################################################################################
##################################################
# Check whether environment variables are empty  #
##################################################

###### see if the Nautilus environment variable is empty

# if it exists, set it equal to 'INPUT_FILE'
for ARCHIVE_FULLPATH in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
    ARCHIVE_PATH=${ARCHIVE_FULLPATH%.*}
if [ -f $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ] ; then

# if select iso file:
if [ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS = $ARCHIVE_PATH.iso ] ; then
# to get desired title on dvd
# requires lsdvd: sudo apt-get install lsdvd
lsdvd $ARCHIVE_PATH.iso

echo -n "Please enter the title number you will convert (usually the longest one):

Press 'Enter' for default (default is '1')...

"
read TITLE

# extra blank space
echo "
"

# default
if [[ -z $TITLE ]] ; then
# If no title passed, default to 1
    TITLE=1
fi

    INPUT_FILE="dvd://$TITLE -dvd-device $ARCHIVE_PATH.iso"
fi



# if select video file:
if [ $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS != $ARCHIVE_PATH.iso ] ; then
    INPUT_FILE=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
fi

fi

done

# if it's blank, set it equal to $1
if [ -z $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ] ; then
    # If it's blank, set it equal to $1
    NAUTILUS_SCRIPT_SELECTED_FILE_PATHS=$1

###### see if the '$1' variable is empty
# if it exists, set it equal to 'INPUT_FILE'
for ARCHIVE_FULLPATH in $1; do
    ARCHIVE_PATH=${ARCHIVE_FULLPATH%.*}
if [ -f $1 ] ; then

# if select iso file:
if [ $1 = $ARCHIVE_PATH.iso ] ; then
# to get desired title on dvd
# requires lsdvd: sudo apt-get install lsdvd
lsdvd $ARCHIVE_PATH.iso

echo -n "Please enter the title number you will convert (usually the longest one):

Press 'Enter' for default (default is '1')...

"
read TITLE

# extra blank space
echo "
"

# default
if [[ -z $TITLE ]] ; then
# If no title passed, default to 1
    TITLE=1
fi

    INPUT_FILE="dvd://$TITLE -dvd-device $ARCHIVE_PATH.iso"
fi

# if select video file:
if [ $1 != $ARCHIVE_PATH.iso ] ; then
    INPUT_FILE=$1
fi

fi

done



# if it's blank, do the following:
if [ -z "$1" ] ; then



##################################################
# Input DVD/ISO/VIDEO file menu    #
##################################################

echo -n "What do you want to convert to AVI?:

(1) DVD
(2) ISO file
(3) Video file (such as MKV, VOB, MPEG, AVI, WMV, and etc.)

Press 'Enter' for default (default is '1')...

"
read TYPE

# extra blank space
echo "
"

###### Input DVD/ISO/VIDEO source default ######

if [[ -z $TYPE ]] ; then
    # If no media passed, default to 1
    TYPE=1
fi

###### Input DVD/ISO/VIDEO source ######
###### DVD to AVI
if [[ $TYPE = 1 ]] ; then

# to get desired device
df -h -x tmpfs -x usbfs

echo -n "Please enter the appropriate DVD drive:

(1) /dev/dvd
(2) /dev/sr0
(3) /dev/sr1
(4) /dev/sr2
(5) custom

Press 'Enter' for default (default is '1')...

"
read DEVICE_NUMBER

# extra blank space
echo "
"

# default
if [[ -z $DEVICE_NUMBER ]] ; then
# If no device passed, default to /dev/dvd
    DEVICE=/dev/dvd
fi
# preset
if [[ $DEVICE_NUMBER = 1 ]] ; then
    DEVICE=/dev/dvd
fi
if [[ $DEVICE_NUMBER = 2 ]] ; then
    DEVICE=/dev/sr0
fi
if [[ $DEVICE_NUMBER = 3 ]] ; then
    DEVICE=/dev/sr1
fi
if [[ $DEVICE_NUMBER = 4 ]] ; then
    DEVICE=/dev/sr2
fi
# custom
if [[ $DEVICE_NUMBER = 5 ]] ; then
    echo -n "Please enter the appropriate DVD drive:  "
    echo -n "...like this: '/dev/dvd'..."
    read CUSTOM_DEVICE
    DEVICE=$CUSTOM_DEVICE
fi

# to get desired title on dvd
# requires lsdvd: sudo apt-get install lsdvd
lsdvd $DEVICE

echo -n "Please enter the title number you will convert (usually the longest one):

Press 'Enter' for default (default is '1')...

"
read TITLE

# extra blank space
echo "
"

# default
if [[ -z $TITLE ]] ; then
# If no title passed, default to 1
TITLE=1
fi

# to decide to copy straight from the DVD or first copy to hard drive to ISO
echo -n "Would you first like to copy the DVD onto your hard drive (to ISO)?:

(1) Yes (Highly Recommended)
(2) No

Press 'Enter' for default (default is '1')...

"
read DVD2ISO

# extra blank space
echo "
"

# default
if [[ -z $DVD2ISO ]] ; then
# If no DVD2ISO passed, default to 1
dd if=$DEVICE of=NEW.iso
INPUT_FILE="dvd://$TITLE -dvd-device NEW.iso"
fi
# preset
if [[ $DVD2ISO = 1 ]] ; then
dd if=$DEVICE of=NEW.iso
INPUT_FILE="dvd://$TITLE -dvd-device NEW.iso"
fi
if [[ $DVD2ISO = 2 ]] ; then
INPUT_FILE="dvd://$TITLE -dvd-device $DEVICE"
fi

fi

###### ISO to AVI
if [[ $TYPE = 2 ]] ; then

echo -n "Please enter the full path for the ISO:

Example: /home/(your username)/Videos/NEW.iso...

"
read ISO

# extra blank space
echo "
"

# to get desired title on dvd
# requires lsdvd: sudo apt-get install lsdvd
lsdvd $ISO

echo -n "Please enter the title number you will convert (usually the longest one):

Press 'Enter' for default (default is '1')...

"
read TITLE

# extra blank space
echo "
"

# default
if [[ -z $TITLE ]] ; then
# If no title passed, default to 1
TITLE=1
fi

INPUT_FILE="dvd://$TITLE -dvd-device $ISO"
fi

###### Video to AVI
if [[ $TYPE = 3 ]] ; then

echo -n "Please enter the name for the input file (full path, with extension):

It can be any type, such as MKV, VOB, MPEG, AVI, WMV, and etc...

Example: /home/(your username)/Videos/NEW.avi...

"
read VIDEO_FILE

# extra blank space
echo "
"

INPUT_FILE=$VIDEO_FILE
fi

##################################################
# Close the variable statements    #
##################################################

fi

fi

######################################################################################################################################################
###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF ###### GENERAL VIDEO2AVI STUFF
######################################################################################################################################################

##################################################
# Cropping (done automatically)    #
##################################################

###### start a timer to kill mplayer
echo "Cropdetect is now running...

A few seconds of your video should now be playing...
"
###### start a timer to kill mplayer
(sleep 6 && killall mplayer)&

###### start the mplayer cropdetect on on the DVD at a random time
mplayer $INPUT_FILE -ss 0:03:10 -vf cropdetect &> mplayer.tmp

###### get last crop value from mplayer output and store in variable
CROP_VALUES=$(awk -F'crop=' '/\[CROP\]/{f=$2} END{print f}' ./mplayer.tmp |cut -d')' -f1)

###### print detected crop values
echo -e "\n\nDetected crop values = ${CROP_VALUES}\n\n"

##################################################
# Output desired name for file    #
##################################################

###### file input
echo -n "Please enter a name for the output file (without extension):

Press 'Enter' for default (default is 'NEW')...

"
read OUTPUT_FILE

###### extra blank space
echo "
"
###### default ######

if [[ -z $OUTPUT_FILE ]] ; then
    # If no file passed, default to NEW
    OUTPUT_FILE=NEW_$(date "+%y.%m.%d_%H.%M")
fi

##################################################
# Available processor number (done automatically)#
##################################################

CPUS=$(grep -c processor /proc/cpuinfo)

echo "Using $CPUS processor(s)..."

###### extra blank space
echo "
"

######################################################################################################################################################
###### MAIN MENU OPTIONS AND CHOICES ###### MAIN MENU OPTIONS AND CHOICES ###### MAIN MENU OPTIONS AND CHOICES ###### MAIN MENU OPTIONS AND CHOICES ######
######################################################################################################################################################
##################################################
# Preset/Custom type options    #
##################################################

echo -n "Select a quality level:
(1) exact copy quality MPEG      (DVD/ISO sources only)
(2) exact copy audio-only quality AC3     (DVD/ISO sources only)
(3) very high quality H.264 (2-pass)     (350min:105min film w/2 1.5mhz cpus)
(4) very high quality DIVX/MPEG-4 (2-pass)  (270min:105min film w/2 1.5mhz cpus)
(5) very high quality XVID (2-pass)     (220min:105min film w/2 1.5mhz cpus)
(6) very high quality H.264 (1-pass)     (400min:105min film w/2 1.5mhz cpus)
(7) very high quality DIVX/MPEG-4 (1-pass)  (230min:105min film w/2 1.5mhz cpus)
(8) very high quality XVID (1-pass)     (180min:105min film w/2 1.5mhz cpus)
(9) high quality H.264 (2-pass)      (240min:105min film w/2 1.5mhz cpus)
(10)high quality DIVX/MPEG-4 (2-pass)     (190min:105min film w/2 1.5mhz cpus)
(11)high quality XVID (2-pass)      (135min:105min film w/2 1.5mhz cpus)
(12)high quality H.264 (1-pass)           (200min:105min film w/2 1.5mhz cpus)
(13)high quality DIVX/MPEG-4 (1-pass)     (150min:105min film w/2 1.5mhz cpus)
(14)high quality XVID (1-pass)      (090min:105min film w/2 1.5mhz cpus)
(15)fast quality H.264 (1-pass)           (155min:105min film w/2 1.5mhz cpus)
(16)fast quality DIVX/MPEG-4 (1-pass)     (065min:105min film w/2 1.5mhz cpus)
(17)fast quality XVID (1-pass)      (065min:105min film w/2 1.5mhz cpus)
(18)fast quality XVID YouTube (1-pass)     (025min:105min film w/2 1.5mhz cpus)
(19)realtime quality DIVX/MPEG-4 (1-pass)   (050min:105min film w/2 1.5mhz cpus)
(20)realtime quality XVID (1-pass)     (060min:105min film w/2 1.5mhz cpus)
(21)low quality WMV (1-pass)      (017min:105min film w/2 1.5mhz cpus)
(22)custom quality
Press 'Enter' for default (default is '14')...  "
read Q

###### extra blank space
echo "
"
###### default ######

if [[ -z $Q ]] ; then
    # If no quality passed, default to 14
    Q=14
fi

##################################################
# Frame rate      #
##################################################

###### frame rate menu
if [[ $Q != 1 && $Q != 2 ]] ; then
echo -n "Select a frame rate level:

(1) NTSC-VIDEO  (~ 30 fps)
(2) NTSC-FILM (~ 24 fps)
(3) PAL  (~ 25 fps)
(4) Streaming (~ 15 fps)
(5) custom

Press 'Enter' for default (default is '2')...

"
read FRAME_RATE_NUMBER

###### extra blank space
echo "
"
###### default
if [[ -z $FRAME_RATE_NUMBER ]] ; then
    # If no frame rate passed, default to 2
    FRAME_RATE="-ofps 24000/1001"
fi

###### preset
if [[ $FRAME_RATE_NUMBER = 1 ]] ; then
    FRAME_RATE="-ofps 30000/1001"
fi

if [[ $FRAME_RATE_NUMBER = 2 ]] ; then
    FRAME_RATE="-ofps 24000/1001"
fi

if [[ $FRAME_RATE_NUMBER = 3 ]] ; then
    FRAME_RATE="-ofps 25000/1001"
fi

if [[ $FRAME_RATE_NUMBER = 4 ]] ; then
    FRAME_RATE="-ofps 15000/1001"
fi

###### custom
if [[ $FRAME_RATE_NUMBER = 5 ]] ; then
    echo -n "Please enter a frame rate:  "
    echo -n "...like this: '-ofps 15000/1001'..."
    read CUSTOM_FRAME_RATE
    FRAME_RATE=$CUSTOM_FRAME_RATE
fi

fi

##################################################
# Divx ffourcc menu     #
##################################################

###### DivX ffourcc menu
if [[ $Q != 1 && $Q != 2 && $Q != 3 && $Q != 5 && $Q != 6 && $Q != 8 && $Q != 9 && Q != 11 && $Q != 12 && $Q != 14 && $Q != 15 && $Q != 17 && $Q != 18 && $Q != 20 && $Q != 21 && $Q != 22 ]] ; then
echo -n "Select the desired Divx or generic MPEG4 quality:

(1) FFMPEG MPEG-4
(2) DivX MPEG-4 Version 4
(3) DivX MPEG-4 Version 5

Press 'Enter' for default (default is '3')...

"
read DIVX_NUMBER



###### extra blank space
echo "
"

###### default
if [[ -z $DIVX_NUMBER ]] ; then
    # If no file passed, default to 3
    DIVX="-ffourcc DX50"
fi

###### preset
if [[ $DIVX_NUMBER = 1 ]] ; then
    DIVX=
fi

if [[ $DIVX_NUMBER = 2 ]] ; then
    DIVX="-ffourcc DIVX"
fi

if [[ $DIVX_NUMBER = 3 ]] ; then
    DIVX="-ffourcc DX50"
fi

fi

##################################################
# Conversion is starting    #
##################################################

###### conversion is starting message
if [[ $Q != 22 ]] ; then
read -sn 1 -p "Your conversion is about to begin, press any key to continue..."
fi

###### extra blank space
echo "
"

##################################################
# Conversions      #
##################################################

###### preset ######

###### exact copy quality (DVD/ISO sources only)
if [[ $Q = 1 ]] ; then
# If 1 passed, use MPEG exact copy quality
mplayer $INPUT_FILE -dumpstream -dumpfile $OUTPUT_FILE.mpg
fi

if [[ $Q = 2 ]] ; then
# If 2 passed, use MPEG exact copy audio-only quality
mplayer $INPUT_FILE -dumpaudio -dumpfile $OUTPUT_FILE.ac3
fi

###### very high quality
if [[ $Q = 3 ]] ; then
# very high H.264 quality (2-pass)
# actual two-pass conversion
mencoder $INPUT_FILE -nosound -ovc x264 -x264encopts pass=1:subq=1:partitions=all:8x8dct:me=umh:frameref=1:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=2000 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES} $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc x264 -x264encopts pass=2:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=2000 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 4 ]] ; then
# very high MPEG4 quality (2-pass)
# actual two-pass conversion
mencoder $INPUT_FILE -nosound -ovc lavc $DIVX -lavcopts vpass=1:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc lavc $DIVX -lavcopts vpass=2:vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vhq:threads=$CPUS:vbitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 5 ]] ; then
# very high XVID quality (2-pass)
# actual two-pass conversion
mencoder $INPUT_FILE -nosound -ovc xvid -xvidencopts pass=1:chroma_opt:vhq=1:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc xvid -xvidencopts pass=2:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 6 ]] ; then
# very high H.264 quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc x264 -x264encopts subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 7 ]] ; then
# very high MPEG4 quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vhq:threads=$CPUS:vbitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 8 ]] ; then
# very high XVID quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=192:vol=3 -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=2000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES} $FRAME_RATE -o $OUTPUT_FILE.avi
fi



###### high quality
if [[ $Q = 9 ]] ; then
# high H.264 quality (2-pass)
# actual two-pass conversion
mencoder $INPUT_FILE -nosound -ovc x264 -x264encopts pass=1:subq=1:partitions=all:8x8dct:me=umh:frameref=1:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=-700000 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc x264 -x264encopts pass=2:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=1200 -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 10 ]] ; then
# high MPEG4 quality (2-pass)
# actual two-pass conversion
mencoder $INPUT_FILE -nosound -ovc lavc $DIVX -lavcopts vpass=1:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vpass=2:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 11 ]] ; then
# high XVID quality (2-pass)
# actual two-pass conversion
mencoder $INPUT_FILE -nosound -ovc xvid -xvidencopts pass=1:vhq=1:bvhq=1:chroma_opt:quant_type=mpeg:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts pass=2:vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 12 ]] ; then
# high H.264 quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc x264 -x264encopts subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 13 ]] ; then
# high MPEG4 quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 14 ]] ; then
# high XVID quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

###### fast quality
if [[ $Q = 15 ]] ; then
# fast H.264 quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc x264 -x264encopts subq=4:8x8dct:bframes=2:b_pyramid=normal:weight_b:threads=auto:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 16 ]] ; then
# fast MPEG4 quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:trell:v4mv:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 17 ]] ; then
# fast XVID quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts turbo:vhq=0:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

###### YouTube quality
if [[ $Q = 18 ]] ; then
# YouTube MPEG4 quality (1-pass)
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:threads=$CPUS -ffourcc xvid -vf scale=320:-2,expand=:240:::1 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

###### realtime quality
if [[ $Q = 19 ]] ; then
# realtime MPEG4 quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc lavc $DIVX -lavcopts vcodec=mpeg4:mbd=2:turbo:vhq:threads=$CPUS:vbitrate=1100 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $Q = 20 ]] ; then
# realtime XVID quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts abr:br=128:vol=3 -ovc xvid -xvidencopts turbo:nochroma_me:notrellis:max_bframes=0:vhq=0:threads=$CPUS:bitrate=-700000 -vf pp=de,pullup,softskip,crop=${CROP_VALUES},scale -zoom -xy 624 $FRAME_RATE -o $OUTPUT_FILE.avi
fi

###### low quality
if [[ $Q = 21 ]] ; then
# low WMV quality (1-pass)
# actual one-pass conversion
mencoder $INPUT_FILE -oac mp3lame -lameopts cbr:br=16:vol=3 -ovc lavc -lavcopts vcodec=wmv2:vbitrate=100 -vf scale -zoom -xy 240 $FRAME_RATE -o $OUTPUT_FILE.wmv
fi

######################################################################################################################################################
###### CUSTOM QUALITY CHOICE #17 OPTION AND CHOICES ###### CUSTOM QUALITY CHOICE #17 OPTION AND CHOICES ###### MISCELLANEOUS ###### CUSTOM QUALITY CHOICE
######################################################################################################################################################

##################################################
# Custom quality     #
##################################################

if [[ $Q = 22 ]] ; then
# If 22 passed, use custom quality (1-pass and 2-pass)

##################################################
# Custom type options     #
##################################################

echo -n "What type of AVI do you want to create with custom settings?:

(1)  H.264  (2-Pass)
(2)  H.264  (1-Pass)
(3)  DIVX/MPEG-4 (2-Pass)
(4)  DIVX/MPEG-4 (1-Pass)
(5)  XVID  (2-Pass)
(6)  XVID  (1-Pass)

Press 'Enter' for default (default is '6')...

"
read MPEG4_TYPE

###### extra blank space
echo "
"

###### default ######

if [[ -z $MPEG4_TYPE ]] ; then
    # If no media passed, default to 6
    MPEG4_TYPE=6
fi
erlo
##################################################
# Custom Divx ffourcc menu    #
##################################################

###### DivX ffourcc menu
if [[ $MPEG4_TYPE != 1 && $MPEG4_TYPE != 2 && $MPEG4_TYPE != 5 && $MPEG4_TYPE != 6 ]] ; then
echo -n "Select the desired Divx or generic MPEG4 quality:

(1) FFMPEG MPEG-4
(2) DivX MPEG-4 Version 4
(3) DivX MPEG-4 Version 5

Press 'Enter' for default (default is '3')...

"
read CUSTOM_DIVX_NUMBER

###### extra blank space
echo "
"

###### default
if [[ -z $CUSTOM_DIVX_NUMBER ]] ; then
    # If no file passed, default to 3
    CUSTOM_DIVX="-ffourcc DX50"
fi

###### preset
if [[ $CUSTOM_DIVX_NUMBER = 1 ]] ; then
    CUSTOM_DIVX=
fi

if [[ $CUSTOM_DIVX_NUMBER = 2 ]] ; then
    CUSTOM_DIVX="-ffourcc DIVX"
fi

if [[ $CUSTOM_DIVX_NUMBER = 3 ]] ; then
    CUSTOM_DIVX="-ffourcc DX50"
fi

fi

##################################################
# Custom scaling     #
##################################################

echo -n "Choose a resolution:

(1)  original resolution(cropped, but no scaling)
(2)  624 x 352 scaling (fullscreen/widescreen)
(3)  624 x ??? scaling (fullscreen/widescreen) (auto-height)
(4)  800 x 600 scaling (fullscreen)
(5)  800 x ??? scaling (fullscreen)   (auto-height)
(6)  600 x 400 scaling (widescreen)
(7)  600 x ??? scaling (widescreen)   (auto-height)
(8)  640 x 480 scaling (fullscreen)
(9)  640 x ??? scaling (fullscreen)   (auto-height)
(10) 704 x 294 scaling (widescreen) (2.35:1)
(11) 704 x ??? scaling (widescreen) (2.35:1)  (auto-height)
(12) 768 x 432 scaling (widescreen) (16:9)
(13) 768 x ??? scaling (widescreen) (16:9)  (auto-height)
(14) custom

Press 'Enter' for default (default is '3')...

"
read SCALING_NUMBER

###### extra blank space
echo "
"

###### default
if [[ -z $SCALING_NUMBER ]] ; then
    # If no file passed, default to 3
    SCALING="scale -zoom -xy 624"
fi

###### preset
if [[ $SCALING_NUMBER = 1 ]] ; then
    SCALING="scale=${CROP_VALUES}"
fi

if [[ $SCALING_NUMBER = 2 ]] ; then
    SCALING="scale=624:352"
fi

if [[ $SCALING_NUMBER = 3 ]] ; then
    SCALING="scale -zoom -xy 624"
fi

if [[ $SCALING_NUMBER = 4 ]] ; then
    SCALING="scale=800:600"
fi

if [[ $SCALING_NUMBER = 5 ]] ; then
    SCALING="scale -zoom -xy 800"
fi

if [[ $SCALING_NUMBER = 6 ]] ; then
    SCALING="scale=600:400"
fi

if [[ $SCALING_NUMBER = 7 ]] ; then
    SCALING="scale -zoom -xy 600"
fi

if [[ $SCALING_NUMBER = 8 ]] ; then
    SCALING="scale=640:480"
fi

if [[ $SCALING_NUMBER = 9 ]] ; then
    SCALING="scale -zoom -xy 640"
fi

if [[ $SCALING_NUMBER = 10 ]] ; then
    SCALING="scale=704:294"
fi

if [[ $SCALING_NUMBER = 11 ]] ; then
    SCALING="sscale -zoom -xy 704"
fi

if [[ $SCALING_NUMBER = 12 ]] ; then
    SCALING="scale=768:432"
fi

if [[ $SCALING_NUMBER = 13 ]] ; then
    SCALING="scale -zoom -xy 768"
fi

###### custom
if [[ $SCALING_NUMBER = 14 ]] ; then
    echo -n "Please enter a custom scale:  "
    echo -n "...like this: 'scale=800:600' or 'scale -zoom -xy 624'..."
    read CUSTOM_SCALING
    SCALING=$CUSTOM_SCALING
fi

##################################################
# Custom total/video bitrate level   #
##################################################

echo -n "Select a total/video bitrate level:

(1)  -350000 (= max file size of ~ 350MB) (H.264/XVID only)
(2)  -700000 (= max file size of ~ 700MB) (H.264/XVID only)
(3)  -1000000 (= max file size of ~ 1GB) (H.264/XVID only)
(4)  400 kbps
(5)  600 kbps
(6)  800 kbps
(7)  1000 kbps
(8)  1100 kbps
(9)  1150 kbps
(10) 1200 kbps
(11) 1250 kbps
(12) 1500 kbps
(13) 2000 kbps
(14) 3000 kbps
(15) 4000 kbps
(16) 5000 kbps
(17) custom

Press 'Enter' for default (default is '2')...

"
read BITRATE_NUMBER

###### extra blank space
echo "
"

###### default
if [[ -z $BITRATE_NUMBER ]] ; then
    # If no file passed, default to 2
    BITRATE=-700000
fi

###### preset
if [[ $BITRATE_NUMBER = 1 ]] ; then
    BITRATE=-350000
fi

if [[ $BITRATE_NUMBER = 2 ]] ; then
    BITRATE=-700000
fi

if [[ $BITRATE_NUMBER = 3 ]] ; then
    BITRATE=-1000000
fi

if [[ $BITRATE_NUMBER = 4 ]] ; then
    BITRATE=400
fi

if [[ $BITRATE_NUMBER = 5 ]] ; then
    BITRATE=600
fi

if [[ $BITRATE_NUMBER = 6 ]] ; then
    BITRATE=800
fi

if [[ $BITRATE_NUMBER = 7 ]] ; then
    BITRATE=1000
fi

if [[ $BITRATE_NUMBER = 8 ]] ; then
    BITRATE=1100
fi

if [[ $BITRATE_NUMBER = 9 ]] ; then
    BITRATE=1150
fi

if [[ $BITRATE_NUMBER = 10 ]] ; then
    BITRATE=1200
fi

if [[ $BITRATE_NUMBER = 11 ]] ; then
    BITRATE=1250
fi

if [[ $BITRATE_NUMBER = 12 ]] ; then
    BITRATE=1500
fi

if [[ $BITRATE_NUMBER = 13 ]] ; then
    BITRATE=2000
fi

if [[ $BITRATE_NUMBER = 14 ]] ; then
    BITRATE=3000
fi

if [[ $BITRATE_NUMBER = 15 ]] ; then
    BITRATE=4000
fi

if [[ $BITRATE_NUMBER = 16 ]] ; then
    BITRATE=5000
fi

###### custom
if [[ $BITRATE_NUMBER = 17 ]] ; then
    echo -n "Please enter a custom total/video bitrate:  "
    echo -n "...like this: '1175'..."
    read CUSTOM_BITRATE
    BITRATE=$CUSTOM_BITRATE
fi

##################################################
# Custom audio track     #
##################################################

echo -n "Select an audio track:

(1) -aid 0 (good when getting no audio with others) (ex.: Custom DVD rips)
(2) -aid 127
(3) -aid 128 (often main language non-director's commentary audio track)
(4) -aid 129 (often second track, such as director's commentary)
(5) -aid 130
(6) -aid 131
(7) -aid 132
(8) -aid 160
(9) custom

Press 'Enter' for default (default is 'null', which is DVD default)...

"
read AUDIO_TRACK_NUMBER

###### extra blank space
echo "
"

###### default
if [[ -z $AUDIO_TRACK_NUMBER ]] ; then
    # If no file passed, default to null
    AUDIO_TRACK=
fi

###### preset
if [[ $AUDIO_TRACK_NUMBER = 1 ]] ; then
    AUDIO_TRACK="-aid 0"
fi

if [[ $AUDIO_TRACK_NUMBER = 2 ]] ; then
    AUDIO_TRACK="-aid 127"
fi

if [[ $AUDIO_TRACK_NUMBER = 3 ]] ; then
    AUDIO_TRACK="-aid 128"
fi

if [[ $AUDIO_TRACK_NUMBER = 4 ]] ; then
    AUDIO_TRACK="-aid 129"
fi

if [[ $AUDIO_TRACK_NUMBER = 5 ]] ; then
    AUDIO_TRACK="-aid 130"
fi

if [[ $AUDIO_TRACK_NUMBER = 6 ]] ; then
    AUDIO_TRACK="-aid 131"
fi

if [[ $AUDIO_TRACK_NUMBER = 7 ]] ; then
    AUDIO_TRACK="-aid 132"
fi

if [[ $AUDIO_TRACK_NUMBER = 8 ]] ; then
    AUDIO_TRACK="-aid 160"
fi

###### custom
if [[ $AUDIO_TRACK_NUMBER = 9 ]] ; then
    echo -n "Please enter a custom audio track:  "
    echo -n "...like this: '-aid 128'..."
    read CUSTOM_AUDIO_TRACK
    AUDIO_TRACK=$CUSTOM_AUDIO_TRACK
fi

##################################################
# Custom audio track language    #
##################################################

echo -n "Select an audio track language:

(1)  Chinese - zh
(2)  Dansk (Danish) - da
(3)  Deutsch - de
(4)  English - en
(5)  Español - es
(6)  Français - fr
(7)  Greek - el
(8)  Italiano (Italian) - it
(9)  Japanese - ja
(10) Korean - ko
(11) Nederlands - nl
(12) Polish - pl
(13) Portugues - pt
(14) Russian - ru

Or input your own (like this: 'en')...

Press 'Enter' for default (default is 'null', which is DVD default)...

"
read AUDIO_LANGUAGE_NUMBER

###### extra blank space
echo "
"

###### default
if [[ -z $AUDIO_LANGUAGE_NUMBER ]] ; then
    # If no file passed, default to null
    AUDIO_LANGUAGE=
fi

###### preset
if [[ $AUDIO_LANGUAGE_NUMBER = 1 ]] ; then
    AUDIO_LANGUAGE="-alang zh"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 2 ]] ; then
    AUDIO_LANGUAGE="-alang da"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 3 ]] ; then
    AUDIO_LANGUAGE="-alang de"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 4 ]] ; then
    AUDIO_LANGUAGE="-alang en"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 5 ]] ; then
    AUDIO_LANGUAGE="-alang es"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 6 ]] ; then
    AUDIO_LANGUAGE="-alang fr"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 7 ]] ; then
    AUDIO_LANGUAGE="-alang el"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 8 ]] ; then
    AUDIO_LANGUAGE="-alang it"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 9 ]] ; then
    AUDIO_LANGUAGE="-alang ja"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 10 ]] ; then
    AUDIO_LANGUAGE="-alang ko"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 11 ]] ; then
    AUDIO_LANGUAGE="-alang nl"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 12 ]] ; then
    AUDIO_LANGUAGE="-alang pl"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 13 ]] ; then
    AUDIO_LANGUAGE="-alang pt"
fi

if [[ $AUDIO_LANGUAGE_NUMBER = 14 ]] ; then
    AUDIO_LANGUAGE="-alang ru"
fi

##################################################
# Custom audio bitrate level    #
##################################################

echo -n "Select an audio bitrate level:

(1) 48 kbps
(2) 64 kbps
(3) 128 kbps
(4) 160 kbps
(5) 192 kbps
(6) 224 kbps
(7) 256 kbps
(8) 320 kbps
(9) custom

Press 'Enter' for default (default is '3')...

"
read AUDIO_BITRATE_NUMBER

###### extra blank space
echo "
"

###### default
if [[ -z $AUDIO_BITRATE_NUMBER ]] ; then
    # If no file passed, default to 3
    AUDIO_BITRATE=128
fi



###### preset
if [[ $AUDIO_BITRATE_NUMBER = 1 ]] ; then
    AUDIO_BITRATE=48
fi

if [[ $AUDIO_BITRATE_NUMBER = 2 ]] ; then
    AUDIO_BITRATE=96
fi

if [[ $AUDIO_BITRATE_NUMBER = 3 ]] ; then
    AUDIO_BITRATE=128
fi

if [[ $AUDIO_BITRATE_NUMBER = 4 ]] ; then
    AUDIO_BITRATE=160
fi

if [[ $AUDIO_BITRATE_NUMBER = 5 ]] ; then
    AUDIO_BITRATE=192
fi

if [[ $AUDIO_BITRATE_NUMBER = 6 ]] ; then
    AUDIO_BITRATE=224
fi

if [[ $AUDIO_BITRATE_NUMBER = 7 ]] ; then
    AUDIO_BITRATE=256
fi

if [[ $AUDIO_BITRATE_NUMBER = 8 ]] ; then
    AUDIO_BITRATE=320
fi



###### custom
if [[ $AUDIO_BITRATE_NUMBER = 9 ]] ; then
    echo -n "Please enter a custom audio bitrate level:  "
    echo -n "...like this: '100'..."
    read CUSTOM_AUDIO_BITRATE
    AUDIO_BITRATE=$CUSTOM_AUDIO_BITRATE
fi



##################################################
# Custom audio bitrate type    #
##################################################

echo -n "Select an audio bitrate type:

(1) Average Bitrate
(2) Constant Bitrate
(3) Variable Bitrate

Press 'Enter' for default (default is '1')...

"
read AUDIO_BITRATE_TYPE_NUMBER



###### extra blank space
echo "
"



###### default
if [[ -z $AUDIO_BITRATE_TYPE_NUMBER ]] ; then
    # If no file passed, default to abr
    AUDIO_BITRATE_TYPE=abr
fi



###### preset
if [[ $AUDIO_BITRATE_TYPE_NUMBER = 1 ]] ; then
    AUDIO_BITRATE_TYPE=abr
fi

if [[ $AUDIO_BITRATE_TYPE_NUMBER = 2 ]] ; then
    AUDIO_BITRATE_TYPE=cbr
fi

if [[ $AUDIO_BITRATE_TYPE_NUMBER = 3 ]] ; then
    AUDIO_BITRATE_TYPE=vbr
fi



##################################################
# Custom audio volume level    #
##################################################

echo -n "Select an audio volume increase level (1-10):

Press 'Enter' for default (default is '3')...

"
read AUDIO_VOLUME_LEVEL



###### extra blank space
echo "
"



###### default
if [[ -z $AUDIO_VOLUME_LEVEL ]] ; then
    # If no file passed, default to 3
    AUDIO_VOLUME_LEVEL=3
fi



##################################################
# Subtitles?      #
##################################################

echo -n "Do you want subtitles?:

(1) No
(2) Yes (DVD/ISO only)

Press 'Enter' for default (default is '1', for no subtitles)...

"
read SUBTITLE_NUMBER



###### extra blank space
echo "
"



###### default
if [[ -z $SUBTITLE_NUMBER ]] ; then
    # If no file passed, default to null
    SUBTITLE_TRACK=
    SUBTITLE_LANGUAGE=
    SUBTITLE_TYPE=
fi



###### preset
if [[ $SUBTITLE_NUMBER = 1 ]] ; then
    SUBTITLE_TRACK=
    SUBTITLE_LANGUAGE=
    SUBTITLE_TYPE=
fi

if [[ $SUBTITLE_NUMBER = 2 ]] ; then



##################################################
# Custom subtitle track     #
##################################################

echo -n "Select a subtitle track:

(1) -sid 0
(2) -sid 1
(3) -sid 2
(4) -sid 3
(5) -sid 4
(6) -sid 5
(7) -sid 6
(8) -sid 7
(9) custom

Press 'Enter' for default (default is 'null')...

"
read SUBTITLE_TRACK_NUMBER



###### extra blank space
echo "
"



###### default
if [[ -z $SUBTITLE_TRACK_NUMBER ]] ; then
    # If no file passed, default to null
    SUBTITLE_TRACK=
fi



###### preset
if [[ $SUBTITLE_TRACK_NUMBER = 1 ]] ; then
    SUBTITLE_TRACK="-sid 0"
fi

if [[ $SUBTITLE_TRACK_NUMBER = 2 ]] ; then
    SUBTITLE_TRACK="-sid 1"
fi

if [[ $SUBTITLE_TRACK_NUMBER = 3 ]] ; then
    SUBTITLE_TRACK="-sid 2"
fi

if [[ $SUBTITLE_TRACK_NUMBER = 4 ]] ; then
    SUBTITLE_TRACK="-sid 3"
fi

if [[ $SUBTITLE_TRACK_NUMBER = 5 ]] ; then
    SUBTITLE_TRACK="-sid 4"
fi

if [[ $SUBTITLE_TRACK_NUMBER = 6 ]] ; then
    SUBTITLE_TRACK="-sid 5"
fi

if [[ $SUBTITLE_TRACK_NUMBER = 7 ]] ; then
    SUBTITLE_TRACK="-sid 6"
fi

if [[ $SUBTITLE_TRACK_NUMBER = 8 ]] ; then
    SUBTITLE_TRACK="-sid 7"
fi



###### custom
if [[ $SUBTITLE_TRACK_NUMBER = 9 ]] ; then
    echo -n "Please enter a custom subtitles track:  "
    echo -n "...like this: '-sid 10'..."
    read CUSTOM_SUBTITLE_TRACK
    SUBTITLE_TRACK=$CUSTOM_SUBTITLE_TRACK
fi



##################################################
# Custom subtitles track language   #
##################################################

echo -n "Select a subtitles track language:

(1)  Chinese - zh
(2)  Dansk (Danish) - da
(3)  Deutsch - de
(4)  English - en
(5)  Español - es
(6)  Français - fr
(7)  Greek - el
(8)  Italiano (Italian) - it
(9)  Japanese - ja
(10) Korean - ko
(11) Nederlands - nl
(12) Polish - pl
(13) Portugues - pt
(14) Russian - ru

Or input your own (like this: 'en')...

Press 'Enter' for default (default is 'null')...

"
read SUBTITLE_LANGUAGE_NUMBER



###### extra blank space
echo "
"



###### default
if [[ -z $SUBTITLE_LANGUAGE_NUMBER ]] ; then
    # If no file passed, default to null
    SUBTITLE_LANGUAGE=
fi



###### preset
if [[ $SUBTITLE_LANGUAGE_NUMBER = 1 ]] ; then
    SUBTITLE_LANGUAGE="-slang zh"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 2 ]] ; then
    SUBTITLE_LANGUAGE="-slang da"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 3 ]] ; then
    SUBTITLE_LANGUAGE="-slang de"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 4 ]] ; then
    SUBTITLE_LANGUAGE="-slang en"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 5 ]] ; then
    SUBTITLE_LANGUAGE="-slang es"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 6 ]] ; then
    SUBTITLE_LANGUAGE="-slang fr"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 7 ]] ; then
    SUBTITLE_LANGUAGE="-slang el"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 8 ]] ; then
    SUBTITLE_LANGUAGE="-slang it"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 9 ]] ; then
    SUBTITLE_LANGUAGE="-slang ja"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 10 ]] ; then
    SUBTITLE_LANGUAGE="-slang ko"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 11 ]] ; then
    SUBTITLE_LANGUAGE="-slang nl"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 12 ]] ; then
    SUBTITLE_LANGUAGE="-slang pl"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 13 ]] ; then
    SUBTITLE_LANGUAGE="-slang pt"
fi

if [[ $SUBTITLE_LANGUAGE_NUMBER = 14 ]] ; then
    SUBTITLE_LANGUAGE="-slang ru"
fi



##################################################
# Subtitle Kind?     #
##################################################

echo -n "What kind of subtitles do you prefer?:

(1)  Embed onto the video
(2)  Embed into a separate file

Press 'Enter' for default (default is '1')...

"
read SUBTITLE_TYPE_NUMBER



###### extra blank space
echo "
"



###### default
if [[ -z $SUBTITLE_TYPE_NUMBER ]] ; then
    # If no file passed, default to null
    SUBTITLE_TYPE=
fi



###### preset
if [[ $SUBTITLE_TYPE_NUMBER = 1 ]] ; then
    SUBTITLE_TYPE=
fi

if [[ $SUBTITLE_TYPE_NUMBER = 2 ]] ; then
    SUBTITLE_TYPE="-vobsubout ${OUTPUT_FILE}"
fi



###### closes the preset of 'yes' for subtitles
fi



##################################################
# Custom conversion is starting    #
##################################################

###### extra blank space
echo "
"



###### custom conversion is starting message
read -sn 1 -p "Your custom conversion is about to begin, press any key to continue..."



##################################################
# Custom conversions (very high quality settings)#
##################################################

###### custom preset ######

###### H.264
if [[ $MPEG4_TYPE = 1 ]] ; then
# actual two-pass conversion
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -nosound -ovc x264 -x264encopts pass=1:subq=1:partitions=all:8x8dct:me=umh:frameref=1:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=$BITRATE -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc x264 -x264encopts pass=2:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=$BITRATE -vf pp=de,pullup,softskip,harddup,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $MPEG4_TYPE = 2 ]] ; then
# actual one-pass conversion
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc x264 -x264encopts subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b:threads=auto:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi
fi



###### MPEG4
if [[ $MPEG4_TYPE = 3 ]] ; then
# actual two-pass conversion
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -nosound -ovc lavc $CUSTOM_DIVX -lavcopts vpass=1:vcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo:threads=$CPUS:vbitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc lavc $CUSTOM_DIVX -lavcopts vpass=2:vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:threads=$CPUS:vbitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $MPEG4_TYPE = 4 ]] ; then
# actual one-pass conversion
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc lavc $CUSTOM_DIVX -lavcopts vcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:threads=$CPUS:vbitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi
fi



###### XVID
if [[ $MPEG4_TYPE = 5 ]] ; then
# actual two-pass conversion
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -nosound -ovc xvid -xvidencopts pass=1:chroma_opt:vhq=1:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o '/dev/null'
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc xvid -xvidencopts pass=2:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi
fi

if [[ $MPEG4_TYPE = 6 ]] ; then
# actual one-pass conversion
mencoder $INPUT_FILE $AUDIO_TRACK $AUDIO_LANGUAGE $SUBTITLE_TRACK $SUBTITLE_LANGUAGE $SUBTITLE_TYPE -oac mp3lame -lameopts $AUDIO_BITRATE_TYPE:br=$AUDIO_BITRATE:vol=$AUDIO_VOLUME_LEVEL -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=$CPUS:bitrate=$BITRATE -vf pp=de,pullup,softskip,crop=${CROP_VALUES},$SCALING $FRAME_RATE -o $OUTPUT_FILE.avi
fi



##################################################
# Close the custom quality option #17   #
##################################################

fi








######################################################################################################################################################
###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP ###### CLEANUP
######################################################################################################################################################








if [ -f mplayer.tmp ];then
 rm mplayer.tmp
fi



if [ -f divx2pass.log ];then
 rm divx2pass.log
fi


######################################################################################################################################################
###### CONVERSION FINISHED ###### CONVERSION FINISHED ###### CONVERSION FINISHED ###### CONVERSION FINISHED ###### CONVERSION FINISHED ######
######################################################################################################################################################


##################################################
# Conversion finished notifications   #
##################################################

###### extra blank spaces
echo "
"

###### notifications
notify-send -t 7000 -i /usr/share/icons/gnome/32x32/status/info.png "Conversion Finished" ; espeak "Conversion Finished"

# extra blank spaces
echo "
"

read -sn 1 -p "Your conversion has finished, press any key to continue and close this terminal session..."
Leer más...