ファイルの読み込み中に「有効な識別子ではありません」

ファイルの読み込み中に「有効な識別子ではありません」

Puttyリモート接続では、ファイルを1行ずつ読み取り、各行を区切り文字( ";")に切り捨て、変数が条件を満たしている場合にコマンドを実行しようとします。ただし、ファイルを読み取ると、「有効な識別子ではありません」というメッセージが表示されます。

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

「読み取り」コマンドの最初の行は常に次のようになります(読み取りワイヤー)、読み取るファイルは末尾の「done」ステートメントの後にあります(done <アーカイブのダウンロード)。この記事はこちらこれらの内容IFS-r追加の内容が説明されており、その内容が何であるかを説明します。

変数を割り当てると、割り当ての間にスペースを入れることができないようです。だからこれはうまくいきません

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

しかしそれははい:

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

...ただし、プログラムが現在読んでいる行を参照するには、次のように.likeを使用する必要があります<<<

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

最後に、(ステートメントで)条件を確認しながら、次のようにif開いている括弧と閉じ括弧の間、および内部条件の間にスペースを含める必要があります。

if [ $likes -gt $dislikes ]

urlyoutube-dl URLを含む変数を参照するには、$次のように.likeを使用します。

$url

関連情報