linux - While 循环/if else 循环读取和验证 IP 地址

标签 linux bash shell scripting

<分区>

下面的程序应该读取并验证用户键入的 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
    

最佳答案

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"

关于linux - While 循环/if else 循环读取和验证 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791832/

相关文章:

linux - 将 WiFi Dongle 与 Beaglebone Black-Issue 集成

c - "cd"命令在我的自定义 shell 中不起作用

bash -/root/.bashrc 是做什么的?

linux - 是否所有命令 shell 脚本都有一个通用名称?

linux - 如何找到没有。 bash 字符串中某个字符出现的次数?

linux - 如何在linux上将安装的gdb添加到系统路径

Bash 流水线执行

json - 有没有办法读取JSON文件中的所有键值对,然后在shell中相应地初始化所有变量?

linux - 如何在 shell 脚本中使用冒号从 mysql 中分离检索到的数据?

linux - 从命令行计算多个子目录中的文件数量