目前我正在 BASH 中创建一个小脚本,要求用户填写新的 IP 地址、子网和网关。该输入进入一个文件,该文件将被写入 /etc/network/interface..
我得到了脚本的工作,但它不是防弹的。
当用户输入的不是数字而是字母时,返回,用户需要重新填写一个数字。当用户仍然使用字母字符时,脚本会继续,即使给出错误。
我的代码:
echo "Fill in your IP"
read NEW_IP
oldIFS=$IFS
IFS=.
set -- $NEW_IP
while [ $# -ne "4" ]; do
echo "Must have 4 parts"
read NEW_IP
set -- $NEW_IP
done
for oct in $1 $2 $3 $4; do
echo $oct | egrep "^[0-9]+$" >/dev/null 2>&1
while [ "$?" -ne "0" ]; do
echo "$oct is not numeric. fill your IP in the correct format;"
read NEW_IP
set -- $NEW_IP
done
我是 bash 的新手,上面不是我自己做的。我在互联网上找到了这个脚本。while 和 do 是我自己做的一个循环。每次用户填写错误的数字它必须返回,直到用户填写正确的格式。
真正的问题在于代码的后半部分。当我填写错误的 IP(如 10.10.10.a)时,我得到了我想要的错误,我必须第二次填写我的 IP。当我输入 10.41.12.r 时,出现了一个错误,但这一次,没有抱怨最后的 r,但仍然抱怨我首先插入的 a。10.41.12 将被检查,但最后一个字符不同。
我可以想象一切都将存储在内存中,但我该如何清除呢?unset 或 $oct=
不起作用
希望有人可以帮助我。这是我第一次编程,这让我很头疼
谢谢。
戴夫