您的位置:首页 > 运维架构 > Shell

shell脚本之从用户读取输入并进行验证

2014-08-12 14:41 519 查看
shell从经常需要用read命令从终端读取用户输入,并验证输入的数据是否合法。常见的验证有验证输入的是否是一个数值,是否是一个有效的IP地址等等。

shell本身并没有提供这些验证数据合法性的命令。以下是用来验证数据合法性的一些接口。这些接口封装了read命令在里面。

1.验证输入的是否是数字

#$1: input promt
#@usage:从终端读取用户输入,除非获得一个有效的用户输入,不然会一直读取
ReadAndCheckNumber()
{
local isLegalInput=no
gNumber="NULL"

while [ ${isLegalInput} = "no" ];
do
#如果用户输入ENTER,则表示为默认,退出
read -p "$1"

test -z $REPLY && break;

echo "$REPLY" | grep -q '[^0-9]'
if [ $? -ne 0 ];then
isLegalInput=yes
#gNumber=$REPLY
else
echo "Wrong format!!!"
fi
done
}


举个例子。

ReadAndCheckNumbern "Please Input a Number"

test -z $REPLY && val=$REPLY

2.验证输入是否为有效的IP地址

#$1: input promt
checkValidIP()
{
local isLegalInput=no

while [ ${isLegalInput} = "no" ];
do
read -p "$1"

test -z $REPLY && break;

echo "$REPLY" | grep -q '[^0-9.]' && echo "Wrong format!!!" && continue
[ $(echo -e "${REPLY//./\n}" | wc -l) -ne 4 ] && echo "Wrong format!!!" && continue

n=1
for i in x y z w;do
export ip$i=$(echo $REPLY | cut -f$n -d".")
((n+=1))
done

[ $ipx ] && (( $ipx>=0 && $ipx<256 ))&&\
[ $ipy ] && (( $ipy>=0 && $ipy<256 ))&&\
[ $ipz ] && (( $ipz>=0 && $ipz<256 ))&&\
[ $ipw ] && (( $ipw>=0 && $ipw<256 ))

if [ $? -eq 0 ];then
isLegalInput=yes
else
echo "Wrong format!!!"
fi

done
}


#输入测试

#a.b.c.d

#1.1.1

#1...

#1.2.3.4.5

3.验证Yes/No

checkYesOrNo()
{
read -p "$1"

case $REPLY in
[Nn] | [Nn][Oo] )
echo "no";;
[Yy] | [Yy][Ee][Ss] )
echo "yes";;
esac
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell