Cuando intento codificar la variable de contraseña en md5sum, aparece una cadena con la codificación md5sum y un guión al final. Y cuando trato de poner un guión después, no funciona. Entonces mi pregunta es: ¿Cómo puedo eliminar el guión en la salida md5sum de la terminal Linux? Aquí está mi código:
#!/bin/bash read -p 'Password: ' passwordInput Password=$(echo -n "$passwordInput" | md5sum) if [ $Password = "0cbc6611f5540bd0809a388dc95a615b" ]; then clear echo "Password is good" else clear echo "Password is bad" fi exit 0;#!/bin/bash read Test Password=$(echo -n "$Test" | md5sum | cut -d' ' -f1) echo "" if [ $Password = "d41d8cd98f00b204e9800998ecf8427e" ]; then clear echo "WhOop WHOop" else echo ":(" fiTienes tres problemas.
En primer lugar, su pregunta no es muy clara. Actualícelo para indicar claramente lo que está preguntando (cómo desea que se comporte su programa y cómo no lo hace). En este caso, no es demasiado difícil de averiguar a partir de su código, pero eso no siempre es cierto. Usted escribe
No obtengo el "-" del linux md5sum.
pero, de hecho, el problema es que obtienes el "-" (y probablemente también más).
(ACTUALIZACIÓN: Mejor ahora, gracias.)
En segundo lugar, la salida de md5sum incluye información adicional después de la suma de verificación mostrada, y debe eliminarla. (Sería bueno si md5sum tuviera una opción para imprimir solo la suma de verificación, pero no la tiene). Afortunadamente, es fácil eliminar la información adicional; es solo un carácter espacial y todo lo que le sigue.
Tercero, porque estás usando comillas simples:
Password="$(echo -n '$Test' | md5sum)" la cadena que está pasando a md5sum es literalmente '$Test' , no el valor de su variable.
Arreglando el segundo y tercer problema:
#!/bin/bash read Test Password="$(echo -n "$Test" | md5sum | sed 's/ .*$//')" echo "" if [ "$Password" = "d41d8cd98f00b204e9800998ecf8427e" ]; then clear echo "WhOop WHOop" else echo ":(" fi Normalmente criticaría su uso del comando clear , pero en este caso está borrando una contraseña que ingresó el usuario. Pero no está limpiando la pantalla si el usuario ingresa una contraseña incorrecta. El comando de read de Bash tiene una opción para suprimir el eco de la entrada, y este es el uso perfecto para ello. Así es como podría hacerlo:
#!/bin/bash read -p "Password: " -s Test Password="$(echo -n "$Test" | md5sum | sed 's/ .*$//')" echo "" if [ "$Password" = "d41d8cd98f00b204e9800998ecf8427e" ]; then echo "WhOop WHOop" else echo ":(" fi (Por cierto, la cadena vacía es una contraseña pésima, al igual que cualquier cosa cuya md5sum se pueda encontrar con una búsqueda rápida en Google, como " Test ").
El "-" en md5sum indica que está utilizando una entrada estándar para md5sum. Si estuviera utilizando md5sum para un archivo, se mostraría un nombre de archivo en ese lugar.