19 marzo, 2024

Vamos a confeccionar un Menú bin/sh para Raspberry, y así controlar un Plex Media Server.

Es un sistema básico, que en realidad, permite:

  • Apagar completamente la Raspberry Pi.
  • Reinicializar la Raspi.
  • Comprobar conectividad.
  • Salir a la consola, para operaciones no previstas.
  • Volver a inicializar Plex Media Server.
  • Rebotar Samba, por si no tenemos acceso remoto a ficheros.

Y más funcionalidades que podrás implementar tú mismo, según las necesidades del sistema.

El acceso remoto, lo efectuamos mediante un cliente SSH, en mi caso, Putty.

Una pequeña explicación:

Antes de comenzar a codificar, vamos a explicar cómo funcionan los menús en bin/sh:

Primero creamos una función llamada menú, haremos la visualización del menú, propiamente dicho, limpiaremos la pantalla, asignaremos valor a las diferentes entradas al menú, y mostraremos un input, que recoja el valor de la tecla pulsada:

_menu()
{
    clear
    echo "Selecciona una opcion:"
    echo
    echo "1) Apagado Total"
    echo "2) Rebotar Raspberry"
    echo "3) Ping a google.es"
    echo "4) Consola"
    echo "5) Plex restart"
    echo "6) Samba restart"
    echo "9) Salir"
    echo
    echo -n "Indica una opcion: "
}

Crearemos unos mensajes de salida, con otra función, este es un ejemplo:

_plex()
{
 echo ""
    echo "------------------------------------"
    echo "Restaurando Plex Server"
    echo "------------------------------------"
    echo ""
 
 
 }

Ahora, vamos realmente con la programación, asignando a la variable opc valor «0», y creamos, primero un blucle «until», al que diremos que si la opción es diferente a 9, se ejecute el código siguiente, y si es 9, que salga del menú, cerrando la conexión con la Raspberry, tal como:

opc="0"
 
until [ "$opc" -eq "9" ];

Y seguimos, codificando, con un «do case», que es realmente el seleccionador de accciones, «En el caso que opc sea igual al valor case, ejecuta los comandos a continuación».

do
    case $opc in
        1)
            _apagar	
	    /sbin/poweroff
			;;
        2)
            _rebotar
	    /sbin/reboot
		    ;;

Acabamos el programa, con el cierre de «until» y «do case».

Menú bin/sh para Raspberry.

Con tu editor de texto preferido, (te recomiendo NotePad++, el cual utilizo para casi todo lo que tenga que ver con programación), crea un fichero llamado, por ejemplo, menu.sh e inserta el código siguiente:

#!/bin/sh
 
 
# Muestra el menu general
_menu()
{
    clear
    echo "Selecciona una opcion:"
    echo
    echo "1) Apagado Total"
    echo "2) Rebotar Raspberry"
    echo "3) Ping a google.es"
    echo "4) Consola"
    echo "5) Plex restart"
	echo "6) Samba restart"
    echo "9) Salir"
    echo
    echo -n "Indica una opcion: "
}
 
# Muestra la opcion seleccionada del menu
_mostrarResultado()
{
    clear
    echo ""
    echo "------------------------------------"
    echo "Has seleccionado la opcion $1"
    echo "------------------------------------"
    echo ""
}

_rebotar()
{
    echo ""
    echo "------------------------------------"
    echo "Procedemos a REBOTAR la Raspberry"
    echo "------------------------------------"
    echo ""
}

_apagar()
{
    echo ""
    echo "------------------------------------"
    echo "Procedemos a APAGAR la Raspberry"
    echo "------------------------------------"
    echo ""

}

_reservado()
 {
 echo ""
    echo "------------------------------------"
    echo "¿Pero que haces, es una opcion RESERVADA"
    echo "------------------------------------"
    echo ""
 
 
 }
 
_consola()
{
 echo ""
    echo "------------------------------------"
    echo "Recuerda salir con el comando exit"
    echo "------------------------------------"
    echo ""
 
 
 }
 
 _plex()
{
 echo ""
    echo "------------------------------------"
    echo "Restaurando Plex Server"
    echo "------------------------------------"
    echo ""
 
 
 }
 _samba()
{
 echo ""
    echo "------------------------------------"
    echo "Restaurando SAMBA"
    echo "------------------------------------"
    echo ""
 
 
 }
 
 

# opcion por defecto
opc="0"
 
# bucle mientas la opcion indicada sea diferente de 9 (salir)
until [ "$opc" -eq "9" ];
do
    case $opc in
        1)
            _apagar
			
			 /sbin/poweroff
			;;
        2)
            _rebotar
			/sbin/reboot
		    ;;
        3) 
			ping google.es -c 10
			
            _menu
            ;;
        4)
           _consola
			/bin/bash
            ;;
        5)
            _plex
			/etc/init.d/plexmediaserver restart
			_menu
			;;
			
	    6) _samba
		    /etc/init.d/samba restart
			_menu
			;;
        *)
            # Esta opcion se ejecuta si no es ninguna de las anteriores
            clear
            _menu
            ;;
    esac
    read opc
done

El acceso directo:

Yo tengo, un acceso directo, anclado en la barra de tareas, con un icono de una raspberry:

pi-barra

En mi caso, tengo el fichero menu.sh, residiendo en una carpeta del disco duro D:, llamada Desktop, y el programa Putty en el escritorio de Windows 10, el acceso directo, lo creo, dentro del mismo lugar que tengo menu.sh.

Crea un acceso directo, con el icono que prefieras, y añade la siguiente línea en Destino, de esta manera:

C:\Tu\RUTA\hacia\putty.exe -ssh TU.IP.DE.RASPI -l TUusuario -pw TUpassword -m D:\TU RUTA A\menu.sh -t

Cambia, la ruta hacia putty, añade la ip de tu Raspi, ponle TU usuario y password, e indica, la ruta al fichero menu.sh.

Luego anclarlo a tu barra de tareas, o donde prefieras tenerlo.

Si todo va bien, y la conexión es correcta, te aparecerá:

Menú bin/sh para Raspberry

Espero, que os sirva de ayuda.

 

2 comentarios en «Menú bin/sh para Raspberry Pi, scripting básico.»

  1. Y si utilizas un router con openwrt como cliente de red wifi, y la ip de la raspberry está en otra subred (que le proporciona este router), se podría hacer?

    Saludos.

    1. Hola Rubencito:
      Si las redes se ven, es decir, hay enrutamiento, ya sea por máscara o por static routing, no hay problema.
      Como ya sabes, haciendo un ping desde el pc que contendrá el menu.sh a la raspberry, te confirmará si llega.

      Un saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies