[DUDA] Cadena de caracteres

Iniciado por syncro_7, 11 Noviembre 2015, 17:31 PM

0 Miembros y 1 Visitante están viendo este tema.

syncro_7

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:

Código (bash) [Seleccionar]
#! /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.

yMk369

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.

Código (bash) [Seleccionar]
#!/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"