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…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
