第一章:The Missing Code Library--6.合法化浮点数输入
2012-12-06 10:49
495 查看
咋一看,在一个shell脚本中合法化一个浮点值的过程看起来有些挫,但想想看浮点数也不过就是一个用小数点分割开来的2个整数。联系第5个脚本validint.sh,你会发现浮点数合法化的测试短的让人惊讶。
代码:
validfloatNew.sh
代码:
validfloatNew.sh
#!/bin/sh source validint.sh validfloat() { fvalue="$1" delimiter="$(echo $fvalue | sed 's/[^e|^E]//g')" if [ ! -z $delimiter ]; then #测试下是否有e或E if [ ${#delimiter} -ne 1 ]; then #e或E不能有多个 echo "only one e or E." return 1 fi decimalPart="$(echo $fvalue | cut -d. -f1)" #小数点前部分 part="$(echo $fvalue | cut -d. -f2-)" #小数点后部分,注意f2后有一小横,目的是输出剩下的所有域 fractionalPart="$(echo $part | cut "-d$delimiter" -f1)" #小数点后,e前部分 exponent="$(echo $part | cut "-d$delimiter" -f2)" #e后部分 if ! validint "$decimalPart" "-9" "9"; then #测试小数点前的部分是不是一个数字,即0-9范围内 echo "scientific notation's decimal part abs must in [0-9]." return 1 fi if [ "${fractionalPart%${fractionalPart#?}}" = '-' ]; then #测试小数部分第一个符号是不是负号 echo "scientific notation's fractional portion cannot be negative." return 1 fi if [ "$fractionalPart" = "" ]; then #测试小数部分是不是为空 echo "scientific notation's fractional portion is empty." return 1 else if ! validint "$fractionalPart" "" ""; then #测试小数部分是不是整数 echo "scientific notation's fractional portion is not integer." return 1 fi fi if ! validint "$exponent" "" ""; then echo "scientific notation's exponent not integer." return 1 fi elif [ ! -z $(echo $fvalue | sed 's/[^.]//g') ]; then decimalPart="$(echo $fvalue | cut -d. -f1)" fractionalPart="$(echo $fvalue | cut -d. -f2)" if [ ! -z $decimalPart ]; then if ! validint "$decimalPart" "" ""; then return 1 fi fi if [ "${fractionalPart%${fractionalPart#?}}" = "-" ]; then echo "Invalid floating-point number: '-' not allowed \ after decimal point" >&2 return 1 fi if [ "$fractionalPart" != "" ]; then if ! validint "$fractionalPart" "0" ""; then return 1 fi fi if [ "$decimalPart" = "-" -o -z "$decimalPart" ]; then if [ -z $fractionalPart ]; then echo "Invalid floating-point format." >&2 fi fi else if [ "$fvalue" = "-" ]; then echo "Invalid floating-point format." >&2 return 1 fi if ! validint "$fvalue" "" ""; then return 1 fi fi return 0 } if validfloat $1; then echo "$1 is a valid floating-point value" fi
相关文章推荐
- 第一章:The Missing Code Library--6.合法化浮点数输入
- 第一章:The Missing Code Library--2.合法化输入
- 第一章:The Missing Code Library--5.合法化整型输入
- 第一章:The Missing Code Library--2.合法化输入
- 第一章:The Missing Code Library--5.合法化整型输入
- 第一章:The Missing Code Library--7.合法化日期格式
- 第一章:The Missing Code Library--9.一个任意精度浮点计算器
- 第一章:The Missing Code Library--9.一个任意精度浮点计算器
- 第一章:The Missing Code Library--7.合法化日期格式
- 第一章:The Missing Code Library--3.正常化日期格式
- 第一章:The Missing Code Library--11.ANSI颜色序列
- 第一章:The Missing Code Library--1.在系统路径PATH中寻找程序
- 第一章:The Missing Code Library--1.在系统路径PATH中寻找程序
- 第一章:The Missing Code Library--8.避免不合要求的echo方法
- 第一章:The Missing Code Library--13.调试Shell脚本
- 第一章:The Missing Code Library--3.正常化日期格式
- 第一章:The Missing Code Library--4.优雅的表示大数
- 第一章:The Missing Code Library--8.避免不合要求的echo方法
- 第一章:The Missing Code Library--10.锁定文件
- 第一章:The Missing Code Library--12.建立一个Shell脚本库