Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: hervasiop12345 en 6 Julio 2011, 11:01 am



Título: [Bash]Tratar variable vacía case [Resuelto]
Publicado por: hervasiop12345 en 6 Julio 2011, 11:01 am
Hola. Me gustaría que cuando haga read y pulse enter sin introducir nada , en case muestre una serie de cosas pero me da eror en la línea del if y es por esto. Pensé en usar \( -z $1 \) pero no parece funcionar. Espero vuestra respuesta y gracias.

Código
  1. #!/bin/bash
  2.  
  3. function opciones {
  4.  
  5.  ca="-p"
  6.  ca2="-u"
  7.  ca3="-help"
  8.  
  9.  if [ \( $1 == $ca \) -o \( $1 == $ca2 \) -o \( $1 == $ca3 \) -o \( -z $1 \) ]
  10.  then
  11.    case "$1" in
  12.  
  13.      -p) echo "Opción -p"
  14.         ;;
  15.      -u) echo "Opción -u"
  16.         ;;
  17.      -help) echo "Opción -help"
  18.            ;;
  19.      "") echo "Mostrar todo"
  20.            ;;        
  21.    esac
  22.  else
  23.    echo "Opción Inválida"
  24.  fi
  25. }
  26.  
  27. if [ `cat /etc/passwd |grep $1 |wc -l` -ge 1 ]
  28. then
  29.  read option
  30.  opciones $option
  31. else
  32.  echo "Usuario inexistente"
  33.  exit 2
  34. fi
  35.  


Título: Re: Tratar variable vacía case
Publicado por: leogtz en 7 Julio 2011, 08:21 am
Puedes forzar la entrada así:

Código
  1. #!/bin/bash
  2.  
  3. read opcion
  4. until [ $opcion ]
  5. do
  6. read opcion
  7. done
  8.  


Título: Re: Tratar variable vacía case
Publicado por: hervasiop12345 en 8 Julio 2011, 14:25 pm
Gracias por tu respuesta. Tal y como yo lo quería hacer no me sirve el bucle ya que ahí fuerzo a que se introduzca algo. Este script muestra informacíon acerca de un usuario si existe.
Script terminado:

Código:
#!/bin/bash

function nfo {

  echo "Login: $log"
  echo "Nombre: `cat /etc/passwd | cut -d , -f 1 |grep $log | cut -d : -f 5`"
  echo "Directorio home: `cat /etc/passwd | grep $log | cut -d : -f 6`"
  echo "Shell: `cat /etc/passwd | grep $log | cut -d : -f 7`"
  if [ `finger $log | grep On | wc -l` -ge 1 ]
  then
    echo "Conectado: Si"
  else
    echo "Conectado: No"
  fi      

}

function procesos {

  echo -e "PID   PROCESO\n"
  echo "`ps aux | tr -s " " | grep $log | cut -d " " -f 1,2,11 | grep $log | cut -d " " -f 2,3`"

}

function opciones {

  ca="-p"
  ca2="-u"
  ca3="-help"

  if [ ! $option ]
  then

    nfo $log
    procesos $log
    exit 0    

  elif [ \( $option == $ca \) -o \( $option == $ca2 \) -o \( $option == $ca3 \) ]
  then

    case "$option" in

      -p)
          procesos $log
          exit 0
          ;;
      -u)
          nfo $log
          exit 0
          ;;
   -help)
          echo -e "Usa -u para obtener información del usuario\n    -p para información de los procesos\n     o nada para mostrar ambas cosas"          
          ;;  
    esac

  else

    echo "Opción Inválida"
    exit 1

  fi
}

if [ -z $1 ]
then

  echo "Haz la llamada con algún usuario"
  exit 2

elif [ `cat /etc/passwd |grep $1 |wc -l` -ge 1 ]
then

  log=$1
  read option
  opciones

else

  echo "Usuario inexistente"
  exit 2

fi





Título: Re: Tratar variable vacía case
Publicado por: leogtz en 8 Julio 2011, 17:41 pm
¿Entonces?, ¿así lo dejas o cuál problema hay?


Título: Re: Tratar variable vacía case
Publicado por: hervasiop12345 en 8 Julio 2011, 17:45 pm
así lo dejo