ここで動作するチュートリアルを読んだ。
while read line
do
wget -x "http://someurl.com/${line}.pdf" -o ${line}.pdf
done < inputfile
ただし、スクリプトは引き続き実行され、$line には値がありません。次の行が空の場合、または「信号」という単語が表示された場合は、スクリプトが停止するコードをどのように変更できますか?
ご協力ありがとうございます
答え1
以下は、長さ値0でwhileループを停止する方法ですline
。
#!/usr/bin/bash
while read line
do
if [[ -z $line ]]
then
exit
fi
wget -x "http://someurl.com/${line}.pdf"
done < inputfile
実際の問題は、「http」の前の一致しない二重引用符文字または「inputfile」の末尾の一致しないバックティック文字にある可能性があると思います。私のコード例を試す前に、参照をクリーンアップする必要があります。
答え2
while read line && [ "$line" != "quit" ]; do # ...
または空白行で停止します。
while read line && [ "$line" != "" ]; do # ...
または
while read line && [ -n "$line" ]; do # ...
さまざまなトピック:
"http://someurl.com/$line.pdf" -o "$line.pdf"
中かっこは必要ありませんが、最後の変数拡張の周りに二重引用符を使用する必要があります。
答え3
line=\ ; PS4='${#line}: + '
while read line <&$((${#line}?0:3))
do : "$line"
done <<msg 3</dev/null
one nice thing about allowing shell expansions to self test
is that the shell already has mechanisms in place for the
evaluation. its doing it all the time anyway. theres almost
nothing for you to do but to let it fall into place.
For example:
${line##*[ :: i doubt very seriously the shell will read any of this :: ]*}
msg
1: + read line
59: + : 'one nice thing about allowing shell expansions to self test'
59: + read line
58: + : 'is that the shell already has mechanisms in place for the'
58: + read line
59: + : 'evaluation. its doing it all the time anyway. theres almost'
59: + read line
52: + : 'nothing for you to do but to let it fall into place.'
52: + read line
12: + : 'For example:'
12: + read line
0: + : ''
0: + read line
それとも空の行を読んだらすぐに休憩を取ってください。
while read line && ${line:+":"} break
do : stuff
done
...うまくいくでしょう。