bash中的变量验证(名称和IP地址)

pi-*_*-2r 1 variables validation bash

在我的bash脚本的标题中,我必须询问用户名和他的IP地址.

我需要以这种方式验证条目:

  • 用户名必须存储在name变量中,并用下划线替换其空间.对于用户点击的示例"Albert Smith",我必须存储"Albert_Smith"到我的变量中name.
  • 对于ip地址,我需要知道ip地址是否与格式一致.如果格式不好,我必须报告错误并提示用户输入一个好的IP地址继续操作.

我知道我需要使用"阅读",但我不知道要实现我的短脚本(替换和验证).预先感谢 :)

Ger*_*cia 7

还有另一种方式.仅限Bash:

#!/bin/bash

read name
name=${name// /_}

read ip
if [[ "$ip" =~ ^([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})[.]([0-9]{1,3})$ ]]
then
    for (( i=1; i<${#BASH_REMATCH[@]}; ++i ))
    do
      (( ${BASH_REMATCH[$i]} <= 255 )) || { echo "bad ip" >&2; exit 1; }
    done
else
      echo "bad ip" >&2
      exit 1;
fi

echo "name:$name"
echo "ip:$ip"
Run Code Online (Sandbox Code Playgroud)


Omr*_*iko 5

不完全是问题的答案,但对于那些喜欢“单行”的人来说,IP 验证正则表达式:

[[ "$IP" =~ ^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ ]] && echo "valid" || echo "invalid"
Run Code Online (Sandbox Code Playgroud)