一、算数运算符

shell中常见的算术运算符:

shell中常见的算术命令:

1. 整数运算

方法一:expr 

  • expr命令就既可以用于整数运算,也可以用于相关字符串长度、匹配等的运算处理:
  • expr 1 + 2     +     -    \*    /
  • expr $num1 + $num2 + - \* / %;

注:计算的数字左右都至少有一个空格,

  乘号需要用反斜线屏蔽其特定含义,因为shell会误读星号。

方法二:$(())
echo $(($num1+$num2)) + - * / %
echo $((num1+num2))
echo $((5-3*2))
echo $(((5-3)*2))
echo $((2**3))

echo $((a++)) 、  echo $((a--))     先输出后加减

echo $((++a))   、 echo $((--a))  先加减后输出

sum=$((1+2)); echo $sum

方法三:$[]
echo $[5+2] + - * / %
echo $[5**2]

方法四:let
let sum=2+3; echo $sum
let i++; echo $i

2. 小数运算

echo "2*4" |bc
echo "2^4" |bc
echo "scale=2;6/4" |bc
awk 'BEGIN{print 1/2}'
echo "print 5.0/2" |python

二、算数运算的实例

2.1 关于$(())的实例

实例一:运算示例

  1. [root@host- ~]# echo $((+)) #加法
  2. [root@host- ~]# echo $((-)) #减法
  3. [root@host- ~]# echo $((*)) #乘法
  4. [root@host- ~]# echo $((/)) #除法
  5. [root@host- ~]# echo $((%)) #余数
  6. [root@host- ~]# echo $((**)) #幂运算

  实例二:各种运算shell脚本示例

  1. [root@host- ~]# cat vartest01.sh
  2. #!/bin/bash
  3. a=
  4. b=
  5. echo "a-b=$(($a-$b))"
  6. echo "a-b=$(($a-$b))"
  7. echo "a*b=$(($a*$b))"
  8. echo "a/b=$(($a/$b))"
  9. echo "a**b=$(($a**$b))"
  10. echo "a%b=$(($a%$b))"
  11. [root@host- ~]# chmod a+x vartest01.sh
  12. [root@host- ~]# ./vartest01.sh
  13. a-b=
  14. a-b=
  15. a*b=
  16. a/b=
  17. a**b=
  18. a%b=
  19. [root@host- ~]#

实例三:实现输入2个数字进行加、减、乘、除功能的计算器

  1. [root@host- ~]# cat var_jisuan.sh
  2. #!/bin/bash
  3. #+,-,*,/ --
  4. print_useage(){
  5. printf "Please enter an int\n"
  6. exit
  7. }
  8. read -p "Please input first number:" fnum
  9. if [ -n "`echo $fnum |sed 's/[0-9]//g'`" ];then #-n选项可以理解为字符串 no zero
  10. print_useage
  11. fi
  12. read -p "Please input the operators:" op
  13. if [ "${op}" != "+" ]&&[ "$op" != "-" ]&&[ "$op" != "*" ]&&[ "$op" != "/" ];then
  14. echo "Please use {+|-|*|/}"
  15. exit
  16. fi
  17. read -p "Please input second number: " snum
  18. if [ -n "`echo $snum | sed 's/[0-9]//g'`" ];then
  19. print_useage
  20. fi
  21. echo "${fnum}${op}${snum}=$((${fnum}${op}${snum}))"
  22. [root@host- ~]# chmod a+x var_jisuan.sh
  23. [root@host- ~]# ./var_jisuan.sh
  24. Please input first number:
  25. Please input the operators:+
  26. Please input second number:
  27. +=
  28. [root@host- ~]#

实例四:高效的计算方法

  1. [root@host- ~]# cat var_jisuan02.sh
  2. #!/bin/bash
  3. read -p "Please input num=num1{+|-|*|/}num2:" num
  4. echo $(($num))
  5. [root@host- ~]# chmod a+x var_jisuan02.sh
  6. [root@host- ~]# ./var_jisuan02.sh
  7. Please input num=num1{+|-|*|/}num2:*
  8.  
  9. [root@host- ~]#
  10.  
  11. 或者用如下方法:
  12. [root@host- ~]# cat var_jisuan02.sh
  13. #!/bin/bash
  14. echo $(($))
  15. [root@host- ~]# sh var_jisuan02.sh +
  16.  
  17. [root@host- ~]#

