"Identificador no válido" en el archivo leído

"Identificador no válido" en el archivo leído

En una conexión remota de Putty, intento leer un archivo línea por línea, cortar cada línea por delimitador (";") y ejecutar un comando si las variables satisfacen una condición. Sin embargo, al leer el archivo aparece "no es un identificador válido".

Sólo algo de lógica simple en el archivo test.sh:

while read download.archive
do
    likes = $(echo cut -d ";" -f 1 $line)
    echo $likes
    dislikes = $(echo cut -d ";" -f 2 $line)
    dislikes = $((dislikes * 95))
    url = $(echo cut -d ";" -f 3 $line)

if [$likes -gt $dislikes]
then
    youtube-dl --config-location youtube-dl-3.conf url
fi

done < download.archive

El archivo download.archive dice lo siguiente:

9873;354;https://www.youtube.com/watch?v=0fd56CGnVRU
3267;54;https://www.youtube.com/watch?v=Mq4jAwPdCMw
25411;871;https://www.youtube.com/watch?v=PcSBOUpgngM
2829;44;https://www.youtube.com/watch?v=S-rj8m7Ssow
921;303;https://www.youtube.com/watch?v=JchVQMuxRVA
2014;32;https://www.youtube.com/watch?v=H8Y_ZfNViPU

Sin embargo, cuando intento ejecutar ./test.sh, aparece "./test.sh: line 4: read: 'download.archive': not a valid identifier". Si el archivo es válido, ¿por qué arroja un error?

Respuesta1

Después de numerosos errores, aquí está el código de trabajo:

while IFS= read -r line; do

    likes=$(cut -d ";" -f 1 <<< "$line")
    dislikes=$(cut -d ";" -f 2 <<< "$line")
    likes=$((likes / 50))
    url=$(cut -d ";" -f 3 <<< "$line")

if [ $likes -gt $dislikes ]
then
    youtube-dl --config-location youtube-dl-3.conf $url
fi

done < download.archive

La primera línea del comando "leer" siempre es como la anterior (leerlínea), y el archivo a leer está después de la declaración "hecho" al final (hecho <descargar.archivo).Esta publicación aquíexplica las adiciones IFSy -r, y lo que hacen.

Al asignar variables, supongo que no se puede poner un espacio entre la asignación. Como tal, esto no funciona.

likes = $(cut -d ";" -f 1 $line)

Pero esto hace:

likes=$(cut -d ";" -f 1 $line)

...Excepto que para referirnos a la línea que el programa está leyendo actualmente, debemos usar <<<. Como esto:

likes=$(cut -d ";" -f 1 <<< $line)

Por último, al verificar una condición (en la ifdeclaración), debe haber un espacio entre los corchetes inicial y final, y la condición dentro, así:

if [ $likes -gt $dislikes ]

Para hacer referencia a la variable urlque contiene nuestra URL para youtube-dl, nos referimos a las variables usando un archivo $. Como esto:

$url

información relacionada