火狐网站开发好的插件,网站建设实训方案,网站开发答辩ppt,从做系统后以前的网站打不开了怎么办鉴于shell脚本的限制和本事#xff0c;浮点数#xff08;或“实数”#xff09;的验证过程乍一看似乎让人望而生畏#xff0c;不过考虑到浮点数只不过是由小数点分隔的两个整数#xff0c;再配合能够在脚本中引用其他脚本的能力#xff08;validint#xff09;#xff…鉴于shell脚本的限制和本事浮点数或“实数”的验证过程乍一看似乎让人望而生畏不过考虑到浮点数只不过是由小数点分隔的两个整数再配合能够在脚本中引用其他脚本的能力validint你就会发现浮点数验证的代码长度出奇地短。
程序代码
#!/bin/sh
#filename:validint
#description:验证整数输入允许出现负数。validint() {# 验证第一个参数并根据 最小值$2 和/或 最大值$3如果指定的话进行测试。# 如果第一个参数的值不在指定区间内或者不全是数字组成那么脚本执行失败number$1; min$2; max$3# 判断输入是否为空if [ -z $number ]; thenecho You didnt enter anything. Please enter a number. 2return 1fi# 获取整数部分if [ ${number%${number#?}} - ]; then# 获取第一个字符以外的所有字符进行测试testvalue${number#?}elsetestvalue$numberfi# 删除变量number中的所有数字以作测试之用nodigits$(echo $testvalue | sed s/[[:digit:]]//g)# 检查非数字字符if [ ! -z $nodigits ];thenecho Invalid number format! Only digits, no commas, spaces, etc. 2return 1fiif [ ! -z $min ];then# 输入值是否小于指定的最小值if [ $number -lt $min ];thenecho Your value is too small: smallest accpetable value is $min. 2return 1fifiif [ ! -z $max ];then# 输入值是否大于指定的最大值if [ $number -gt $max ];thenecho Your value is too big: largest acceptable value is $max. 2return 1fifireturn 0
}
#!/bin/bash
# validfloat -- 测试数字是否为有效的浮点数
# 注意该脚本不支持科学计数法(1.304e5)# 要测试输入的值是否为有效的浮点数需要将值分为两个部分整数部分和小数部分。
# 先测试第一部分是否为有效整数然后测试第二部分是否为大于或等于0的有效整数。
# 因此 -30.-8则无效。# 使用“.”记法可以将另一个脚本包含到此脚本中
#source /root/validint
. /root/validintvalidfloat() {fvalue$1# 检查输入的数字是否为有小数点if [ ! -z $(echo $fvalue | sed s/[^.]//g) ];then# 提取小数点之前的部分decimalPart$(echo $fvalue | cut -d. -f1)# 提取小数点之后的部分fractionalPart${fvalue#*\.}# 先测试小数点左侧的整数部分。if [ ! -z $decimalPart ];then# 由于“!” 会颠倒测试逻辑因此下面表示“如果不是有效的整数”。if ! validint $decimalPart ; thenreturn 1fifi# 现在测试小数部分# 小数点之后不能有负号例如33.-11就不正确因此先来测试负号if [ ${fractionalPart%${fractionPart#?}} - ];thenecho Invalid floating-point number: - not allowed after decimal point. 2return 1 fiif [ $fractionalPart ! ];then# 如果小数部分不是有效的整数.....if ! validint $fractionalPart 0 ;thenreturn 1fifielse# 如果整个值只是一个“-”,那也不行if [ $fvalue - ];thenecho Invalid floating-point format. 2return 1fi# 最后检查剩下的部分是否为有效的整数if ! validint $fvalue ; thenreturn 1fifireturn 0
}if validfloat $1 ; thenecho $1 is a valid floating-point value.
fi
exit 0 工作原理
脚本首先检查输入值是否包含小数点。如果没有那么说明不是浮点数。接下来将输入值的整数部分和小数部分分开测试。然后在脚本检查整数部分小数点左侧是否有效。之后的代码就比较复杂了因为我们需要检查有没有多余的负号避免出现17-30这种情况另外还要确保小数部分小数点右侧也是有效的整数。
最后检查用户指定的是否只是一个负号和小数点得承认这确实挺怪异。
如果都没有问题脚本返回0表示用户输入的是一个有效的浮点数。 精益求精
一个比较酷的改进是让这个函数能够处理最后一个例子中出现的科学记数法。这算不上多难你可以先测试是否存在e或E然后将值分成3部分整数部分只有一个数字、小数部分以及10的幂。剩下的事情就是确保每部分都是有效的整数。