Hola a todos tengo un ejercicio que completar , y no sé por donde tirar ya, os comento el ejercicio:
Script que pida un usuario por teclado e informe mediante un mensaje de si ese usuario está conectado al Sistema, de no estarlo que muestre un mensaje alternativo informándonos de ello
Mi código es el siguiente:
#! /bin/bash
function error()
{
echo "------Lista de errores --------"
echo "1) No puedes introducir nada en vacio"
echo "2) Debes de introducir un usuario real"
exit;
}
##Pedir al usuario y guardar la informacion en una variable
read -p "Introduce un nombre de usuario:" usuario
if [ $(who) = "$usuario" ];then
echo "El usuario esta actualmente conectado al sistema"
else
error;
fi
Mi problema es que quiero comparar la variable $usuario que es la que recojo del usuario que está introduciendo el nombre, y compararla como cadena de caracteres con el resultado del comando who ¿Alguna sugerencia?
Gracias.
Hola, apenas me dio tiempo de hacer el script y como vez hay puse varios elementos que no son necesarios (como los diferentes "for", o tuberias) investiga y suerte.
#!/bin/bash
#Espero que sepas acerca de declarar varibles en bash y por que.
array=()
N=1
echo "Introduce un nombre de usuario:"
read user
#Numero de usuarios conecados
num=$( who | nl | sed -n '$p' | awk '{print $1}' )
# nl ---> listar.
# sed -n '$p' ---> imprimir la ultima fila.
# awk '{print $1}' ---> imprimir la primera columna.
#introducir los valores en un array, es completamente incesario ya que aqui podriamos comprar de una vez.
#pero bueno hagamoslo.
for((x=0; x < $num; ++x))
do
usu=$( who | sed -n "$N p" | awk '{print $1}' )
array[$x]=$usu
((N++))
done
#ojo: sed -n "$N p" ---> escapa con comillas dobles, (investiga por que y me dices) pero si fuese un numero escaparia asi: sed -n '3 p' << para mostrar la fila 3>>
HH=${#array[*]}
# ${#array[*]} ---> para ver el numero total de elementos de un arreglo.
#Como ves este es otra manera de usar for
for f in $(seq 0 $HH); do
if [ "${array[$f]}" == "$user" ]; then
echo "Ah! Cabron, ya estas logueado"
exit 0
fi
done
echo "Pues no estas logueado"