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