it-swarm-ja.com

アプリケーションがエラーを返した後、bashでループを続行するにはどうすればよいですか?

私は画像を保存します:

#!/bin/bash
for i in {1..30000}
do
    wget "http://services.runescape.com/m=itemdb_rs/3809_obj_Sprite.gif?id="$i
done

プロセスをスピードアップする方法はありますか? URLが存在しない場合があり、次のようになります。

connected.
HTTP request sent, awaiting response... 404 Not found
2012-08-04 18:09:36 ERROR 404: Not found.

このエラーの後で続行するにはどうすればよいですか?

3
Szymon Toda

試してみてください

wget "http://s.../m=itemdb_rs/3809_obj_Sprite.gif?id="$i || true

このように、wgetが失敗した場合でも、その行の結果はゼロのままであり、スクリプトは続行されます。

Bashスクリプトでエラーを適切に処理する方法については、次のリソースを確認してください。

9
Der Hochstapler

あなたはこのようなことを試すことができます。

#!/bin/bash
for i in {1..30000};
do 
x="http://64.79.147.130/m=itemdb_rs/3809_obj_Sprite.gif?id="$i
if [[ $(echo $(GET -sd $x | grep "404")) = "" ]]; 
then 
wget --no-dns-cache -nc -U"Firefox/10" $x 2>&1 \
| grep "Saving" | sed 's,Saving to,Saved,'; 
fi 
done
1
tao