数学运算之 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 数学运算的更多相关文章

  1. Linux Shell 数学运算

    Linux Shell 数学运算 在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果.要在Shell中进行数学运算,我们需要借助点小手段.目前,Linux Shell中进行数学运 ...

  2. shell数学运算

    shell的数学运算 branches@ubuntu:~$ var1=$[ * ] branches@ubuntu:~$ echo $var1 branches@ubuntu:~$ var2=$[$v ...

  3. 7 shell 数学运算

    shell中数学运算的易错点: 1.在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.即使是将整数和小数赋值给变量,它 ...

  4. shell 数学运算总结

    # !/bin/bash ## 整数-算数运算 ### 1. expr r=`expr 4 + 5` ### Tips:1. '4''+''5'三者之间有空白 echo $r; r=`expr 4 \ ...

  5. 【Linux】shell数学运算

    在Bash shell环境中,可以利用let.(())和[]执行基本的算术操作.而在进行高级操作时,expr和bc这两个工具就特别有用 let的使用 Script01.sh #!/bin/bash # ...

  6. shell编程之数学运算

    shell数学运算支持整数运算的四种方法 1.let命令 no1=4; no2=5; let result=no1+no2 2.[]操作符 result=$[ no1 + no2] 3.(())操作符 ...

  7. shell执行数学运算

    整数: expr let $(()) $[] 浮点数: bc 1.使用expr ♦参与运算的成员和运算符之间必须有一个空格: ♦对于那些容易被shell错解的,在它们传入expr命令之前,需要使用sh ...

  8. Linux shell 变量 数学 运算

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...

  9. 认真学习shell的第一天-数学运算

    shell中的数学运算有三种方式: (1)let,用let的时候,变量名称前不用添加$ (2)[],[]中变量可使用也可不使用$ (3)(())变量名之前必须添加$

随机推荐

  1. python解决排列组合

    笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', re ...

  2. (一)IDEA修改HTML不生效(未热部署)

    一.问题 IDEA 版本:2018.1.2 项目类型:SpringBoot 描述 : 修改JSP文件内容时,不会热部署,需要每次都重启项目才生效. 二.解决方案 加入Springboot开发者工具,即 ...

  3. Vue学习笔记十二:vue-resource的基本使用

    目录 HTML 浏览器效果 Vue不提倡使用操作DOM,所以Jquery不使用了,ajax也不使用了.所以,Vue给我们提供了一种和ajax差不多功能的指令,vue-resource HTML < ...

  4. [ kvm ] 学习笔记 8:Ovirt 基础及使用

    目录- 1. oVirt 功能介绍- 2. oVirt 安装部署    - 2.1 基础准备    - 2.2 安装 ovirt-engine    - 2.3 配置 kvm 主机    - 2.4 ...

  5. linux中解决出现:^H^H^H^H

    解决出现:^H^H^H^H 把stty erase ^H 添加到.bash_profile中 vim /etc/profile stty erase ^H su root source /etc/pr ...

  6. ubuntu18.04手动安装二进制MySQL8.0

    wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz tar xvJf ...

  7. 一个容器多个进程,一个pod多个容器

    一个容器多个进程:在Docker的镜像编译脚本Dockerfile中带起多个进程,如下可以在contivNet.sh中启动多个进程 FROM 10.37.210.125:5001/suning/cen ...

  8. Java IO把一个文件中的内容以字符串的形式读出来

    代码记录(备查): /** * 把一个文件中的内容以字符串的形式读出来 * * @author zhipengs * */ public class FileToString { public sta ...

  9. Tensorflow-逻辑斯蒂回归

    1.交叉熵 逻辑斯蒂回归这个模型采用的是交叉熵,通俗点理解交叉熵 推荐一篇文章讲的很清楚: https://www.zhihu.com/question/41252833 因此,交叉熵越低,这个策略就 ...

  10. 在ensp上配置通过Stelnet登录系统

    我们为什么我们要采用Stelent登录? 因为不安全,我们要采用更加安全的方式,双向加密,通过ssh网络安全协议 下面我们开始实验:使用路由器R1模拟PC,作为SSH的客户端:路由器R2作为SSH的服 ...