En ocasiones necesito que un script se ejecute como root (superusuario). Esto ocurre cuando alguno de los comandos del script instala una aplicación o modifica algún fichero de configuración.
Imaginemos que alguien (yo no soy yo) reinstala su Ubuntu con una frecuencia alarmante y tiene un script para instalar todas aplicaciones necesarias, restaurar configuraciones, etc. Simplificándolo mucho, algo así:
#!/bin/bash
unzip datos.zip
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gimp inkscape chromium-browser
sudo halt
Este script descomprime un zip (donde tengo mis configuraciones) y a continuación interrumpe la ejecución del script hasta que introduces la contraseña. Una vez introduces la contraseña actualiza el listado de paquetes, instala varias aplicaciones y apaga el equipo.
Para evitar que el script de detenga existen varios métodos:
- Ejecutar todo el script como root
- Pasa el password como parámetro a sudo
- Darle permisos a tu usuario para que ejecute esa aplicación sin ser root
En este caso voy a optar por el primer método. Para poder saber si soy root agrego un pequeño condicional que determina el usuario actual y, si no es root, deteniene la ejecución del script.
#!/bin/bash
#Si tu usuario es distinto de root muestra un mensaje y sale del script
if [ `whoami` != "root" ]; then
echo "Ejecuta el script como root";
exit;
fi
echo "Continua la ejecución del script..."
El comando whoami retorna el usuario que estás usando en la consola y si no es «root» muestra un mensaje y el script finaliza.
Es muy importante respetar todos los espacios que tiene el condicional IF, para que no de un error de sintaxis. Bash es bastante quejica y si eliminas alguno de ellos deja de funcionar.
El script finalmente quedaría así, he quitado los «sudo» porque ya no son necesarios.
#!/bin/bash
if [ `whoami` != "root" ]; then
echo "Ejecuta el script como root";
exit;
fi
apt-get update
apt-get upgrade
apt-get install gimp inkscape chromium-browser
unzip datos.zip
halt