我基本上想要以下内容:
#full .co.uk/.com domain names are kept in /var/www/vhosts
for each in /var/www/vhosts
do
echo "Attempting to ping $each"
ping -c 1 $each
if [ $? comes back with an IP ]; then
echo "The web server for $each is responding. $each points to $IPADDRESS"
domainlist=`echo "$each points to $IPADDRESS" >> domaintoiplist.txt`
echo ""
else
echo "Host $each is not reachable!"
fi
done
我无法工作的一点是ping无论如何返回退出状态0。我是否需要以下解决方案:Ping function having undesirable results
答案 0 :(得分:3)
我相信,这可以做得更简单,但我不是一个重击大师:)
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
。
我认为,这是目前的问题。
答案 1 :(得分:0)
归功于https://stackoverflow.com/users/1032504/michel-feldheim
最终的脚本如下:
#!/bin/bash
# Get the IP addresses assigned to the server. This can be used later to match the domains to the servers IP addresses.
IPs=`ifconfig | grep "inet addr" | awk '{print $2;}' | cut -c 6-19 | grep -v "127.0"`
echo "=== This server's IP addresses: ==="
ifconfig | grep "inet addr" | awk '{print $2;}' | cut -c 6-19 | grep -v "127.0"
echo "=== Done. They are listed above. ==="
echo ""
#change the directory where the sites are located below
for domain in $(ls -lA /var/www/vhosts | grep "^d" | sed -E 's/.* ([^ ]+)?$/\1/g' | grep -v '.skel\|chroot\|default\|fs\|fs-passwd\|httpsdocs');
do
echo "Attempting to ping $domain"
ip=$(ping -c 1 $domain|grep "PING" | sed -E 's/PING .* .([0-9.]+). .*/\1/g' | grep -v '.skel\|chroot\|default\|fs\|fs-passwd\|httpsdocs');
if [ ${PIPESTATUS[0]} -eq 0 ];
then
echo "${domain} points to ${ip}";
#the below line doesn't output to STDOUT on purpose, it goes into the file below.
echo -e "${domain} points to ${ip}" >> domaintoiplist.txt
echo ""
else
echo "Host ${domain} is not reachable!"
echo ""
fi;
done
echo "==== Done. Written a list of domains & its IP to domaintoiplist.txt in the current directory. ===="