数学运算之 expr

expr操作符对照表

比较大小,只能对整数进行比较,需要加空格,linux 保留关键字要转义

  1. num1=30
  2. num2=50
  3. expr $num1 \> $num2

查看上一条命令有没有执行成功

  1. echo $?

返回0 成功,其他失败

小于、小于等于、大于等于

  1. expr $num1 \< $num2
  2. expr $num1 \<= $num2
  3. expr $num1 \>= $num2

运算 加、减、乘、除

  1. # 加
  2. num1=17
  3. num2=5
  4. expr $num1 + $num2
  5.  
  6. # 减
  7. num3=`expr $num1 + $num2`
  8. echo $num3
  9.  
  10. expr $num1 - $num2
  11.  
  12. # 乘
  13. expr $num1 \* $num2
  14. expr $num1 / $num2
  15.  
  16. # 取余数
  17. expr $num1 % $num2

  

 需要注意事项:

两个小括号的计算方法,要赋值,否则会报错

  1. # 直接输出报错
  2. $(($num1+$num2))
  3.  
  4. # 需要赋值给一个变量
  5. num3=$(($num1+$num2))
  6. echo $num3
  7.  
  8. num3=$(($num1*$num2))
  9. echo $num3
  10.  
  11. num3=$(($num1-$num2))
  12. echo $num3
  13.  
  14. num3=$(($num1/$num2))
  15. echo $num3

 

一些操作符在$(()) 不支持, 在比较运算的时候最好使用expr

  1. num1=5
  2. num2=5
  3. num3=$(($num1=$num2))

  1. expr $num1 = $num2

练习例子  

提示用户输入一个正整数num,然后计算1+2+3+...+num的值;必须对num是否为正整数做判断,不符合应当运行再次输入

判断是否是一个正整数

思路:

  • expr只能对整数进行计算,直接用expr 和一个整数计算获取 $? 的值来判断是否为整数
  • 在使用 expr $num1 \> 0 判断是否大于0
  1. # 不是整数使用 expr 进行数学运算会出错
  2. num1=56.58
  3. expr $num1 + 1

  

sum.sh

  1. #!/bin/bash
  2. #
  3. while true
  4. do
  5. read -p "please input a positive number: " num
  6. # 判断数是否是整数
  7. expr $num + 1 &> /dev/null
  8. if [ $? -eq 0 ];then
  9. # 判断这个整数是否大于0,大于0返回1
  10. if [ `expr $num \> 0` -eq 1 ];then
  11. #echo "yes,positive number"
  12. # $sum没有赋值,默认为0
  13. for((i=1;i<=$num;i++))
  14. do
  15. sum=`expr $sum + $i`
  16. done
  17. echo "1+2+3+...+$num = $sum"
  18. # 执行计算需要退出
  19. exit
  20. fi
  21. fi
  22. echo "error,input enlegal"
  23. continue
  24. done

执行脚本

  1. sh sum.sh

shell 运算之 bc

bc 介绍:

  • bc 是bash内建的运算器,支持浮点数运算
  • 内建变量scale可以设置,默认为 0

bc 操作符对照表

交互测试

脚本中使用管道符进行计算

  1. echo "23+33" | bc

保留精度 scale=4; 用分号隔开

  1. echo "scale=4;23.3/3.5" | bc

bc示例脚本

bc.sh

  1. #!/bin/bash
  2. #
  3.  
  4. read -p "num1: " num1
  5. read -p "num2: " num2
  6.  
  7. #echo "scale=4;$num1/$num2" | bc
  8.  
  9. num3=`echo "scale=4;$num1/$num2" | bc`
  10.  
  11. echo "$num1 / $num2 = $num3"

执行

  1. 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. 转 【MySQL】常用拼接语句 shell 下执行mysql 命令

    [MySQL]常用拼接语句 前言:在MySQL中 CONCAT ()函数用于将多个字符串连接成一个字符串,利用此函数我们可以将原来一步无法得到的sql拼接出来,在工作中也许会方便很多,下面主要介绍下几 ...

  2. jQuery 属性操作 - toggleClass() 方法

    实例 对设置和移除所有 元素的 "main" 类进行切换: $("button").click(function(){ $("p").tog ...

  3. PAT 甲级 1147 Heaps (30 分) (层序遍历,如何建树,后序输出,还有更简单的方法~)

    1147 Heaps (30 分)   In computer science, a heap is a specialized tree-based data structure that sati ...

  4. LeetCode_242. Valid Anagram

    242. Valid Anagram Easy Given two strings s and t , write a function to determine if t is an anagram ...

  5. Vue学习笔记十:过滤器

    目录 公共过滤器的写法 简易过滤器+带参数过滤器+多过滤器 私有过滤器 公共过滤器的写法 过滤器的写法还是很简单的 ,如下 <p>{{ msg | filtermsg }}</p&g ...

  6. 【Leetcode_easy】965. Univalued Binary Tree

    problem 965. Univalued Binary Tree 参考 1. Leetcode_easy_965. Univalued Binary Tree; 完

  7. solr关于日期范围查询

    问题:从solr上查询创建日期在2019-06-25到2019-06-26之间的数据 createDate:[2019-06-25 TO 2019-06-26]

  8. Appium移动自动化测试-----(二)安装 Android SDK

    安装Android SDK Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序.简单来讲,A ...

  9. JVM(二) 栈内存结构

    栈内存是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表.操作数栈.动态链接.返回出口等信息.每一个方法从调用直至执行完成的过程,就对应 ...

  10. 兔子问题(Rabbit problem)

    Description 有一种兔子,出生后一个月就可以长大,然后再过一个月一对长大的兔子就可以生育一对小兔子且以后每个月都能生育一对.现在,我们有一对刚出生的这种兔子,那么,n 个月过后,我们会有多少 ...