一、算数运算符

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 关于$(())的实例

实例一:运算示例

[root@host- ~]# echo $((+))     #加法
[root@host- ~]# echo $((-)) #减法
[root@host- ~]# echo $((*)) #乘法
[root@host- ~]# echo $((/)) #除法
[root@host- ~]# echo $((%)) #余数
[root@host- ~]# echo $((**)) #幂运算

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

[root@host- ~]# cat vartest01.sh
#!/bin/bash
a=
b=
echo "a-b=$(($a-$b))"
echo "a-b=$(($a-$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
[root@host- ~]# chmod a+x vartest01.sh
[root@host- ~]# ./vartest01.sh
a-b=
a-b=
a*b=
a/b=
a**b=
a%b=
[root@host- ~]#

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

[root@host- ~]# cat var_jisuan.sh
#!/bin/bash
#+,-,*,/ --
print_useage(){
printf "Please enter an int\n"
exit
}
read -p "Please input first number:" fnum
if [ -n "`echo $fnum |sed 's/[0-9]//g'`" ];then #-n选项可以理解为字符串 no zero
print_useage
fi
read -p "Please input the operators:" op
if [ "${op}" != "+" ]&&[ "$op" != "-" ]&&[ "$op" != "*" ]&&[ "$op" != "/" ];then
echo "Please use {+|-|*|/}"
exit
fi
read -p "Please input second number: " snum
if [ -n "`echo $snum | sed 's/[0-9]//g'`" ];then
print_useage
fi
echo "${fnum}${op}${snum}=$((${fnum}${op}${snum}))"
[root@host- ~]# chmod a+x var_jisuan.sh
[root@host- ~]# ./var_jisuan.sh
Please input first number:
Please input the operators:+
Please input second number:
+=
[root@host- ~]#

实例四:高效的计算方法

[root@host- ~]# cat var_jisuan02.sh
#!/bin/bash
read -p "Please input num=num1{+|-|*|/}num2:" num
echo $(($num))
[root@host- ~]# chmod a+x var_jisuan02.sh
[root@host- ~]# ./var_jisuan02.sh
Please input num=num1{+|-|*|/}num2:* [root@host- ~]# 或者用如下方法:
[root@host- ~]# cat var_jisuan02.sh
#!/bin/bash
echo $(($))
[root@host- ~]# sh var_jisuan02.sh + [root@host- ~]#

2.2 let运算命令实例

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

#!/bin/bash
CheckUrl(){ #定义函数
timeout= #定义wget访问超时时间
fails= #初始化网站访问失败次数为0
success= #初始化网站访问成功次数为0
while true #持续循环
do
wget --timeout=$timeout --tries= https://www.cnblogs.com/yangleitao/ -q -O /dev/null #--tries
#增加重试次数。 -q 不显示下载过程 -O 下载并以不同的文件名保存 if [ $? -ne ];then
let fails=fails+
else
let success+=
fi
if [ $success -ge ];then
echo "success"
exit
fi
if [ $fails -ge ];then
Critical="system is dowm."
echo $Critical|tee|mail -s "$Critical" abc@ddsaff.com
exit fi
done
}
CheckUrl #执行函数

2. 3expr运算命令实例

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

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

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

[root@host- ~]# cat var_expr01.sh
#!/bin/bash
#n0.
[ $# -ne ]&&{
echo $"USAGE $0 num1 num2" #打印提示内容
exit
} #n0.
a=$
b=$
expr $a + $b + &>/dev/null
if [ $? -ne ] #如果返回为0至少有一个不是整数
then
echo "Please input two nums."
exit
fi #n0.
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
[root@host- ~]# chmod a+x var_expr01.sh
[root@host- ~]# ./var_expr01.sh
a-b=-
a+b=
a*b=
a/b=
a**b=
a%b=
[root@host- ~]#

实例3:计算字符串长度

通过expr 计算字符串长度
[root@host- ~]# char="i am is yanglt"
[root@host- ~]# expr length "$char" [root@host- ~]# expr ${#char} [root@host- ~]# echo ${char} |wc -L [root@host- ~]# echo ${char} |awk '{print length($0)}' [root@host- ~]# echo ${#char} [root@host- ~]# expr length "$char" 写一个shell脚本打印一段话中字符数小于6的单词。
[root@host- ~]# cat var_expr02.sh
#!/bin/bash
for n in You are welcome to learn with me shell
do
if [ `expr length $n` -lt ]
then
echo $n
fi
done [root@host- ~]# sh var_expr02.sh
You
are
to
with
me
[root@host- ~]#

2. 4 bc运算命令实例

