【问题标题】:While loop/ if else loop to read and validate IP address [closed]While循环/ if else循环读取和验证IP地址[关闭]
【发布时间】:2013-12-26 22:00:07
【问题描述】:

下面的程序应该读取并验证用户键入的 IP 地址。 IP 验证工作正常。我需要弄清楚设置条件(while/if&else),以防在输入无效 IP 地址的情况下提示用户重新输入 IP?

        echo "Enter an IP address:"
          read IP_ADDRESS
   


    # Check if the format looks right 
    if echo "$IP_ADDRESS" | egrep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
    then
  

     #check that each octect is less than or equal to 255:
     VALID_IP_ADDRESS="$(echo $IP_ADDRESS | awk -F'.' '$1 <=255 && $2 <= 255 && $3 <= 
     25&&  $4 <= 255')" 
     
    
    ## Here is the Pseudo code of  what I am trying to achieve 
    # If the IP address is not VALID_IP_ADDRESS prompt the user to re-enter IP
    #Pseudo Code not actaul
    while [[ ! VALID_IP_ADDRESS]] do 
    read -p "Not an IP. Re-enter: " IP_ADDRESS
     done
     # Another way to I tried 
     if  $VALID_IP_ADDRESS; then
    
     echo "You have alright IP address!"
     else
    read -p "Not an IP. Re-enter: " IP_ADDRESS
    fi
    

【问题讨论】:

  • 为什么要重新设计轮子?使用ipcalc。此工具在成功时返回 0,在失败时返回 1。因此ipcalc -s -c &lt;ip&gt; 如果 ip 有效则返回 0,如果无效则返回 1。作为旁注:有两个if,但只有一个fi

标签: linux bash shell scripting


【解决方案1】:
is_valid() {
    IP_ADDRESS="$1"
    # Check if the format looks right_ (Added the two extra meta characters for better results)
    echo "$IP_ADDRESS" | egrep -qE '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' || return 1
    #check that each octet is less than or equal to 255:
    echo $IP_ADDRESS | awk -F'.' '$1 <=255 && $2 <= 255 && $3 <=255 && $4 <= 255 {print "Y" } ' | grep -q Y || return 1
    return 0
}

read -p "Enter a valid IP: " IP_ADDRESS
while ! is_valid "$IP_ADDRESS"
do
    read -p "Not an IP. Re-enter: " IP_ADDRESS
done
echo "Success.  You entered a valid IP address of $IP_ADDRESS"

【讨论】:

  • 抱歉延迟回复-感谢您分享的非常清晰/直观的答案。谢幕。 @John1024
【解决方案2】:

您缺少done 来关闭while [[ ! VALID_IP_ADDRESS]] do。尝试添加它,看看您当前的解决方案是否有效。您也没有在循环中重新检查重新输入的 ip。

【讨论】:

  • 我已经做了,没用
  • “if”块之一缺少“fi”
  • 您也没有在重新输入的循环中重新检查 ip。
  • @Tobi Hahn 说得好,我更多的是质疑代码的逻辑,你指出的是我会修复的东西
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2014-03-30
  • 2012-06-18
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多