2.2 let运算命令实例

实例一、监控web服务状态,如果访问两次均失败,则报警。

  1. #!/bin/bash
  2. CheckUrl(){ #定义函数
  3. timeout= #定义wget访问超时时间
  4. fails= #初始化网站访问失败次数为0
  5. success= #初始化网站访问成功次数为0
  6. while true #持续循环
  7. do
  8. wget --timeout=$timeout --tries= https://www.cnblogs.com/yangleitao/ -q -O /dev/null #--tries
  9. #增加重试次数。 -q 不显示下载过程 -O 下载并以不同的文件名保存
  10.  
  11. if [ $? -ne ];then
  12. let fails=fails+
  13. else
  14. let success+=
  15. fi
  16. if [ $success -ge ];then
  17. echo "success"
  18. exit
  19. fi
  20. if [ $fails -ge ];then
  21. Critical="system is dowm."
  22. echo $Critical|tee|mail -s "$Critical" abc@ddsaff.com
  23. exit
  24.  
  25. fi
  26. done
  27. }
  28. CheckUrl #执行函数

2. 3expr运算命令实例

实例1:判断一个变量值或者字符串是否为整数?

  1. [root@host- ~]# cat var_expr.sh
  2. #!/bin/bash
  3. #持续等待输入
  4. while true
  5. do
  6. read -p "Please input:" a
  7. expr $a + >/dev/null >& # 参考此博客理解Linux Shell >/dev/null >& 含义 - CSDN博客 https://blog.csdn.net/ithomer/article/details/9288353
  8. [ $? -eq ]&&echo int||echo chars
  9. done
  10. [root@host- ~]# chmod a+x var_expr.sh
  11. [root@host- ~]# ./var_expr.sh
  12. Please input:yanglt
  13. chars
  14. Please input:
  15. int
  16. Please input:^C
  17. [root@host- ~]#

实例2:判断输入两个参数后进行混合运算:

  1. [root@host- ~]# cat var_expr01.sh
  2. #!/bin/bash
  3. #n0.
  4. [ $# -ne ]&&{
  5. echo $"USAGE $0 num1 num2" #打印提示内容
  6. exit
  7. }
  8.  
  9. #n0.
  10. a=$
  11. b=$
  12. expr $a + $b + &>/dev/null
  13. if [ $? -ne ] #如果返回为0至少有一个不是整数
  14. then
  15. echo "Please input two nums."
  16. exit
  17. fi
  18.  
  19. #n0.
  20. echo "a-b=$(($a-$b))"
  21. echo "a+b=$(($a+$b))"
  22. echo "a*b=$(($a*$b))"
  23. echo "a/b=$(($a/$b))"
  24. echo "a**b=$(($a**$b))"
  25. echo "a%b=$(($a%$b))"
  26. [root@host- ~]# chmod a+x var_expr01.sh
  27. [root@host- ~]# ./var_expr01.sh
  28. a-b=-
  29. a+b=
  30. a*b=
  31. a/b=
  32. a**b=
  33. a%b=
  34. [root@host- ~]#

实例3:计算字符串长度

  1. 通过expr 计算字符串长度
  2. [root@host- ~]# char="i am is yanglt"
  3. [root@host- ~]# expr length "$char"
  4.  
  5. [root@host- ~]# expr ${#char}
  6.  
  7. [root@host- ~]# echo ${char} |wc -L
  8.  
  9. [root@host- ~]# echo ${char} |awk '{print length($0)}'
  10.  
  11. [root@host- ~]# echo ${#char}
  12.  
  13. [root@host- ~]# expr length "$char"
  14.  
  15. 写一个shell脚本打印一段话中字符数小于6的单词。
  16. [root@host- ~]# cat var_expr02.sh
  17. #!/bin/bash
  18. for n in You are welcome to learn with me shell
  19. do
  20. if [ `expr length $n` -lt ]
  21. then
  22. echo $n
  23. fi
  24. done
  25.  
  26. [root@host- ~]# sh var_expr02.sh
  27. You
  28. are
  29. to
  30. with
  31. me
  32. [root@host- ~]#

