1

私はシェルスクリプトを初めて使用します。テキスト ファイルから URL を 1 行ずつ読み取り、wget. また、エラー メッセージのログ ファイルを解析する必要があります。

#!/bin/sh
# SCRIPT:  example.sh

#reading the url file line by line

DIR = /var/www/html/

# wget log file
LOGFILE = wget.log

# wget output file
FILE = dailyinfo.`date +"%Y%m%d"`

cd $DIR

FILENAME = url.txt
cat $FILENAME | while read LINE
do
    echo "$LINE"
    wget $LINE -O $FILE -o $LOGFILE
done

を使用してアクセス許可を変更しましたchmod +x example.sh が、実行時に、およびcommand not foundのエラーが発生します。それを修正する方法は?また、解析部分についてはどうすればよいですか?DIRFILELOGFILE

4

3 に答える 3

7

問題#1、変数を割り当てるときは、次の構文を使用する必要があります。

VARIABLE=value

VARIABLEつまり、 the=と新しい値の間にスペースはありません。

VARIABLEそれ以外の場合は、エラーをトリガーするコマンドとして実行しようとしcommand not foundます。

#!/bin/sh
# SCRIPT:  example.sh

#reading the url file line by line

DIR=/var/www/html/

# wget log file
LOGFILE=wget.log

# wget output file
FILE=dailyinfo.`date +"%Y%m%d"`

cd $DIR

FILENAME=url.txt
cat $FILENAME | while read LINE
do
    echo "$LINE"
    wget $LINE -O $FILE -o $LOGFILE
done

おそらくコマンドが見つからないというエラーを乗り越えます

于 2013-01-15T15:02:00.197 に答える
2

=Petesh はもちろん正しいです。変数名の直後に記号を付ける必要があります。

この特定のケースでは、 を使用しwget -i input-urls.txt -o logfile.txt、ログファイルでエラーを grep することをお勧めします。wget の-iフラグは、テキスト ファイルから URL のリストを読み取り、それぞれを "wgets" するので、車輪を再発明する手間が省けます。

シェル スクリプトで使用する場合は、次のようなものを使用します。

#!/bin/sh
DIR=/var/www/html/
# wget log file
LOGFILE=wget.log
# wget output file
FILE=dailyinfo.`date +"%Y%m%d"`

# just for debugging
cd $DIR
echo "wget-ing urls from $FILE and writing them to $FILE in $DIR. Saving logs to $LOGFILE"

wget -i $FILE -o $LOGFILE
grep -i 'failed' logfile.txt

ログファイルからのエラーの例を次に示します。

--2013-01-15 15:01:59--  http://foo/
Resolving foo... failed: nodename nor servname provided, or not known.
wget: unable to resolve host address ‘foo’

wget のリターン コードを確認するのにも役立ちます。0は成功を示し、ゼロ以外の値はさまざまな失敗を示します。シェル変数にアクセスすることで確認できます$?

そのため、これを組み込んだサンプル スクリプトを次に示します。

#!/bin/sh
wget -i input-urls.txt -o logfile.txt
if [ $? -eq 0 ]; then
    echo "All good!"
else
    # handle failure
    grep -i 'failed' logfile.txt
fi

詳細が必要な場合は、wget のリターン コードがマニュアル ページ (または、このman wgetようなオンライン リソースを使用) に一覧表示されています。簡単な実験を行ったところ、URL の 1 つだけが失敗した場合でも、wget はゼロ以外の終了コードを返すようです。

于 2013-01-15T15:00:42.797 に答える
0

tcshで同じエラーメッセージが表示されました: Command not found.

奇妙なことに、それは行末が原因でした。まったく同じスクリプトが LF エンディングで機能しますが、CRLF エンディングでは失敗します。

于 2013-10-03T06:09:10.017 に答える