.将bc作为计算机使用
[root@host- ~]# bc
bc 1.06.
Copyright -, , , , , Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
+ * .在命令行下使用,实现运算功能,配合变量运算 [root@host- ~]# echo +|bc [root@host- ~]# echo *|bc [root@host- ~]# echo 4.5+5.5|bc
10.0
[root@host- ~]# echo "scale=2;355/113"|bc #scale=2表示保留两位小数 [root@host- ~]# echo "scale=5;355/113"|bc
3.14159
[root@host- ~]# echo "scale=5;355/113"|bc
3.14159
[root@host- ~]# i=
[root@host- ~]# echo $i+ |bc [root@host- ~]# a=`echo $i+ |bc`
[root@host- ~]# echo $a [root@host- ~]# 、通过一条命令计算输出 +++...+ 的表达式,并计算结果。
[root@host- ~]# echo `seq -s '+' `=`seq -s "+" |bc` #bc计算
+++++++++=
[root@host- ~]# echo `seq -s '+' `="$((`seq -s "+" 10`))" #$(()) 计算
+++++++++=
[root@host- ~]# echo `seq -s '+' `=`seq -s " + " |xargs expr` #使用expr计算
+++++++++=
[root@host- ~]# echo `seq -s '+' `=$(echo $[`seq -s "+" `]) #使用$[]计算
+++++++++=
[root@host- ~]#

2.5 awk、declare实现计算

awk实现计算:
[root@host- ~]# echo "7.7 3.8 " |awk '{print ($1-$2)}'
3.9
[root@host- ~]# echo "358 113 " |awk '{print ($1-3)/$2}'
3.14159
[root@host- ~]# echo "3 9" |awk '{print ($1+3)*$2}' [root@host- ~]# declare实现计算:
[root@host- ~]# declare -i A= B=
[root@host- ~]# A=A+B
[root@host- ~]# echo $A [root@host- ~]#

2.6 $[] 符号的运算

[root@host- ~]# i=
[root@host- ~]# i=$[i+]
[root@host- ~]# echo $i [root@host- ~]# echo $[**] [root@host- ~]# echo $[/] [root@host- ~]# echo $[%] [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. 用模板引擎Art-Template渲染空格或换行符引发的一场“命案”

    一.绪论 说实话,真的不知道如何给这篇博客命名,因为我觉得应该有一些小伙伴遇到跟我同样的问题正在抓耳挠腮中. 二.导火索 最近在做一个移动H5翻页的功能,类似于MAKA模板那种.假设大致框架如下 ​ ...

  2. 一、hadoop 及 hadoop的环境搭建

    一.Hadoop引言 Hadoop是在2006年雅虎从Nutch(给予Java爬虫框架)工程中剥离一套分布式的解决方案.该方案参考了Goggle的GFS(Google File System)和Map ...

  3. try...catch..finally..语句中,finally是否必须存在?作用是什么

    try { } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ } 1: ...

  4. 解决微信小程序用 SpringMVC 处理http post时请求报415错误

    解决微信小程序用 SpringMVC 处理http post时请求返回415错误 写微信小程序时遇到的问题,这个坑硬是让我整了半天 wx.request请求跟ajax类似处理方法一致 小程序端请求代码 ...

  5. python学习笔记(3)---cookie & session

    一.cookie & session 1.cookie: cookie 就是由服务器发送给客户端的特殊信息,而这些信息以文本的方式存放在客户端,然后客户端每次向服务器发送请求都会带上这些特殊信 ...

  6. Cannot send session cache limiter - headers already sent问题

    在php.ini中将“always_populate_raw_post_data ”设置为“-1”,并重启

  7. PHP变量定义及工作原理

    1.变量定义: 通常学到的是,变量代表存储空间以及其中数据的一个“标识符”. 变量名 指向 变量值 更深入的说是 变量指向内存的一块区域 2.变量工作原理,通过画图分析法——内存空间 <?php ...

  8. Hadoop原理之——HDFS原理

    Hadoop 3个核心组件: 分布式文件系统:Hdfs——实现将文件分布式存储在很多的服务器上(hdfs是一个基于Linux本地文件系统上的文件系统) 分布式运算编程框架:Mapreduce——实现在 ...

  9. Python学习手册之类和继承

    在上一篇文章中,我们介绍了 Python 的函数式编程,现在我们介绍 Python 的类和继承. 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/100106 ...

  10. kafka初步学习

    消息系统 什么是消息系统? 消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,但不担心如何共享它.分布式消息传递给予可靠消息队列的概念.消息在客户端应用程序和消息传递系 ...