[Bash]Tratar variable vacía case [Resuelto]

Iniciado por hervasiop12345, 6 Julio 2011, 11:01 AM

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

hervasiop12345

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 (bash) [Seleccionar]

#!/bin/bash

function opciones {

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

 if [ \( $1 == $ca \) -o \( $1 == $ca2 \) -o \( $1 == $ca3 \) -o \( -z $1 \) ]
 then
   case "$1" in

     -p) echo "Opción -p"
        ;;
     -u) echo "Opción -u"
        ;;
     -help) echo "Opción -help"
           ;;
     "") echo "Mostrar todo"
           ;;        
   esac
 else
   echo "Opción Inválida"
 fi
}

if [ `cat /etc/passwd |grep $1 |wc -l` -ge 1 ]
then
 read option
 opciones $option
else
 echo "Usuario inexistente"
 exit 2
fi

leogtz

Puedes forzar la entrada así:

Código (bash) [Seleccionar]
#!/bin/bash

read opcion
until [ $opcion ]
do
read opcion
done
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

hervasiop12345

#2
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:


#!/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





leogtz

¿Entonces?, ¿así lo dejas o cuál problema hay?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com