06-验证浮点数输入
鉴于shell脚本的限制和本事,浮点数(或“实数”)的验证过程乍一看似乎让人望而生畏,不过考虑到浮点数只不过是由小数点分隔的两个整数,再配合能够在脚本中引用其他脚本的能力(validint),你就会发现浮点数验证的代码长度出奇地短。
程序代码
#!/bin/sh
#filename:validint
#description:验证整数输入,允许出现负数。validint() {# 验证第一个参数并根据 最小值$2 和/或 最大值$3(如果指定的话)进行测试。# 如果第一个参数的值不在指定区间内或者不全是数字组成,那么脚本执行失败number="$1"; min="$2"; max="$3"# 判断输入是否为空if [ -z $number ]; thenecho "You didn't enter anything. Please enter a number." >&2return 1fi# 获取整数部分if [ "${number%${number#?}}" = "-" ]; then# 获取第一个字符以外的所有字符进行测试testvalue="${number#?}"elsetestvalue="$number"fi# 删除变量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的幂。剩下的事情就是确保每部分都是有效的整数。
相关文章:
06-验证浮点数输入
鉴于shell脚本的限制和本事,浮点数(或“实数”)的验证过程乍一看似乎让人望而生畏,不过考虑到浮点数只不过是由小数点分隔的两个整数,再配合能够在脚本中引用其他脚本的能力(validint)ÿ…...
shell实现查询进程号并批量kill(脚本)
问题或需求描述 在shell中,如果你想通过命令行查询出一系列匹配某个关键词的进程,并使用xargs命令批量结束这些进程,可以按照以下步骤操作: # 查询并提取进程号 pgrep -f "关键词" | xargs kill# 或者,如果…...
【软考】蠕虫病毒
目录 一、概念1.1 说明 二、示例2.1 震网2.2 熊猫烧香2.2 红色代码2.3 爱虫病毒 一、概念 1.1 说明 1.一段可以借助程序自行传播的程序或代码 二、示例 2.1 震网 1.Stuxnet 2.利用系统漏洞破坏工业基础设施,攻击工业控制系统 2.2 熊猫烧香 1.是一种经过多次变种…...
大模型知识点汇总——分布式训练
PS:本篇只在宏观上介绍相关概念和技术,不做数学推导和过于细节介绍,旨在快速有一个宏观认知,不拘泥在细节上,导致很混乱。 涉及技术名词 分布式框架等涉及的技术名词很多,很容易让人眼花缭乱,…...
java之网络编程
网络编程之TCP/IP协议 网络编程分为两个不同的层次:一是基于Socket的低层次网络编程,二是基于URL的高层次网络编程 高低层次就是通信协议的高低层次,Socket采用TCP、UDP等协议,这些协议属于低层次的通信协议;URL采用H…...
【Linux】Centos7安装redis
目录 下载安装包安装1.解压2.环境安装3.查看redis的安装路径4.将之前redis的配置文件,复制到安装路径下(新建一个文件夹并复制)5.redis 设置默认后台启动,修改配置文件6.启动redis服务默认启动通过配置文件启动查看进程 7.开放637…...
蓝桥杯(2):python基础算法【上】
时间复杂度、枚举、模拟、递归、进制转换、前缀和、差分、离散化 1 时间复杂度 重要是看循环,一共运行了几次 1.1 简单代码看循环 #时间复杂度1 n int(input()) for i in range(1,n1):for j in range(0,i):pass ###时间复杂度:123....nn(1n)/2 所以…...
一个js正则,轻松去除字符串里的\n\t空格
推荐一款AI网站,免费使用GPT3.5,戳此入👇:AI写作 在Node.js中,如果你想要从字符串中全局去除换行符(\n)、制表符(\t)和空格,你可以使用正则表达式与String.prototype.replace()方法结合使用。下面是一个简…...
政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(四)—— 过拟合和欠拟合
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: Tensorflow与Keras实战演绎 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 通过增加容量或提前停止来提高性能。 在深度学习中&…...
RuoYi-Vue若依框架-代码生成器的使用
代码生成器 导入表 在系统工具内找到代码生成,点击导入,会显示数据库内未被导入的数据库表单,选择自己需要生成代码的表,友情提醒,第一次使用最好先导入一张表进行试水~ 预览 操作成功后可以点击预览查看效果&…...
AI PPT生成工具 V1.0.0
AI PPT是一款高效快速的PPT生成工具,能够一键生成符合相关主题的PPT文件,大大提高工作效率。生成的PPT内容专业、细致、实用。 软件特点 免费无广告,简单易用,快速高效,提高工作效率 一键生成相关主题的标题、大纲、…...
进程和线程,线程实现的几种基本方法
什么是进程? 我们这里学习进程是为了后面的线程做铺垫的。 一个程序运行起来,在操作系统中,就会出现对应的进程。简单的来说,一个进程就是跑起来的应用程序。 在电脑上我们可以通过任务管理器可以看到,跑起来的应用程…...
【PyTorch】解决PyTorch安装中torch.cuda.is_available()返回False的问题
最近在安装PyTorch时遇到torch.cuda.is_available() False的问题,特此记录下解决方法,以帮助其他遇到相同问题的人。 问题描述 Ubuntu 20.04,3060 Laptop,安装了CUDA 11.4,在Anaconda下新建了Python 3.8的环境&…...
95% 的公司面临 API 安全问题
API 对企业安全发挥着关键作用,但绝大多数企业都为此遭受日益严重的安全风险。据安全公司 Fastly最近做的一项调查显示,84% 的受访企业缺乏足够的API安全措施,95%的企业在过去1年中遇到过 API 安全问题。 此外,79%的受访企业出于A…...
mysql的基本知识点-排序和分组
分组(GROUP BY) GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。例如,假设你有一个包含销售数据的表,并且你想按产品类别计算总销售额。你可以使用 GROUP BY 和 SUM() 函数来实现这一点。 SELECT…...
使用uniapp 的 plus.sqlite 操作本地数据库报错:::table xxx has no column named xxxx
背景: 1、使用uniapp 的 plus.sqlite 进行APP本地数据库操作 2、SQLite 模块用于操作本地数据库文件,可实现数据库文件的创建,执行SQL语句等功能。 遇到:在之前创建的表上进行新增字段的操作时候,出现问题:…...
第十五届蓝桥杯模拟赛 第三期 (C++)
第二次做蓝桥模拟赛的博客记录,可能有很多不足的地方,如果大佬有更好的思路或者本文中出现错误,欢迎分享思路或者提出意见 题目A 请问 2023 有多少个约数?即有多少个正整数,使得 2023 是这个正整数的整数倍。 答案&…...
Linux中的常用基础操作
ls 列出当前目录下的子目录和文件 ls -a 列出当前目录下的所有内容(包括以.开头的隐藏文件) ls [目录名] 列出指定目录下的子目录和文件 ls -l 或 ll 以列表的形式列出当前目录下子目录和文件的详细信息 pwd 显示当前所在目录的路径 ctrll 清屏 cd…...
【SpringMVC】知识汇总
SpringMVC 短暂回来,有时间就会更新博客 文章目录 SpringMVC前言一、第一章 SpingMVC概述二、SpringMVC常用注解1. Controller注解2. RequestMapping注解3. ResponseBody注解4. RequestParam5. EnableWebMvc注解介绍6. RequestBody注解介绍7. RequestBody与RequestP…...
android13实现切换导航模式功能
支持android13以上系统,需要系统签名。 public class NavigationHelper {/*** 设置导航模式** param context* param mode GESTURAL:手势 TWOBUTTON:二按钮 THREEBUTTON:三按钮*/public static void setNavigationMode(Contex…...
Mac开发者必备:OpenClaw+Qwen3.5-9B自动化测试流水线
Mac开发者必备:OpenClawQwen3.5-9B自动化测试流水线 1. 为什么开发者需要本地化CI/CD工具 作为一名长期在Mac上开发的全栈工程师,我一直在寻找一种轻量级的自动化测试方案。传统的Jenkins或GitHub Actions虽然强大,但对于个人项目和小团队来…...
雪女-斗罗大陆-造相Z-Turbo与STM32的趣味结合:在嵌入式设备上展示AI生成的艺术
雪女-斗罗大陆-造相Z-Turbo与STM32的趣味结合:在嵌入式设备上展示AI生成的艺术 你有没有想过,把《斗罗大陆》里那位冰清玉洁的雪女,通过最新的AI绘画模型“造相Z-Turbo”生成出来,然后让她在一块小小的、几十块钱的STM32开发板的…...
身份治理技术:从手动到AI的变革,实现Linux的ssh免密登录实操保姆级教程。
身份治理技术的演进历程 身份治理技术(Identity Governance)是企业IT架构中确保用户身份、权限和访问控制合规性的核心组件。从早期的手动管理到现代的智能自动化,其演进历程反映了安全需求和技术能力的双重驱动。 早期阶段:手动管…...
OpenClaw模型微调集成:Qwen3-14b_int4_awq领域适配实战
OpenClaw模型微调集成:Qwen3-14b_int4_awq领域适配实战 1. 为什么需要领域专用模型 去年我在处理法律合同自动化生成项目时,发现通用大模型在专业术语和条款逻辑上总是差强人意。模型要么生成过于笼统的表述,要么在引用法律条文时出现事实性…...
2026-04-03期 AI最新资讯
2026年4月3日 AI资讯日报 每日精选人工智能领域最新动态,带你快速掌握技术突破、产品发布与行业趋势。🚀 技术突破 Meta 发布 Llama 4 系列开源大模型 Meta 今日正式推出 Llama 4 系列,包含三个版本:Llama 4 Mini、Llama 4 Base 和…...
谷歌启用天然气电厂为AI数据中心供电,气候承诺大转弯
谷歌已与一家天然气发电厂达成合作伙伴关系,为其在德克萨斯州的数据中心提供电力,这一消息由最新研究发现并得到公司确认。此举标志着这家科技巨头立场的重大转变,该公司曾承诺在2030年前实现碳中和,长期以来被视为清洁能源的先驱…...
PN7150/PN7160 NFC控制器I²C驱动库详解
1. 项目概述Electronic Cats PN7150/PN7160 库是一个面向嵌入式平台的轻量级 IC 驱动库,专为 NXP 公司推出的 PN7150 和 PN7160 NFC 控制器芯片设计。该库并非简单封装,而是基于 NCI(NFC Controller Interface)1.0 协议规范实现的…...
中航迈特光束整形金属3D打印技术取得重要进展,多种材料已成功验证
中航迈特在金属3D打印装备研发方面持续发力,尤其是光束整形技术近期取得重要进展。在本届TCT亚洲展,它推出的MT280搭载了无级点环光斑能量智调系统,是光束整形金属3D打印当前较新的看点。据3D打印技术参考了解,无级点环光斑能量智…...
水质溶解氧在线监测仪:实时监测与数据记录解析
水质溶解氧在线监测仪是一款专注于水体溶解氧与水温监测的专业设备,可快速记录水体关键参数,同时支持扩展多种水质参数传感器,能根据不同使用需求灵活组合配置。设备内置存储功能,可留存历史监测数据与报警记录,还支持…...
《C 头文件》
《C 头文件》 引言 C 头文件是 C 语言编程中不可或缺的一部分。它们包含了 C 语言标准库中的各种函数、宏定义和类型定义,为程序员提供了丰富的编程工具。本文将详细介绍 C 头文件的作用、分类、常用头文件及其在编程中的应用。 一、C 头文件的作用 C 头文件的主要作用有以…...
