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 ]
url
youtube-dl URLを含む変数を参照するには、$
次のように.likeを使用します。
$url