Visualizzazione post con etichetta if. Mostra tutti i post
Visualizzazione post con etichetta if. Mostra tutti i post

domenica 16 gennaio 2011

BASH: verifica possesso privilegi superuser

Può capitare di dover scrivere uno script per automatizzare operazioni che, del tutto o in parte, devono essere realizzate in qualità di superuser (superutente o utente root o amministratore). Se per semplificare vogliamo che l'intero script sia eseguito in modalità superuser può essere utile verificare, prima di dare il via alla sequenza di operazioni previste, se effettivamente l'utente che ha lanciato lo script possieda i privilegi di root. In altre parole si vuole verificare se lo script è stato lanciato dall'utente root o da un utente non-amministratore tramite il comando sudo (sui sistemi che lo prevedono).
Il seguente script offre un esempio di come realizzare la suddetta verifica.
  #!/bin/bash
if [ `id -u` -eq 0 ]; then
echo "Welcome My Lord"
exit 0
else
echo "Go away, miserable!"
exit 1
fi

Per un esempio più concreto, anche se molto semplice.
  #!/bin/bash
if [ `id -u` -eq 0 ]; then
rm -rf subdir
exit 0
else
echo "subdir not removed: insufficient priviliges"
exit 1
fi


Il principio di funzionamento è molto semplice: il comando id -u restituisce l'identificativo numerico relativo all'utente che ha lanciato lo script. L'identificativo dell'utente con privilegi di amministrazione è sempre 0, sia nel caso che si tratti dell'utente root in persona che di un utente semplice con l'ausilio di sudo.

NOTA: il simbolo ` non è un semplice apice e si ottiene premendo contemporaneamente AltGr e ' sulle tastiere con layout italiano(come qui).

sabato 2 ottobre 2010

BASH: verifica esistenza file o directory

Verifichiamo se il file temp.txt esiste:
 if [ -f temp.txt ]; then 
echo "temp.txt esiste."
else
echo "temp.txt NON esiste."
fi
Verifichiamo se la directory TEMP esiste, in caso negativo la creiamo:
 if [ -d TEMP ]; then 
echo "TEMP esiste."
else
mkdir TEMP
fi

Invertiamo if ed else:
 if [ ! -f temp.txt ]; then 
echo "temp.txt NON esiste."
else
echo "temp.txt esiste."
fi

if [ ! -d TEMP ]; then
mkdir TEMP
else
echo "TEMP esiste."
fi

Il seguente script completo verifica l'esistenza di un file passato come argomento:
 #!/bin/bash 

# verifica che il numero di argomenti dello script
# sia esattamente uno
if [ ${#} -ne 1 ] ; then
echo "Specificare il file da verficare."
exit 1
fi

if [ -f ${1} ]; then
echo "Il file esiste."
else
echo "Il file NON esiste."
fi

exit 0