do while true case 仅具有给定字符

do while true case with only the given character

提问人:Hajiko 提问时间:10/9/2023 最后编辑:tripleeeHajiko 更新时间:10/10/2023 访问量:40

问:

我需要一个脚本,在启动脚本后向我的服务器添加一些信息。 它需要输入 IP 地址,但如果我没有以正确的形式输入 IP,我也希望它向我发送错误消息。

我试过什么:

while true ; do
   read -p "which IP did the Location used? in this form xx.xx.xx" newip
   case $newip in
       [0123456789.]* )echo "success";break;;
       * ) echo "only input in this Form xx.xx.xx";;
   esac
done

我想要什么:

which IP did the Location use? in this form xx.xx.xx
input: 10.10.10
output: success

which IP did the Location use? in this form xx.xx.xx
input: 10-10.10
output: only input in this Form xx.xx.xx

which IP did the Location use? in this form xx.xx.xx
input: 10.10.10
output: success
bash do-while

评论

0赞 Community 10/9/2023
请澄清您的具体问题或提供其他详细信息以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

0赞 jhnc 10/9/2023 #1

在 glob 中,匹配任何字符。*

Bash 确实有正则表达式支持,使用 .例如:=~

if [[ $newip =~ ^[0-9]{2}\.[0-9]{2}\.[0-9]{2}$ ]]; then
    echo ok
else
    echo bad
fi
0赞 tripleee 10/10/2023 #2

如果你想坚持,你可以排除错误的部分,专注于那些正确的部分。case

while true ; do
   read -p "Which IP did the location use? In this form xx.xx.xx.xx " newip
   case $newip in
       *[^0-9.]* | *.*.*.*.* ) ;;
       *.*.*.* ) echo "success"; break ;;
       * ) ;;
   esac
   echo "only input in this Form xx.xx.xx.xx" >&2
done

真实 IP 地址有四个八位字节;如果你真的只想要三个,那么希望如何改变这一点应该是显而易见的。

也许还会注意到在提示末尾添加了一个空格(以及一些小的英语修复)。read -p