«Недопустимый идентификатор» в файле прочитано

«Недопустимый идентификатор» в файле прочитано

В удаленном подключении Putty я пытаюсь прочитать файл построчно, разрезать каждую строку по разделителю (";") и выполнить команду, если переменные удовлетворяют условию. Однако при чтении файла я получаю сообщение "недопустимый идентификатор".

Немного простой логики в файле 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

Файл download.archive выглядит следующим образом:

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

Но когда я пытаюсь запустить ./test.sh, я получаю "./test.sh: line 4: read: 'download.archive': not a valid identifier". Если файл действителен, почему он выдает ошибку?

решение1

После многочисленных ошибок вот рабочий код:

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

Первая строка команды «read» всегда такая же, как указано выше (readлиния), а файл, который нужно прочитать, находится после оператора «done» в конце (done <скачать.архив).Этот пост здесьобъясняет IFSи -rдополнения, а также их действие.

При назначении переменной, я думаю, нельзя ставить пробел между назначениями. Таким образом, это не работает

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

Но это так:

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

...За исключением того, что для ссылки на строку, которую программа в данный момент читает, мы должны использовать <<<. Вот так:

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

Наконец, при проверке условия (в ifоператоре) между начальной и конечной скобками, а также условием внутри должен быть пробел, например:

if [ $likes -gt $dislikes ]

Чтобы сослаться на переменную url, которая содержит наш URL для youtube-dl, мы ссылаемся на переменные, используя $. Вот так:

$url

Связанный контент