shell 数学运算
数学运算之 expr
expr操作符对照表
比较大小,只能对整数进行比较,需要加空格,linux 保留关键字要转义
num1=30
num2=50
expr $num1 \> $num2
查看上一条命令有没有执行成功
echo $?
返回0 成功,其他失败
小于、小于等于、大于等于
expr $num1 \< $num2
expr $num1 \<= $num2
expr $num1 \>= $num2
运算 加、减、乘、除
# 加
num1=17
num2=5
expr $num1 + $num2 # 减
num3=`expr $num1 + $num2`
echo $num3 expr $num1 - $num2 # 乘
expr $num1 \* $num2
expr $num1 / $num2 # 取余数
expr $num1 % $num2
需要注意事项:
两个小括号的计算方法,要赋值,否则会报错
# 直接输出报错
$(($num1+$num2)) # 需要赋值给一个变量
num3=$(($num1+$num2))
echo $num3 num3=$(($num1*$num2))
echo $num3 num3=$(($num1-$num2))
echo $num3 num3=$(($num1/$num2))
echo $num3
一些操作符在$(()) 不支持, 在比较运算的时候最好使用expr
num1=5
num2=5
num3=$(($num1=$num2))
expr $num1 = $num2
练习例子
提示用户输入一个正整数num,然后计算1+2+3+...+num的值;必须对num是否为正整数做判断,不符合应当运行再次输入
判断是否是一个正整数
思路:
- expr只能对整数进行计算,直接用expr 和一个整数计算获取 $? 的值来判断是否为整数
- 在使用 expr $num1 \> 0 判断是否大于0
# 不是整数使用 expr 进行数学运算会出错
num1=56.58
expr $num1 + 1
sum.sh
#!/bin/bash
#
while true
do
read -p "please input a positive number: " num
# 判断数是否是整数
expr $num + 1 &> /dev/null
if [ $? -eq 0 ];then
# 判断这个整数是否大于0,大于0返回1
if [ `expr $num \> 0` -eq 1 ];then
#echo "yes,positive number"
# $sum没有赋值,默认为0
for((i=1;i<=$num;i++))
do
sum=`expr $sum + $i`
done
echo "1+2+3+...+$num = $sum"
# 执行计算需要退出
exit
fi
fi
echo "error,input enlegal"
continue
done
执行脚本
sh sum.sh
shell 运算之 bc
bc 介绍:
- bc 是bash内建的运算器,支持浮点数运算
- 内建变量scale可以设置,默认为 0
bc 操作符对照表
交互测试
脚本中使用管道符进行计算
echo "23+33" | bc
保留精度 scale=4; 用分号隔开
echo "scale=4;23.3/3.5" | bc
bc示例脚本
bc.sh
#!/bin/bash
# read -p "num1: " num1
read -p "num2: " num2 #echo "scale=4;$num1/$num2" | bc num3=`echo "scale=4;$num1/$num2" | bc` echo "$num1 / $num2 = $num3"
执行
sh bc.sh
shell 数学运算的更多相关文章
- Linux Shell 数学运算
Linux Shell 数学运算 在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果.要在Shell中进行数学运算,我们需要借助点小手段.目前,Linux Shell中进行数学运 ...
- shell数学运算
shell的数学运算 branches@ubuntu:~$ var1=$[ * ] branches@ubuntu:~$ echo $var1 branches@ubuntu:~$ var2=$[$v ...
- 7 shell 数学运算
shell中数学运算的易错点: 1.在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.即使是将整数和小数赋值给变量,它 ...
- shell 数学运算总结
# !/bin/bash ## 整数-算数运算 ### 1. expr r=`expr 4 + 5` ### Tips:1. '4''+''5'三者之间有空白 echo $r; r=`expr 4 \ ...
- 【Linux】shell数学运算
在Bash shell环境中,可以利用let.(())和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具就特别有用 let的使用 Script01.sh #!/bin/bash # ...
- shell编程之数学运算
shell数学运算支持整数运算的四种方法 1.let命令 no1=4; no2=5; let result=no1+no2 2.[]操作符 result=$[ no1 + no2] 3.(())操作符 ...
- shell执行数学运算
整数: expr let $(()) $[] 浮点数: bc 1.使用expr ♦参与运算的成员和运算符之间必须有一个空格: ♦对于那些容易被shell错解的,在它们传入expr命令之前,需要使用sh ...
- Linux shell 变量 数学 运算
Abstract : 1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...
- 认真学习shell的第一天-数学运算
shell中的数学运算有三种方式: (1)let,用let的时候,变量名称前不用添加$ (2)[],[]中变量可使用也可不使用$ (3)(())变量名之前必须添加$
随机推荐
- python多线程中join()的理解
在 Python 的多线程编程中,经常碰到 thread.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. 第一,当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...
- Spring cloud微服务安全实战-6-2JWT认证之认证服务改造
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...
- Python第一阶段06
1.面向对象编程: class Dog: def __init__(self, name): self.name = name def bulk(self): print("%s 汪汪汪.. ...
- LODOP打印table不切行TableRowThickNess
不切行的调整方法有三种:1.简单表格,不嵌套合并等,可以用ADD_PRINT_TABLE输出,该 语句不切行,相关博文:LODOP设置超文本不自动分页的方法.2.进入打印设计,调整打印项到合适的高度, ...
- 使用docker搭建FastDFS文件系统
1.首先下载FastDFS文件系统的docker镜像 docker search fastdfs 2.使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用): docker run ...
- [SQL] - 报表查询效率优化
背景 系统将数据对象JSON序列化后存放到数据库字段中.Report 模块需要获取实时数据对象数值,当前在SQL中进行数值判断的耗时长,效率低. 分析 当前执行效率低主要是程序结构设计的不合理. SQ ...
- JDBC预编译statement(preparedstatement)和statement的比较、execute与executeUpdate的区别
和 Statement一样,PreparedStatement也是用来执行sql语句的与创建Statement不同的是,需要根据sql语句创建PreparedStatement除此之外,还能够通过设置 ...
- 人机交互技术 Week 11_Data gathering
Summary: Different Kinds of Requirements Functional requirements Data requirements Environmental req ...
- python 之 并发编程(守护线程与守护进程的区别、线程互斥锁、死锁现象与递归锁、信号量、GIL全局解释器锁)
9.94 守护线程与守护进程的区别 1.对主进程来说,运行完毕指的是主进程代码运行完毕2.对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕详细解释:1.主 ...
- 第五章 模块之random 、hashlib、time /datetime
5.2 random 返回随机生成的一个实数 random.randint() 返回随机生成的一个实数 import random #调用模块def get_random_code(length=6 ...