- /var/www/vhosts 内のすべてのファイルを調べ、ディレクトリをフィルター処理し、名前のみを取得します
- ドメインにpingを実行し、最初の行からIPアドレスを取得します
- ping の終了コードはPIPESTATUS経由でアクセスできます
- ポジティブ (終了コード 0) をファイルに書き込みます
これはもっと簡単にできると確信していますが、私はbashの達人ではありません:)
for domain in $(ls -lA /var/www/vhosts | grep "^d" | sed -E 's/.* ([^ ]+)?$/\1/g');
do
ip=$(ping -c 1 $domain|grep "PING" | sed -E 's/PING .* .([0-9.]+). .*/\1/g');
if [ ${PIPESTATUS[0]} -eq 0 ];
then
echo "${domain} translates to ${ip}";
echo -e "${domain}\t${ip}" >> translation.txt;
fi;
done
私のテストフォルダ
# ls -al /var/www/vhosts
-rw-r--r-- 1 root root 0 29. Jan 15:45 other
-rw-r--r-- 1 root root 699 29. Jan 16:34 translation.txt
drwxr-xr-x 2 root root 4096 29. Jan 16:12 www.adasdasdadasdadsadadasdasdasd.com
drwxr-xr-x 2 root root 4096 29. Jan 15:44 www.doesntexist.com
drwxr-xr-x 2 root root 4096 29. Jan 15:44 www.google.com
私の出力
www.doesntexist.com translates to 204.13.248.119 // uh, actually it DOES exist :)
www.google.com translates to 173.194.35.145
編集
プログラムの出力を別のプログラムにパイプする$?
と、受信プログラムの終了コードが含まれます。パイプ チェーンで以前に呼び出されたプログラムの終了コードを取得するには、bash-internal 変数を使用できます$PIPESTATUS
。
これが現在の問題だと思います。