"Não é um identificador válido" no arquivo lido

"Não é um identificador válido" no arquivo lido

Em uma conexão remota do Putty, estou tentando ler um arquivo linha por linha, cortar cada linha por delimitador (";") e executar um comando se as variáveis ​​satisfizerem uma condição. No entanto, recebo "identificador inválido" ao ler o arquivo.

Apenas alguma lógica simples no arquivo 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

O arquivo download.archive é o seguinte:

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

No entanto, quando tento executar ./test.sh, recebo "./test.sh: line 4: read: 'download.archive': not a valid identifier". Se o arquivo for válido, por que está gerando um erro?

Responder1

Depois de vários erros, aqui está o código funcional:

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

A primeira linha do comando "read" é ​​sempre igual à anterior (readlinha), e o arquivo a ser lido está após a instrução "done" no final (done <baixar.arquivo).Esta postagem aquiexplica as adições IFSe -re o que elas fazem.

Ao atribuir variáveis, acho que você não pode colocar um espaço entre as atribuições. Como tal, isso não funciona

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

Mas isso faz:

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

...Exceto que, para nos referirmos à linha que o programa está lendo no momento, devemos usar <<<. Assim:

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

Por último, ao verificar uma condição (na ifinstrução), é necessário haver um espaço entre os colchetes inicial e final, e a condição dentro, assim -

if [ $likes -gt $dislikes ]

Para nos referirmos à variável urlque contém nosso URL do youtube-dl, nos referimos às variáveis ​​​​usando um arquivo $. Assim:

$url

informação relacionada