Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: syncro_7 en 11 Noviembre 2015, 17:31 pm



Título: [DUDA] Cadena de caracteres
Publicado por: syncro_7 en 11 Noviembre 2015, 17:31 pm
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
  1. #! /bin/bash
  2.  
  3. function error()
  4. {
  5.        echo "------Lista de errores --------"
  6.        echo "1) No puedes introducir nada en vacio"
  7.        echo "2) Debes de introducir un usuario real"
  8.        exit;
  9. }
  10.  
  11. ##Pedir al usuario y guardar la informacion en una variable
  12. read -p "Introduce un nombre de usuario:"  usuario
  13.  
  14. if [ $(who) = "$usuario" ];then
  15.       echo "El usuario esta actualmente conectado al sistema"
  16. else
  17.       error;
  18. fi
  19.  

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.


Título: Re: [DUDA] Cadena de caracteres
Publicado por: yMk369 en 16 Noviembre 2015, 05:37 am
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
  1. #!/bin/bash
  2.  
  3. #Espero que sepas acerca de declarar varibles en bash y por que.
  4. array=()
  5. N=1
  6.  
  7. echo "Introduce un nombre de usuario:"
  8.  
  9. read user
  10.  
  11. #Numero de usuarios conecados
  12. num=$( who | nl | sed -n '$p' | awk '{print $1}' )
  13.  
  14. # nl ---> listar.
  15. # sed -n '$p' ---> imprimir la ultima fila.
  16. # awk '{print $1}' ---> imprimir la primera columna.
  17.  
  18.  
  19.  
  20.  
  21. #introducir los valores en un array, es completamente incesario ya que aqui podriamos comprar de una vez.
  22. #pero bueno hagamoslo.
  23.  
  24. for((x=0; x < $num; ++x))
  25. do
  26.  
  27.        usu=$( who  | sed -n "$N p" | awk '{print $1}' )
  28.  
  29.  
  30.        array[$x]=$usu
  31.  
  32.  
  33.        ((N++))
  34.  
  35. done
  36. #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>>
  37.  
  38.  
  39.  
  40. HH=${#array[*]}
  41. # ${#array[*]} ---> para ver el numero total de elementos de un arreglo.
  42.  
  43.  
  44. #Como ves este es otra manera de usar for
  45. for f in $(seq 0 $HH); do
  46.        if [ "${array[$f]}" == "$user" ]; then
  47.                echo "Ah! Cabron, ya estas logueado"
  48.                exit 0
  49.        fi
  50. done
  51.  
  52.  
  53. echo "Pues no estas logueado"