lunes, 30 de noviembre de 2009

Programación shell script bash

Ejemplos programación en bash

Voy a mostrar unos shell scripts, que son muy simples pero que son 100% funcionales, por todo ello que creo que su valor es muy grande.

Convertir a mp3

- Un script "mu chorra" que me convierte las pistas de un CD de audio a archivos MP3:

#!/bin/sh
cd paranoia -vsZB

for f1 in *.wav;
do
f2=`echo "$f1" | cut -d '.' -f 1`;
lame -f "$f2.cdda.wav" "$f2.mp3";
done

rm *.wav

Otro script "complicado" que me permite escuchar las radios más usuales para mi:

Escuchar radio online

#!/bin/sh
function Emisora
{
clear
echo " 1 = Los 40 Principales 2 = RNE Radio 1"
echo " 3 = RNE Radio Clasica 4 = RNE Radio 3"
echo " 5 = MASFMBEGASTRI 0=Salir"
echo
echo ""
echo
echo "Pulsa Ctrl + C para salir de la emisora y elegir una nueva"
echo "0 , Para abandonar el programa"
echo
# echo "Las tildes y caracteres especiales han sido elimina-"
# echo "dos a proposito para una correcta visualizacion."
# echo
echo -n "Numero de Emisora a escuchar: "
read choice

# **********************

reproductor="mplayer -cache 256"

# **********************

if [ $choice -eq 1 ] ; then
# 1.Los 40 Principales
$reproductor http://66.175.96.10/co40p

elif [ $choice -eq 2 ] ; then
# 2.RNE Radio 1
mplayer -playlist http://radio1.rtve.stream.flumotion.com/rtve/radio1.mp3.m3u

elif [ $choice -eq 3 ] ; then
# 3.RNE Radio Clasica
mplayer -playlist http://radioclasica.rtve.stream.flumotion.com/rtve/radioclasica.mp3.m3u

elif [ $choice -eq 4 ] ; then
# 4.RNE Radio 3
mplayer -playlist http://radio3.rtve.stream.flumotion.com/rtve/radio3.mp3.m3u

elif [ $choice -eq 5 ] ; then
# 5.MASFMBEGASTRI
$reproductor  mms://62.37.237.34/masfmbegastri
elif [ $choice -eq 0 ] ; then
exit 0
else echo "Esa cadena no existe"
fi
Emisora
}

Emisora

Como ya he dicho al principio, estos scrips solo son la punta del iceberg pero que me han hecho ver la potencia de los shell script.

Aquí otro ejemplo de una agenda programada en bash:

Agenda

#!/bin/bash

FICHERO="listado.txt"

function Menu
{
   echo "_____________MENU_____________"
   echo ""
   echo "   1. Introducir Contacto"
   echo "     2. Buscar Contacto"
   echo "     3. Listar Contactos"
   echo "   4. Tamanio de la Agenda"
   echo "         5. Salir"
}

function Introducir
{
   if [ -e "listado.txt" ]; then  # Si el fichero existe...
      echo "Introduzca datos de la persona: "
      read -p "Nombre:" NOMBRE
      read -p "Primer apellido: " APELLIDO1
      read -p "Segundo apellido: " APELLIDO2
      read -p "Telefono: " TELEFONO
      read -p "Edad: " EDAD
      # Redireccionamos los datos introducidos al fichero de la agenda
      echo "$NOMBRE:$APELLIDO1:$APELLIDO2:$TELEFONO:$EDAD" >> $FICHERO
   else
      # Si no existe el fichero, damos el mensaje de error...
      echo "No se ha podido acceder al archivo de listado!"
   fi
 
   echo
}

function Buscar
{  
   if [ -s $FICHERO ]; then
      echo "Introduzca datos de la persona a buscar: "
      read -p "Nombre: " NOMBRE
      read -p "Primer apellido: " APELLIDO1
 
      DATOS="$NOMBRE:$APELLIDO1"  # Metemos en DATOS nuestra busqueda
      SALIDA=$(grep "$DATOS" $FICHERO)  # Con grep asigna a salida el contenido de la linea
      echo -e "${SALIDA//:/n}"  # Cambiamos el caracter ":" por saltos de linea "n"
   else
      echo "El fichero no existe o no contiene entradas en la agenda"
   fi
}

function Listar
{
   if [ -s $FICHERO ]; then  # Si existe el fichero y contiene datos
      for linea in $(cat $FICHERO)  # Recorremos cada linea del fichero
      do
         echo "__________________"
         echo -e "${linea//:/n}"  # Sacamos la linea con formato
         echo "__________________"
         echo ""
         echo "Pulse una tecla..."
         read
      done
   else
      echo "No existen datos en la agenda"
   fi
}

function Tamanyo
{
   echo "Tamanyo en bloques (bloques * 32bytes)"
   echo "______________________________________"
   echo "$(ls --size $FICHERO)"
   echo ""
}

opc=0
salir=5

