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 IFS
y -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 if
declaració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 url
que contiene nuestra URL para youtube-dl, nos referimos a las variables usando un archivo $
. Como esto:
$url