??? 命令行形式的简单功能的计算器的Shell脚本

文章目录

  • 需求
  • 编码
    • Way1
    • Way2:
  • 测试

需求

在这里插入图片描述
需求分析:

  • 支持浮点型:使用let命令

编码

Way1

在这里插入图片描述
用下循环吧!

#!/bin/bash
# Author: 
# Date: 
# Description:

# functions defines:
input_check_to_startup() {
	num1=$1
	num2=$2
        isNum_status=
        noSpace_status=
	if [[ "$num1" != *" "* ]] && [[ "$num2" != *" "* ]]
	#if [[ "$num1" =~ ^[0-9]+$ ]] && [[ "$num2" =~ ^[0-9]+$ ]]
	then
	        noSpace_status=yes
	fi
	
	#if (! (expr "$num1" + 1 &>/dev/null)) && (! (expr "$num1" + 1 &>/dev/null))
	if expr "$num1" + 1 &>/dev/null && expr "$num2" + 1 &>/dev/null
	then
	        isNum_status=yes
	fi
		# debug:	
	        echo "num1 you input: $num1"
	        echo "num2 you input: $num2"
	
	        echo "isTwoNum_status:$isTwoNum_status"
	        echo "noSpace_status:$noSpace_status"
	        echo "isNum_status:$isNum_status"
	
	
	if [[ "$isTwoNum_status" == yes ]] && [[ "$noSpace_status" == yes ]] && [[ "$isNum_status" == yes ]]
	then
	        # input_action function
	        operat_num
	else
	        echo "检测失败!"
			input_check_to_startup
	fi	
}

operat_num() {
        echo "请输入你要进行的操作(add/sub/mult/div/mod):"
        read action
        case "$action" in
                "add")
                        # additon function
                        echo "additon"
                        ;;
                "sub")
                        # subtraction function
                        echo "subtraction"
                        ;;
                "mult")
                        # multiplication function
                        echo "multiplication"
                        ;;
                "div")
                        # division function
                        echo "division"
                        ;;
                "mod")
                        # modulus function
                        echo "modulus"
                        ;;
                *)
                        echo "检测错误,只能输入以下的一个:add/sub/mult/div/mod:"
                        operat_num
                        ;;
        esac
}

