Programa de Loggin en Bash

Iniciado por TecShell, 5 Junio 2020, 21:45 PM

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

TecShell

Hola, estoy tratando de aprender bash, y ultimamente estuve teniendo problemas con la sintaxis del bucle while, ya que en varios sitios he encontrado que debo escribirle dos puntos o punto y coma, luego de la condición, a veces dicen que debo escribir un "end" al final del bucle, hasta algunos dicen distintas cosas sobre como escribir la condición, me gustaría que alguien me aclare esta sencillés.
Si hay algún otro error por favor diganme (Trate de seguir todas las reglas del foro, soy nuevo, sepan disculpar si algo no está dentro de estas)

Acá está el código

Código (bash) [Seleccionar]

#!/bin/bash                                                                     
codi='FRAN'
echo -e "Hola, escriba su nombre porfavor"
read nombre
while [$nombre!=$codi]:
do
echo -e "Escriba su nombre porfavor..."
read nombre
done
echo -e "Bienvenido $nombre"


Cada vez que lo ejecuto tengo el siguiente error

./bucle.sh
Hola, escriba su nombre porfavor
FRAN
./bucle.sh: línea 5: [FRAN!=fran]:: orden no encontrada
Bienvenido FRAN



EdePC

Saludos,

- Depende del tipo de sintaxis que uno desea seguir, por ejemplo está la sintaxis tipo C#

Código (csharp) [Seleccionar]
while (condicion)
{
  instrucciones
}


-- Y la otra que va de corrido:

Código (csharp) [Seleccionar]
while (condicion) {
  instrucciones
}


- En Bash se tiene que escribir cada instrucción en una línea aparte como el primer While que puse, PERO si se quiere poner ese DO en la misma línea hay que utilizar un punto y coma ( ; ) para escribir más de una instrucción en la misma línea:

Código (bash) [Seleccionar]
while [[ "$nombre" != "$codi" ]]; do
  echo "Escriba su nombre por favor..."
  read nombre
done


- Además, como ves hay que tener especial cuidado en los espacios que hay que dejar después de [[ y antes de ]], lo mismo con los espacios antes y después del signo de comparación !=. Todo esto es obligatorio o no funciona.

- Como buena práctica se acostumbra poner entre comillas las variables si la comparación es texto literal, además el utilizar doble corchete, aunque esto último es más para acostumbrarse ya que un solo corchete funciona bien siempre y cuando no se vayan a utilizar comparaciones más complejas.

-- Es por costumbre como el usar echo -e que sirve para utilizar secuencias de escape como \a \v \n aunque no veo que las uses, en este caso yo no usaría -e

- Que libro, manual o tutorial estás siguiendo? Al menos yo no he encontrado algo bueno en español salvo este: http://es.tldp.org/COMO-INSFLUG/es/pdf/Bash-Prog-Intro-COMO.pdf es bastante viejito del 2000 y no tiene documentado el doble corchete XD, pero es bastante bueno y entendible, otra opción muy completa pero en inglés es: http://tldp.org/LDP/abs/abs-guide.pdf del 2014. Y por supuesto los ejemplos rápidos y completos de Notes for Professionals: https://books.goalkicker.com/BashBook/BashNotesForProfessionals.pdf del 2016.

TecShell

Cita de: EdePC en  6 Junio 2020, 03:53 AM

- Que libro, manual o tutorial estás siguiendo? Al menos yo no he encontrado algo bueno en español salvo este: http://es.tldp.org/COMO-INSFLUG/es/pdf/Bash-Prog-Intro-COMO.pdf es bastante viejito del 2000 y no tiene documentado el doble corchete XD, pero es bastante bueno y entendible, otra opción muy completa pero en inglés es: http://tldp.org/LDP/abs/abs-guide.pdf del 2014. Y por supuesto los ejemplos rápidos y completos de Notes for Professionals: https://books.goalkicker.com/BashBook/BashNotesForProfessionals.pdf del 2016.

Muchas gracias, estoy siguiendo este manual https://thales.cica.es/rd/glinex/practicas-glinex05/manuales/bash/practica.pdf pero solo muestra como comparar variables numéricas con while, por lo que decidí explorar más.
Mi confusión se dio por mirar en tantos sitios diferentes  y por estar acostumbrado a escribir en c donde no importan los espacios... Hay que leer mas xD

Kennst0xmich

#3
¡Hey! podrías completar un poco tu aprendizaje con este sitio, le vi bastante cosas útiles :D
http://trajano.us.es/~fjfj/shell/shellscript.htm