2. 4 bc运算命令实例

  1. .将bc作为计算机使用
  2. [root@host- ~]# bc
  3. bc 1.06.
  4. Copyright -, , , , , Free Software Foundation, Inc.
  5. This is free software with ABSOLUTELY NO WARRANTY.
  6. For details type `warranty'.
  7. +
  8.  
  9. *
  10.  
  11. .在命令行下使用,实现运算功能,配合变量运算
  12.  
  13. [root@host- ~]# echo +|bc
  14.  
  15. [root@host- ~]# echo *|bc
  16.  
  17. [root@host- ~]# echo 4.5+5.5|bc
  18. 10.0
  19. [root@host- ~]# echo "scale=2;355/113"|bc #scale=2表示保留两位小数
  20.  
  21. [root@host- ~]# echo "scale=5;355/113"|bc
  22. 3.14159
  23. [root@host- ~]# echo "scale=5;355/113"|bc
  24. 3.14159
  25. [root@host- ~]# i=
  26. [root@host- ~]# echo $i+ |bc
  27.  
  28. [root@host- ~]# a=`echo $i+ |bc`
  29. [root@host- ~]# echo $a
  30.  
  31. [root@host- ~]#
  32.  
  33. 、通过一条命令计算输出 +++...+ 的表达式,并计算结果。
  34. [root@host- ~]# echo `seq -s '+' `=`seq -s "+" |bc` #bc计算
  35. +++++++++=
  36. [root@host- ~]# echo `seq -s '+' `="$((`seq -s "+" 10`))" #$(()) 计算
  37. +++++++++=
  38. [root@host- ~]# echo `seq -s '+' `=`seq -s " + " |xargs expr` #使用expr计算
  39. +++++++++=
  40. [root@host- ~]# echo `seq -s '+' `=$(echo $[`seq -s "+" `]) #使用$[]计算
  41. +++++++++=
  42. [root@host- ~]#

2.5 awk、declare实现计算

  1. awk实现计算:
  2. [root@host- ~]# echo "7.7 3.8 " |awk '{print ($1-$2)}'
  3. 3.9
  4. [root@host- ~]# echo "358 113 " |awk '{print ($1-3)/$2}'
  5. 3.14159
  6. [root@host- ~]# echo "3 9" |awk '{print ($1+3)*$2}'
  7.  
  8. [root@host- ~]#
  9.  
  10. declare实现计算:
  11. [root@host- ~]# declare -i A= B=
  12. [root@host- ~]# A=A+B
  13. [root@host- ~]# echo $A
  14.  
  15. [root@host- ~]#

2.6 $[] 符号的运算

  1. [root@host- ~]# i=
  2. [root@host- ~]# i=$[i+]
  3. [root@host- ~]# echo $i
  4.  
  5. [root@host- ~]# echo $[**]
  6.  
  7. [root@host- ~]# echo $[/]
  8.  
  9. [root@host- ~]# echo $[%]
  10.  
  11. [root@host- ~]# echo $[ % ]

【第三章】Shell 变量的数值计算的更多相关文章

  1. C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容

    内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...

  2. Linux Shell系列教程之(三)Shell变量

    本文是Linux Shell系列教程的第(三)篇,更多shell教程请看:Linux Shell系列教程 Shell作为一种高级的脚本类语言,也是支持自定义变量的.今天就为大家介绍下Shell中的变量 ...

  3. 第三章 Js变量的作用域和匿名函数

    3.1 先看下面的事例: ①var temp=0; ②temp=0; 当js解析器检测到①这种情况的时候,解析器会为这个变量开辟一个内存空间,如果前面已经存在这个变量,就会把这个变量覆盖掉. 当解析器 ...

  4. 三、Shell变量类型和运算符

    一.Shell变量的应用 1.Shell变量的种类     ·用户自定义变量:由用户自己定义.修改和使用     ·预定义变量:Bash预定义的特殊变量,不能直接修改     ·位置变量:通过命令行给 ...

  5. shell 变量的数值计算实践 expr

    expr(evaluate(求值)expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度.匹配等的运算处理 expr 用做计算 必须有一个空格才会计算 [root@salt ...

  6. shell变量的数值计算

    shell中常见的算术运算命令如下 1.(())  用于整数运算的常用运算符,效率很高 2.let 用于整数运算,类似于  (()) 3.expr  可用于整数计算,但还有很多其他的额外功能 4.bc ...

  7. ES6标准入门 第三章:变量的解构赋值

    解构赋值:从数组和对象中提取值,对变量进行赋值. 本质上,这种写法属于“匹配模式”:只要等号两边的模式相同,左边的变量就会被赋予对应的值. 1.数组的结解构赋值 基本用法 let [foo, [[ba ...

  8. 你能知道的或者不知道的shell变量都在这里

    第2章 shell变量讲解 2.1 shell中的变量讲解 2.1.1 什么是shell变量 变量的本质就是内存中的一块区域 变量名 位置 变量是脚本中经常会使用的内容信息 变量可以在脚本中直接使用 ...

  9. (转载)shell变量基础—shell自定义变量

    (转载)http://see.xidian.edu.cn/cpp/html/1494.html 一.Shell定义变量需要遵循的规则 Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下 ...

随机推荐

  1. springboot启动报错:Could not resolve placeholder

    SpringBoot1.5,项目启动报错: Could not resolve placeholder 很明显是找不到配置文件引起的,查看配置文件目录结构如下: 很正常呀. 完全可以加载applica ...

  2. Google Fonts导致网页加载速度慢

    最近在做商城项目时候发现在加载一个html页面反应非常慢,查看发现是Google Font导致的网页加载速度缓慢,删除掉该样式会发现很多内容出错. 上网百度发现问题在于: 谷歌香港(google.co ...

  3. sharepoint2016安装OOS,OOS场负载均衡

    Office Online Server is the successor to Office Web Apps Server. It may be connected to SharePoint, ...

  4. JAVA正则表达式校验qq号码

    /* * 校验qq号码* 要求必须是5-15位* 0不能开头* 必须都是数字 */ (1)使用正则表达式校验qq号码 (2)方式2

  5. elementUI之switch应用的坑

    前言: 因为项目中用到了饿了么出品的element-ui这一套ui框架,所以很多地方都踩在了坑里,前面碰到了一些,今天着重聊一下switch这个组件. 首先switch接受Boolean类型的数据,莫 ...

  6. 断言assert()与调试帮助

    列表内容assert()是一种预处理宏(preprocessor marco),使用一个表达式来作为条件,只在DEBUG模式下才有用. assert(expr); 对expr求值,如果expr为假,则 ...

  7. python函数中闭包的概念说明

    函数中闭包的概念说明 闭包: 内层函数对外层函数非全局变量的引用,就叫做闭包 判断闭包方法 ._closure_ : 执行后返回有效信息就是闭包,返回none就不是闭包 举例1: 是闭包 def wr ...

  8. C语言之一般树

    1.一般树 将这种一般的树转化成我们熟悉的单链表形式,这有三层,每一层都可以看成单链表或者多个分散的单链表 数据节点如下: struct tree {        int elem;        ...

  9. 第一章:程序设计和C语言

    一.什么是计算机程序? 所谓程序就是一组计算机能识别和执行的指令.计算机的一切操作都是由程序控制的,本质是程序的机器,程序和指令是计算机系统最基本的概念. 二.什么是计算机语言? 人和计算机交流信息要 ...

  10. C语言中字符串赋值的几个理解

    在C语言中,字符串的赋值主要有两种方法,第一种是通过指针的方式直接赋值,第二种是通过数组直接赋值. 一.首先,我们来看第一种赋值方法:指针式赋值 我们知道,上面的示例是显然可以正常执行的,也是很容易理 ...