iblocklist.com からアーカイブを取得し、それを送信ブロックリスト ディレクトリに抽出する簡単な bash スクリプトを作成しました。何度か実行に失敗した後、iblocklist によってプッシュされた .gz アーカイブが破損していることがわかりましたが、.zip は破損していないため、エラー キャッチとタスクを達成するための代替手段を実装することにしました。スクリプトを書き直した後、予期しない EOF エラーが発生し、どこに問題があるのか わかりません。私は決して bash の上級ユーザーではありませんが、通常は、試行錯誤と Google を使用して目的を達成できます。今日ではありません。明らかな欠落している}、fi、および;を探しましたが、それは私には良さそうです。問題があるかどうかはわかりませんが、このマシンでは、多かれ少なかれ常にルートになるように強制するBacktrack Linuxディストリビューションを実行しています。初心者なのでお手柔らかにお願いします(;_;)
#!/bin/bash
function test {
"$@"
STATUS=$?
if [ $STATUS -ne 0 ]; then
echo "error with $1";
fi
return $STATUS
}
function askyn {
read -p "The operation failed. Try alternate means? [Y/n] " -n 1 -r
if [[ "$REPLY" =~ ^[Yy] ]] || [[ "$REPLY" = "" ]]; then YN=1;
else YN=0; fi
return $YN
}
function cleanup {
if [ $ALT == 0 ]; then {
test rm /root/scripts/.lvl1/dl/level1.gz
if [ $STATUS -ne 0 ]; then {
echo Removal of archive failed
}fi
}else {
test rm /root/scripts/.lvl1/dl/level1.zip
if [ $STATUS -ne 0 ]; then {
echo Removal of archive failed
}fi
}fi
return
}
ALT=0
YN=-1
test wget "http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz" -O /root/scripts/.lvl1/dl/level1.gz
if [ $STATUS -ne 0 ]; then { #wget failed first try
askyn
if [ $YN == 1 ]; then ALT=1;else exit;fi #prompt for alternate; exit if not
}else { #wget worked first try
test file-roller -e /root/.config/transmission/blocklists /root/scripts/.lvl1/dl/level1.gz
if [ $STATUS -ne 0 ]; then { #file-roller failed to extract the list
askyn
if [ $YN == 1 ]; then ALT=1;else exit;fi #prompt for alternate; exit if not
}else { #everything worked first try
echo Download and extraction successful
cleanup
}fi
}fi
if [ $ALT == 1 ]; then { #try to wget .zip
test wget "http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=zip" -O /root/scripts/.lvl1/dl/level1.zip
if [ $STATUS -ne 0 ]; then { #wget of .zip failed
echo Alternate means failed. Exiting.
exit
}else { #wget of .zip worked
test unzip -o -d /root/.config/transmission/blocklists /root/scripts/.lvl1/dl/level1.zip #try to unzip .zip
if [ $STATUS -ne 0 ]; then { #unzip failed
echo Alternate means failed. Exiting.
exit
}else { #everything worked second try
echo Download and extraction successful using alternate means
cleanup
}fi
}fi
}fi