while read LINEA
do
$usuario=$(echo $LINEA|cut -f1 -d:)
if ! [ -f /home/usuario ]
then
echo $usuario
fi
done </etc/passwd
|
Comentarios y recordatorio:
el operador $() de bash ejecuta una orden y devuelve su salida estándar. También se pueden usar comillas invertidas (`) para ejecutar una orden y obtener el resultado.
Cada línea la leemos del fichero /etc/passwd
cut -f1 -d: cortaría el campo uno ( -f 1) obtenido por un separador : de los valores de la entrada estándar, que es el resutl . Como el primer campo del fichero /etc/passwd es el nombre de usuario, entonces estaríamos obteniendo este nombre.
La base de datos de usuarios no tiene por qué estar completa en el fichero /etc/passwd, puede estar sobre otros soportes como NIS, LDAP, Winbind, db, ... En consecuencia la forma de obtener la lista real de usuarios es ejecutar la orden "getent passwd", así como para obtener la lista de grupos ejecutamos "getent group".
En este caso, nuestro anterior script podría quedar como:
for LINEA in $(getent passwd)
do
$usuario=$(echo $LINEA|cut -f1 -d:)
if ! [ -f /home/usuario ]
then
echo $usuario
fi
done
|
Esta forma de obtener una parte de una cadena para almacenarla en una variable va a ser de uso frecuente en el desarrollo de scripts.