2016-01-13 56 views
1

我对脚本编程相当陌生,目前正在尝试做一个简单的if else循环,通过一个同时包含ipaddress和hostname的文件。它基本上检查他们是否在线。bash - 如何正确循环使用

这是我有:

for ip in `cat /tmp/blabla2 | awk '{print $1}'` ; do 
if ping -c1 $ip >/dev/null 2>&1; then 
fqdn=`host $ip | awk '{print $5}'` 
echo "$ip $fqdn is UP" 
else 
fqdn=`host $ip | awk '{print $5}'` 
echo "$ip $fqdn is DOWN" 
fi 
done 

东西我也很难理解是如何将主机名不使用类似主机$ IP

它似乎没有必要必须做的另一台主机当主机名已经在/ tmp/blabla2中的同一行上查找时

我试过在使用awk打印的if循环中弄乱变量但没有运气。

对此有任何提示/技巧? 感谢您的时间

+0

为什么你管blabla2 awk只打印第一列? – jayant

+0

测试文件'blabla2'包含以下内容: 123.123.123.123 test.com –

+0

只需打印$ 2而不是$ 1就足够了吗? – jayant

回答

0

不要读取for循环中的文件行(reference)。 read命令可以读取文件行中的多个单词。

while read -r ip host; do 
    if ping -c1 $ip >/dev/null 2>&1; then 
     echo "$ip $host is UP" 
    else 
     echo "$ip $host is DOWN" 
    fi 
done < /tmp/filename 

缩进对维护自己的代码非常重要。

+0

谢谢格伦,我尽量保持正确的缩进,但发现很难做到在stackoverflow。 感谢您的回答。这帮助了我很多。 :) –

+0

关于缩进,我经常在我的编辑器中编写代码并将其粘贴到此处的答案框中。另见https://stackoverflow.com/editing-help('ctrl-k'很有用) –