# main:
isTwoNum_Status=
#while [[ "${isTwoNum_Status}" != yes ]]
#do
	        echo "请输入你要操作的两个数字,用空格分隔:"
	
	                #IFS=$' \t'
	                #read -r num1 num2
	        read -r num1 num2
	        echo "the args nums you pass: $#"
	        if [ $# -eq 2 ]
	        then
	                isTwoNum_status=yes
			#break
		else
			echo "Error! please input again!"
	        fi
#done
if [ "${isTwoNum_Status}" = "yes" ]
then
	input_check_to_startup
fi

# There are still some errors!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!

在Shell脚本中,要解决这个问题,你需要确保用户输入了恰好两个数字,并且这两个数字之间用空格分隔。你可以使用read命令来读取用户输入,并使用条件语句来检查是否确实读取了两个参数,以及这两个参数是否都是数字。

下面是一个简单的Shell脚本示例,它实现了这个功能:

#!/bin/bash

# 读取用户输入的两个数字
echo "请输入两个数字,用空格分隔:"
read -r num1 num2

# 检查是否确实读取了两个参数
if [ $# -ne 2 ]; then
  echo "检测失败,请重新输入两个数字且空格分隔:"
  echo "你输入了:$1 $2"
  exit 1
fi

# 检查这两个参数是否都是数字
isNum_status=no
noSpace_status=no

if [[ $num1 =~ ^-?[0-9]+$ && $num2 =~ ^-?[0-9]+$ ]]; then
  isNum_status=yes
else
  echo "检测失败,请重新输入两个数字且空格分隔:"
  echo "num1 输入:$num1"
  echo "num2 输入:$num2"
  exit 1
fi

# 检查输入的两个数字之间是否有空格分隔
if [[ $num1 && $num2 ]]; then
  noSpace_status=yes
else
  echo "检测失败,请重新输入两个数字且空格分隔:"
  echo "num1 输入:$num1"
  echo "num2 输入:$num2"
  exit 1
fi

echo "num1 you input: $num1"
echo "num2 you input: $num2"
echo "noSpace_status:$noSpace_status"
echo "isNum_status:$isNum_status"

在这个脚本中,我们首先使用read命令读取用户输入的两个数字。然后,我们使用条件语句检查是否确实读取了两个参数。接下来,我们使用正则表达式来检查这两个参数是否都是数字。如果这两个参数都是数字,那么isNum_status变量将被设置为yes。最后,我们检查输入的两个数字之间是否有空格分隔,如果有,那么noSpace_status变量将被设置为yes

如果用户输入的不是两个数字或者数字之间没有用空格分隔,脚本将输出错误信息并退出。如果用户输入正确,脚本将输出用户输入的两个数字以及两个状态变量的值。

Way2:

#!/bin/bash
expr $1 + $2 &>/dev/null	# 用expr检查$1和$2是否为整型,如果其中有不为整型的,那么这条命令执行就失败了,执行状态码就为非0;即$?就为非0

if [ $? -ne 0 ]
then
	echo "请输入整型数字不要输其他的!"
elif [ $# -ne 2 ]
	echo "请必须传入两个参数"
else
	awk "BEGIN{print $1 + $2}"
	awk "BEGIN{print $1 - $2}"	
	awk "BEGIN{print $1 * $2}"
	awk "BEGIN{print $1 / $2}"
	awk "BEGIN{print $1 % $2}"
fi	

加上逻辑运算符后:

#!/bin/bash
num1=$1
num2=$2

[ $# -ne 2 ] && {
	echo "请传递两个参数:"
	exit
} || {
	expr $num1 + $num2 &>/dev/null
	[ $? -ne 0 ] && {
		echo "输入的要是两个数字"
		exit
	} || {
			[ $num2 -eq 0 ] && {
				echo "除数不能是0 取余不能是0"
				#echo "$num1 + $num2" = `expr $num1 + $num2`
				#echo "$num1 - $num2" = `expr $num1 - $num2`
				#echo "$num1 * $num2" = `expr $num1 \* $num2`
			}
		} || {
				echo "$num1 + $num2" = `expr $num1 + $num2`
				echo "$num1 - $num2" = `expr $num1 - $num2`
				echo "$num1 * $num2" = `expr $num1 \* $num2`
				echo "$num1 / $num2" = `expr $num1 / $num2`
				echo "$num1 % $num2" = `expr $num1 % $num2`
			}
}	

在这里插入图片描述
在这里插入图片描述

测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Node版本管理nvm

公司项目比较多,且有历史包袱,没时间升级,高版本的node无法在低版本项目中打包编译; 下载地址 gitHub地址 nvm-setup.zip:安装版,推荐使用 nvm-setup.exe 常用指令 // 查看版本信息 nvm -v // 查看能安装…

《线下学习受局限,知识付费小程序开启新篇》

在知识大爆炸的时代,人们对知识的渴望从未如此强烈。然而,传统的线下学习方式却逐渐显露出诸多局限。 线下学习往往受到时间和空间的严格限制。为了参加一场培训课程或者讲座,你可能需要在特定的时间赶到特定的地点,这对于忙碌的…

大数据-188 Elasticsearch - ELK 家族 Logstash Output 插件

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的编解码

目录 前言 1.下载官方协议包 2.解压 3.自定义主题 4.重写解码方法 5.以下是我解析后接收到的数据 前言 最近这段时间,一直在用开源的Jetlinks物联网平台在学习,偶尔有一次机会接触到物联网设备对接,在协议对接的时候,遇到了…

400行程序写一个实时操作系统(十):用面向对象思想构建抢占式内核

前言 通过前几章的学习,我们学会了如何为RTOS设计一个合理的内存管理算法。现在,是时候学习设计RTOS内核了。 关于RTOS内核的文章也有很多,但都有一点先射箭再化靶子的意味。要么是代码连篇解释却寥寥无几,要么是要先怎么样再怎么…

【星闪开发连载】WS63E模块连接华为IoT云

目录 引言 WS63E对MQTT的支持 程序修改 测试结果 结语 引言 在上一篇博文中已经介绍了WiFi的使用。今天介绍一下如何使用MQTT协议连接到华为云上。 WS63E对MQTT的支持 WS63E的代码参考直接提供了MQTT的支持,文档介绍见docs/board/WS63V100 MQTT 开发指南.pd…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN?2.2 CMSIS-NN是什么?2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM…

如何在Windows平台下基于Whisper来训练自己的数据

0. 简介 最近快到1024程序员节了,再给大家上点干活。Whisper是openai开源的一个语音转文字模型。也是现在识别效果最好的离线数据模型,但是我们发现我们在完成一些中英文或者专业术语对话的时候。这时候表现的效果就比较差了。而这一步就得用微调的方式…

EM算法(期望最大算法、Expectation Maximization Algorithm)

EM算法(期望最大算法、Expectation Maximization Algorithm) 引言 EM算法,全称为期望最大(Expectation Maximization)算法,是一种从不完全数据或有数据丢失的数据集(存在隐含变量)中求解概率模…

Oracle单实例静默安装

oracle 11g单实例静默安装 在CentOS上静默安装Oracle数据库 引言 在企业环境中,自动化和标准化是提高效率的关键。静默安装(也称为无人值守安装)是一种无需人工干预的安装方法,适用于大规模部署或需要重复安装的场景。本文将介…

【redis】初识非关系型数据库——redis

W...Y的主页 😊 代码仓库分享💕 初识 Redis Redis是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis 中的值可以是由string(字符串)、hash&#xff0…

【Python爬虫实战】多进程结合 BeautifulSoup 与 Scrapy 构建爬虫项目

#1024程序员节|征文# 🌈个人主页:易辰君-CSDN博客 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html ​ 前言 在大数据时代,爬虫技术是获取和处理网络数据的利器。面对需要处理大…

ChatGPT实现旅游推荐微信小程序

随着旅游行业的快速发展,个性化推荐已成为提升用户体验的重要手段。通过AI技术,提供一个智能旅游推荐小程序,使用户能够轻松获取定制化的旅行建议。 项目概述 项目目标 开发一个AI旅游推荐小程序,基于用户输入的旅行偏好&#…

Visual Studio安装图文详解教程

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍 Visual Studio 社区版的安装过程及其注意事项。 Visual Studio简介 Visual Studio 社区版功能完备且可扩展的免费 IDE,可用于创…

【WPF】中Dispatcher的DispatcherPriority参数使用

在 WPF 中,DispatcherPriority 参数用于指定通过 Dispatcher 调度的操作的执行优先级。加入 DispatcherPriority 参数的情况通常取决于你希望操作何时以及如何被执行。 1.Dispatcher的DispatcherPriority参数使用 以下是几种情况和示例说明: 1.1 需要…

【STM32 Blue Pill编程实例】-控制步进电机(ULN2003+28BYJ-48)

控制步进电机(ULN2003+28BYJ-48) 文章目录 控制步进电机(ULN2003+28BYJ-48)1、步进电机介绍2、ULN2003步进电机驱动模块3、硬件准备及接线4、模块配置3.1 定时器配置3.2 ULN2003输入引脚配置4、代码实现在本文中,我们将介使用 STM32Cube IDE 使用 ULN2003 电机驱动器来控制28B…

自由学习记录(14)

unity操作问题 位置:子物体的位置是相对于父物体的。如果你移动父物体,子物体会保持相对于父物体的相对位置,跟着一起移动。 旋转:子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。 缩放&#xf…

【HarmonyOS NEXT】鸿蒙开发环境准备

0. 引言 看了发布会以后,热血澎湃啊,是时候学学把自己做的一些小工具搞成鸿蒙版了!!! 1. 开发工具下载 下载地址:https://pan.quark.cn/s/08ddebdb7a20 工具版本会不定时更新,下载最新版即可…

【网络原理】——HTTP协议、fiddler抓包

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:认识HTTP 1:超文本传输 2:发展历史 3:HTML 4&am…

Axure树形菜单展开与折叠

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:Axure树形菜单展开与折叠 主要内容:树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景:关系树、菜…