while [ $opc -ne $salir ];  # Mientras el valor de $opt es distinto del valor de $salir...
do  
   clear
   Menu  # Dibujamos el menu en pantalla
   read -p "Opcion:..." opc  # Escogemos la opcion deseada
     
   if [ $opc -ge 1 ] && [ $opc -le 5 ]; then  # No se por que no funciona el rango...!!!!!!!!!!!!!!!!!!!!!!
      clear
      case $opc in   # Acciones para las diferentes opciones del menu

         1)Introducir  
            ;;      
       
         2)Buscar
            ;;

         3)Listar
            ;;

         4)Tamanyo
            ;;

         5)echo "Saliendo"  
            ;;
      esac
   else
      echo "No ha introducido una opcion correcta!!"
   fi
   echo "Pulse una tecla..."
   read
done

Cambiar dns e ip

#!/bin/bash

DNS="62.37.228.20"
DNS2="80.58.61.254"
USUARIO=$(whoami)
ROOT=root


if [ $USUARIO == $ROOT ]; then

echo nameserver $DNS > /etc/resolv.conf
echo nameserver $DNS2 >> /etc/resolv.conf
echo "" > /etc/network/interfaces
echo "auto eth1
 iface eth1 inet static
 address 192.168.1.101
 netmask 255.255.255.0" >> /etc/network/interfaces
exit 0
else
echo -e "e[31mejec
utar como ROOT" 
echo -e "33[0m" 
read
          exit 1
fi

Configurar servidor proxy

#!/bin/bash

FICHERO="servers"

function Menu
{
    echo "_____________MENU_____________"
       echo ""
       echo "     1. Introducir Servidor Proxy"
       echo "     2. Buscar Servidor Proxy"
       echo "     3. Listar Servidores Proxy"
       echo "     4. Establecer Servidor Proxy"
       echo "     5. Hacer Ping"
       echo "     6. Salir"
}

function Introducir
{
    if [ -e "servers" ]; then  # Si el fichero existe...
              echo "Introduzca url del servidor: "
              read -p "url:" URL
              echo "Introduzca el puerto del servidor: "
              read -p "puerto:" PUERTO
              echo "Introduzca el usuario del servidor: "
              read -p "usuario:" USER
              echo "Introduzca la contrasenya del servidor: "
              read -p "contrasenya:" PASS
              # Redireccionamos los datos introducidos al fichero de la agenda
              echo "$URL:$PUERTO:$USER:$PASS" >> $FICHERO
       else
              # Si no existe el fichero, damos el mensaje de error...
              echo "No se ha podido acceder al archivo de listado de servidores!"
       fi
  
}

function Buscar
{  
    if [ -s $FICHERO ]; then
            echo "Introduzca url del servidor a buscar: "
              read -p "url: " URL

  
              DATOS="$URL"  # Metemos en DATOS nuestra busqueda
              SALIDA=$(grep "$DATOS" $FICHERO)  # Con grep asigna a salida el contenido de la linea
              echo -e "${SALIDA//:/n}"  # Cambiamos el caracter ":" por saltos de linea "n"
       else
              echo "El fichero no existe o esta vacio"
       fi
}

function Listar
{
    if [ -s $FICHERO ]; then  # Si existe el fichero y contiene datos
            for linea in $(cat $FICHERO)  # Recorremos cada linea del fichero
        do
                    echo "__________________"
                 echo -e "${linea//:/n}"  # Sacamos la linea con formato
                 echo "__________________"
                echo ""
                echo "Pulse una tecla..."
                 read
              done
      else
            echo "El fichero no existe o esta vacio"
      fi
}

function Set
{
    if [ $(whoami) != "root" ]; then
            echo "Debes ser root para correr este script."
            echo "Para entrar como root, escribe "sudo su" sin las comillas."
            exit 1
    fi
    echo "Introduzca url del servidor: "
        read -p "url:" URL
        echo "Introduzca el puerto del servidor: "
        read -p "puerto:" PUERTO
        echo "Introduzca el usuario del servidor: "
        read -p "usuario:" USER
        echo "Introduzca la contrasenya del servidor: "
        read -p "contrasenya:" PASS
        export http_proxy=http://$USER:$PASS@$URL:$PUERTO
}

function Ping
{
   
      echo "Introduzca url del servidor a alcanzar: "
        read -p "url:" URL2
    ping $URL2
}

function Ver
{
    cat /etc/environment
}
   
opc=0
salir=6

while [ $opc -ne $salir ];  # Mientras el valor de $opt es distinto del valor de $salir...
do  
    clear
       Menu  # Dibujamos el menu en pantalla
       read -p "Opcion:..." opc  # Escogemos la opcion deseada
     
       if [ $opc -ge 1 ] && [ $opc -le 7 ]; then  # No se por que no funciona el rango...!!!!!!!!!!!!!!!!!!!!!!
              clear
             case $opc in   # Acciones para las diferentes opciones del menu

                 1)Introducir 
                    ;;     
        
                 2)Buscar
                    ;;

            3)Listar
                    ;;

                 4)Set
                   ;;

         &nbsp
;  5)Ping
                   ;;
          
            6)Ver
            ;;

                 7)echo "Saliendo" 
                    ;;
              esac
       else
              echo "No ha introducido una opcion correcta!!"
       fi
       echo "Pulse una tecla..."
       read
done
   

No hay comentarios:

Publicar un comentario