シェルスクリプトで、URL一覧ファイルから各URL行を取得し処理を行いたい。
解決策
url.txt
というテキストファイルにURL一覧が記載されている場合、
以下のように標準入力へリダイレクトさせることで、各行を取得できる。
while read url
do
echo $rul
done < url.txt
例: ファイルの最終行に改行がある場合
url.txt
の内容が以下の場合、
% cat url.txt
URL1
URL2
URL3
%
以下のシェルスクリプトで、各行を処理できる。
% while read url
while> do
while> echo $url
while> done < url.txt
URL1
URL2
URL3
%
例: ファイルの最終行に改行がない場合
url_with_eol.txt
の内容が以下のように
最終行に改行がない場合、
% cat url_with_eol.txt
URL1
URL2
URL3%
以下のシェルスクリプトを実行すると、最終行が処理されない。
% while read url
while> do
while> echo $url
while> done < url_with_eol.txt
URL1
URL2
%
これは、read
は行内にファイルの終端があるとFALSE
を返すためらしい。
回避策は2つある。
- ファイルの最終行に必ず改行を入れる
- シェルスクリプトの
while
文の条件を変更する
回避策: シェルスクリプトのwhile
文の条件を変更する
while
文の条件に、|| [ -n "${url}"]
を追加し、
read
がFALSE
を返しても、url
に1文字以上あれば、処理を行うように修正する。
% while read url || [ -n "${url}"]
while> do
while> echo $url
while> done < url_with_eol.txt
URL1
URL2
URL3
%