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

来源:互联网 发布:旅游教学软件 编辑:程序博客网 时间:2024/05/21 22:49

shell从经常需要用read命令从终端读取用户输入,并验证输入的数据是否合法。常见的验证有验证输入的是否是一个数值,是否是一个有效的IP地址等等。

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

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

#$1: input promt
#@usage:从终端读取用户输入,除非获得一个有效的用户输入,不然会一直读取ReadAndCheckNumber(){local isLegalInput=nogNumber="NULL"while [ ${isLegalInput} = "no" ];do                #如果用户输入ENTER,则表示为默认,退出read -p "$1"test -z $REPLY && break;echo "$REPLY" | grep -q '[^0-9]'if [ $? -ne 0 ];thenisLegalInput=yes#gNumber=$REPLYelseecho "Wrong format!!!"fidone}

举个例子。

ReadAndCheckNumbern "Please Input a Number"

test -z $REPLY && val=$REPLY


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

#$1: input promt
checkValidIP(){local isLegalInput=nowhile [ ${isLegalInput} = "no" ];doread -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;doexport 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 ];thenisLegalInput=yeselseecho "Wrong format!!!"fidone}

#输入测试

#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}



0 0