0

サーバー上でドメインがアクティブかどうかを確認しようとしています。これまでのところ、エラーが発生します。

list=/root/domainlist.txt
for i in $(cat $list)
do
  echo "checking " $i
  $ip = host $i |grep -o -m 100 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
  if [[ $ip == "xx.xx.xx.xx" ]]; then
    $i >> /root/activedomains.txt
  fi
done

出力:

activedomains: line 4: =: command not found

これは私が得る現在のエラーです。

4

3 に答える 3

2

次の行に構文エラーがあります

$ip = host $i |grep -o -m 100 '...'

代わりに使用する必要があります:

ip=$(host $i |grep -o -m 100 '...')

ブール論理を使用するより良い方法(必要はgrepありません。失敗した場合はFALSEhost $ipを返します):

list=/root/domainlist.txt

while read ip; do
    echo "checking $ip"
    host "$ip" &>/dev/null && echo "$ip" >> /root/activedomains.txt
done < "$list"

それは

list=/root/domainlist.txt

while read ip; do
    echo "checking $ip"
    if host "$ip" &>/dev/null; then
        echo "$ip" >> /root/activedomains.txt
    fi
done < "$list"
于 2013-02-28T18:02:54.120 に答える
2
  • の前後にスペースを入れない=
  • 割り当てにドル記号がありません
  • おそらくコマンドの結果が必要なので、それを$( )

    ip=$(host $i |grep -o -m 100 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')
    

このようにファイルに書き込みます

echo "$i" >> /root/activedomains.txt
于 2013-02-28T17:58:43.453 に答える
1

$ipまず、に割り当てるべきではありませんip... ですが、さらにエラーが発生する可能性があります。

私の推測では、あなたが望んでいたでしょう (4/5 行目):

ip=$(host $i |grep -o -m 100 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')

user000001 の回答もお読みください。echo出力を取得する際の欠落、別の問題です。

于 2013-02-28T17:58:34.957 に答える