典型状况是,你或许会碰见文件名或是数据库的键。你提示用户要输入一个所有由大小写字母和数字组成的字符串,没有标点,没有特殊字符,没有空格。他们是否输入正确了?这就是这个脚本要测试的内容。 shell
validAlphaNum.sh # validAlphaNum.sh - 确保输入只由数字、字母构成 #!/bin/sh validAlphaNum() { # 合法化参数:都是大写字母+小写字母+数字,返回0;不然,返回1 # 删除全部不可接受的字符 compressed="$(echo $1 | sed -e 's/[^[:alnum:]]//g')" if [ "$compressed" != "$input" ]; then return 1 else return 0 fi }该函数的示例用法。下面的代码直接添加到 validAlphaNum.sh中:
validAlphaNum.sh echo -n "输入:" read input if ! validAlphaNum "$input"; then echo "输入只能是字母和数字。" >&2 exit 1 else echo "输入合法。" fi exit 0
脚本分析:
脚本的逻辑是很明确的。首先,它用sed将输入转换为全新的。而后,比较了新的数据和原始的。若是2个彻底相同,那么很是完美。不然,转换中丢失的数据就不属于字符数字的集合,因此原始输入时非法的。
sed的特殊做用是处理不在POSIX字符类[:alnum:]中的数据。该字符类是全部大写字母、小写字母、数字的集合。若是sed处理后的数据并不匹配以前的输入,那么全部字母数字的移动揭示了这样一个问题:在输入字符串(非法的)中有非数字字母的存在,而后函数会返回一个非0值。 数据库
运行脚本:
这个脚本自己是完备的。它会提示输入,并通知你结果是否合法。这个函数的更典型的用法是放在一个脚本或者一个库的头部。会在第12个脚本中演示。
这个脚本展现了一个很是好的通常性的shell脚本编程技术:先写下一个函数,而后紧接着就测试下。完毕后,再把这个函数放到一个更大、更完备的脚本中。这样,会给你之后省下很多事。 编程
结果: 函数
./validAlphaNum.sh 输入:valid123SAMPLE 输入合法。
./validAlphaNum.sh 输入:this is most assuredly NOT valid, 12345 输入只能是字母和数字。