Montar los recursos compartidos por samba
Este script consta de una función de ayuda, que ya contiene un par de ejemplos para detallar su uso. El único punto que quizá debería adaptarse para el uso personalizado, es el momento de la llamada a smbclient, donde podemos especificar el usuario y la contraseña que deseemos para esa sesión samba.
Script:
#!/bin/bash
function montar {
    # control de argumentos
    if [ $# != 2 ] ; then
        resumen
        echo "Para informacion mas detallada: sambamount -h"
        exit 1
    fi
    # obtencion de recursos compartidos y impresion de estos por pantalla
    compartidos=`smbclient -L $2 | grep Disk | awk '{print $1}'`
    echo && echo "*** Recursos compartidos en $2 ***"
    echo "$compartidos" && echo
    # montaje de los recusros compartidos
    if [ -d $1 ] ; then
        cd $1
        for recurso in $compartidos ; do
            echo -n "¿Montar recusro compartido: $recurso? (s/n) "
            read opcion
            if [ $opcion == "s" ] || [ $opcion == "S" ] ; then
                mkdir ./$recurso
                if [ -d ./$recurso ] ; then
                    smbmount //$2/$recurso ./$recurso
                    if [ $? != 0 ] ; then
                        echo "Recurso: $recurso no montado."
                    fi
                else
                    echo "Recurso: $recurso no montado."
                fi
            fi
        done
        cd -
    else
        echo "No se encontro el directorio: $1"
        exit 1
    fi
}
function desmontar {
    # control de argumentos
    if [ $# != 1 ] ; then
        resumen
        echo "Para informacion mas detallada: sambamount -h"
        exit 1
    fi
    # localicacion de directorios montados y desmontaje
    if [ -d $1 ] ; then
        cd $1
        montados=`ls`
        for directorio in $montados ; do
            echo "Desmontando recurso: $directorio"
            smbumount ./$directorio
            if [ $? == 0 ] ; then # si se ha desmontado eliminamos el directorio
                rm -fr ./$directorio # solo borramos si smbumount tiene exito
            fi
        done
        cd -
    else
        echo "No se encontro el directorio $1"
        exit 1
    fi
}
function ayuda {
    resumen
    echo "Monta y desmonta los recursos compartidos por una maquina windows" && echo
    echo " -m: (opcion 'Montar')"
    echo " Monta los recursos compartidos encontrados en el host especificado."
    echo " Puede especificarse el host o la IP de la maquina windows."
    echo " Es necesario que el directorio donde se montara exista." && echo
    echo " -d: (opcion 'Desmontar')"
    echo " Desmonta todos los recursos compartidos montados en el punto de montaje"
    echo " especificado y borra los directorios que se crearon al montar."
    echo " Es importante proporcionar como punto de montaje el mismo que se indico"
    echo " al montar y no un subdirectorio, ya que el script al montar crea un"
    echo " subdirectorio para cada recurso y al desmontar desmonta todos los"
    echo " subdirectorios que creo. (Si luego se crearon mas subdirectorios en el"
    echo " punto de montaje intentara desmontarlos pero no borrara el directorio"
    echo " si no era un recurso compartido desmontado)."
    echo
    echo "Ejemplos (para el script con parametros):"
    echo " $0 -m ~/samba hostwin (o bien: $0 -m ~/samba 172.16.0.2)"
    echo " Montara en ~/samba los recursos compartidos en ese host."
    echo " El directorio ~/samba debe existir antes de ejecutar el script."
    echo " $0 -d ~/samba"
    echo " Desmontara todos los recursos compartidos montados en ~/samba" && echo
    echo "*** TODO: SambaMount por Nacx ***"
    echo "Este script solo es capaz de montar recursos compartidos cuyo nombre"
    echo "no contenga ningún espacio. La causa es el uso de awk para recoger el"
    echo "primer campo con lo que se quedaria unicamente con la primera palabra"
    echo "del nombre del recurso."
    echo "Esto podria corregirse sin utilizar el comando awk y tratando cada nombre"
    echo "de recurso encontrado para quitar los espacios, pero por el momento no he"
    echo "tenido tiempo."
}
function resumen {
    echo && echo " sambamount (Sin argumentos para usar el menu de opciones)"
    echo " sambamount -m [punto de montaje] [host]"
    echo " sambamount -d [punto de montaje]"
    echo " sambamount -h" && echo
}
function muestra_opciones {
    echo && echo "1) Montar"
    echo "2) Desmontar"
    echo "3) Ayuda"
    echo "4) Salir"
}
# Si no se pasan argumentos al script mostramos el menu de opciones
if [ $# == 0 ] ; then
    opciones="Montar Desmontar Ayuda Salir"
    select opt in $opciones ; do
        case "$opt" in
            Montar)
                echo -n "Punto de montaje: "
                read punto_montaje
                echo -n "Host remoto: "
                read host
                montar $punto_montaje $host
                muestra_opciones
            ;;
            Desmontar)
                echo -n "Punto de montaje: "
                read punto_montaje
                desmontar $punto_montaje
                muestra_opciones
            ;;
            Ayuda)
                ayuda
                muestra_opciones
            ;;
            Salir)
                exit 0
            ;;
            *)
                echo "Opcion incorrecta."
                muestra_opciones
            ;;
        esac
    done
else
    # Si se pasan argumentos ejecutamos sin mostrar el menu
    case "$1" in
        -m) montar $2 $3 ;;
        -d) desmontar $2 ;;
        -h) ayuda ;;
        *) resumen ;;
    esac
    exit 0
fi
Elaborado por Nacx para ADSLAyuda.com
