Comprobar si un script se ejecuta como root

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