读取文件时“不是有效的标识符”

读取文件时“不是有效的标识符”

在 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保存 youtube-dl url 的变量,我们使用$.像这样:

$url

相关内容