提问人:Hajiko 提问时间:10/9/2023 最后编辑:tripleeeHajiko 更新时间:10/10/2023 访问量:40
do while true case 仅具有给定字符
do while true case with only the given character
问:
我需要一个脚本,在启动脚本后向我的服务器添加一些信息。 它需要输入 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
答:
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
评论