讀取文件時“不是有效的標識符”

讀取文件時“不是有效的標識符”

在 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

相關內容