【问题标题】:Verify if IP present in file [duplicate]验证文件中是否存在 IP [重复]
【发布时间】:2019-12-26 18:12:35
【问题描述】:

验证文件中是否存在基本机器 IP

尝试使用带有 if 条件的 for 循环来解决它

#!/bin/bash
#file with IP List /tmp/ip_list.txt
curr_ip="$(hostname -I)"
for n in `cat /tmp/ip_list.txt`; 
do 
  if [ "$n" == "$curr_ip" ]; then
    echo "success"
  else
        echo "fail"
  fi
done

默认情况下是运行 else 条件。

【问题讨论】:

  • 如果ip_list.txt 文件包含逐行数据,您最好使用grep 来查找给定IP 是否出现在文件中。
  • /tmp/ip_list.txt的格式是什么?如果在 for 循环中回显出 $n 的值会怎样?
  • 它的IP格式如下:x.x.x.x x.x.x.x
  • edit您的问题,而不是在评论中添加信息。要调试您的代码,您可以打印$n$curr_ip,最好在其前后添加一些特殊字符,例如echo "n <$n> curr_ip <$curr_ip>"

标签: linux bash shell sh


【解决方案1】:
#!/bin/bash

curr_ip="$(hostname -I)"

output=$(grep -c /tmp/ip_list.txt)

if [ "$output" != "0" ]
then
   echo "success"
else
   echo "failure"
fi 

grep 中的 -c 选项为您提供计数。如果它不等于 0,它发现了一些东西。

【讨论】:

  • 我建议不要读取grep 的输出,而是使用它的退出代码来区分找到和未找到。 if fgrep "$curr_ip" /tmp/ip_list.txt > /dev/null ; then echo success; else echo failure; fi
  • 是的。这也有效。我经常使用 -c,因为如果它找到多个,我可能想要一个条件。
  • 如果说 [[ 10.10.10.10 == 10.10.10.10 ]] 然后回显成功,我想执行一些命令;否则回显失败;菲
  • 我认为这不适用于 IP 范围它总是返回失败响应: if fgrep "$(hostname -I)" /tmp/ip_list.txt > /dev/null ;然后回显成功;否则回显失败; fi ip_list.txt: 10.10.10.10 10.10.10.11 主机名-I --> 10.10.10.11
  • @SAM 您的所有解释或附加信息都应添加到问题中。 cmets中的sn-ps代码难以阅读,无法正确格式化多行数据。在你的问题中用正确的格式写下所有这些。
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2021-07-23
  • 2019-05-29
  • 1970-01-01
  • 2014-02-01
相关资源
最近更新 更多