Estoy trabajando en una tarea. Tenemos que insertar 1000 usuarios diferentes basados en hombres y mujeres. Empecé con los machos. La idea es usar el script para insertar los 442 registros de un archivo .csv. Aquí está el guión:
#!/bin/bash while IFS=, read -r userName firstName lastName gender dob language bloodType zodiac constellation planet genre dino; do mongo USERNAME --eval 'db.USERNAME.insert({username:"'$userName'",first:"'$firstName'",last:"'$lastName'",gender:"'$gender'",dob:"'$dob'"})' done < males1.csvNo estoy insertando todos los campos porque estoy tratando de determinar el error. Cuando eliminé la parte dob del código, de repente funcionó. Se veía así:
mongo X --eval 'db.USERNAME_male_a5.insert({username:"'$userName'",first:"'$firstName'",last:"'$lastName'",gender:"'$gender'"})'Pude ingresar los 442 registros. Pero solo pude insertar el nombre de usuario, el apellido y el género. Necesito los otros campos allí también. Pero cuando agregué el dob, se me dio el siguiente error:
excepción no detectada: SyntaxError: "" literal no terminado antes del final del script: @(shell eval):1:96
Intenté cambiar las comillas, pero luego obtuve que el usuario X no está definido, lo que me confundió aún más.
Mi profesor nos dio esta sintaxis:
mongo USERNAME_a5 --eval 'db.USERNAME_{GENDER}_a5.insert({username:"", first:"", last:"", gender:"", dob:"", language:"", blood_type:"", zodiac:"", constellations:"", planets:"", tv_genre:"", dino:""})'Pero resultó ser difícil trabajar con esto, ya que me di cuenta de que necesitaba cambiar las comillas para que no inserte literalmente la palabra "$ nombre de usuario".
Gracias por tu tiempo.
Con todos esos caracteres entrecomillados, se puede pasar fácilmente por alto que la expansión del parámetro $dob no está entrecomillada, de modo que cuando dob es algo así como '1 de enero de 1990', el supuesto parámetro --eval se divide en los espacios en tres partes db.USERNAME.insert({username:"…",first:"…",last:"…",gender:"…",dob:"january fecha de nacimiento:" 1 enero y 1990"}) , lo que hace que el SyntaxError: "" literal not terminated . Puede corregir esto poniendo comillas dobles alrededor $dob (es decir …,dob:"'"$dob"'"})' ) y al menos todas las demás variables que pueden contener espacios.