变量的数值计算方法大致有双括号 (()), expr,  bc, $[ ]

例子1

注意:2**3表示2的3次方,a++表示先输出a自身的值,然后进行++的运算; --a表示先进行--的运算,然后再输出a自身的值

这例子的意思就是说啊
1. 双括号里可以直接运算并且赋值给变量,简单的运算就用 ((a=1+2**4-4%2))吧,方便啊
2. 也可以是双括号里运算完后,按照平常的方式赋值给变量,就是例子中的b=$((....)),运算复杂了用这一种,比如括号里有变量的时候。
3. 都不用赋值给变量,直接出运算结果。这种方法有时候会有奇效,比如下面的实现加减乘除计算器
 
 
例子2:比较大小,真的布尔值为1,假的布尔值为0

例子3:计算连续数之和的公式  n*(n+1)/2

注意:

上面的所有操作只能是用整数,小数是不能成功运算的

例子3:关于双括号中空格的问题

例4,变量运算,(())中直接写变量名

#!/bin/bash
read num1 num2 num3
while [ $num1 -lt $num3 ]
doecho $num1num1=$((num1+num2))
done

二. bc命令的用法,可以用于小数

可直接输入bc命令进入交互界面,进行操作;当然也可以在命令行中进行操作,因为bc支持科学计算,所有功能很强大,只要是正确的计算表达式,bc就能处理。

scale可以用来设置保留小数点的位置,scale=3就表示保留三位小数;

obase可以把十进制数转变为其他进制的值。

例子1:

echo 3.5+5 | bc  输出为8.5

echo "obase=2;8" | bc  输出为1000    #表示为10进制的8转换成2进制的值

echo "obase=16;20" | bc    #表示十进制20转成16进制的值

echo "scale=3; 5.23/3.13" | bc     #保留三位小数值

例子2

seq -s "+" 10     #输出为1+2+3+4+5+6+7+8+9+10

seq -s "+" 10 | bc    #输出为55

说明:seq -s "+”10,它表示以“+”为分隔符,来按顺序生成1-10;

有关变量的小数计算还是用awk好,比如

x=3.4

y=4.6

echo $x $y |awk '{print $1+$2}

三. expr (evaluate expressions)

expr 命令一般用于整数值,但也可以用于字符串,用来求表达式的值,同时expr也是一个手工命令行计算器

1. expr基本算数运算

expr $[$a+$b],使用中括号的形式进行运算的方式值得推荐

例如:expr $[2+3]   输出为5

注意:其实这里expr就是一个输出的功能,数值的计算已经由 $[...] 完成,所以等价于echo $[2+3]也可以直接输出计算结果

2. expr 匹配字符用法,expr "..." : "..."

例如,expr "test.txt" : ".*\.txt"    输出为非0

如果结果非0,判断为真,说明字符匹配;如果输出为0,表示不匹配

脚本中可以做一个小优化

expr "text.pub" : ".*\.pub" && echo 1 || echo 0

3. 用expr判断变量是否整数

expr $a + 0 > /dev/null 2>&1

[ $? -eq 0 ] && echo int || echo chars

如果想连续判断,可以把上面语句放在while true 循环中

4. 通过expr计算字符串长度

chars=`seq -s " " 100`

echo ${#chars}    或者  echo $(expr length "$chars")  都可以得到字符串长度

注意:两种把命令执行结果赋值给变量的方式为  `....` 和 $(....)

拓展expr的用法

# seq 1 10,输出是1 2 3 4 5 6 7 8 9 10

默认分隔符是空格,可以用-s 指定分隔符,如下

test3=`seq -s "+" 1 10`;echo $test3     输出为1+2+3+4+5+6+7+8+9+10

expr $[$test3]可计算其值,结果为55

四. read命令及其实践

shell变量除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入中获得

格式为:read [参数] [变量名]

常用参数:

-p:设置提示信息

-t:设置输入超时,默认单位为秒

例子2,有如下脚本,可执行参数值不为整数的情况

#!/bin/bash

while true

do

read -t 10 -p "please input 2 number:" a b

expr $a + 0 > /dev/null 2>&1

[ $? -ne 0 ] && continue  #continue表示不执行下面的代码,转而进入下一轮循环

expr $b + 0 > /dev/null 2>&1

[ $? -ne 0 ] && continue||break   #break表示立马跳出所有循环

done

转载于:https://www.cnblogs.com/regit/p/8058721.html

shell的算术运算相关推荐

  1. shell变量算术运算

    shell变量算术运算 ((i=j+k)) 等价于 i=expr $j + $k ((i=j−k)) 等价于 i=expr $j -$k ((i=j∗k)) 等价于 i=expr $j \*$k (( ...

  2. linux脚本乘法运算符,shell算术运算

    Bash shell 的算术运算有四种方式: 1:使用 expr 外部程式 加法 r=`expr 4 + 5` echo $r 注意! '4' '+' '5' 这三者之间要有空白 r=`expr 4 ...

  3. Linux Shell 算术运算

    米扑博客 总结了 Bash shell 的算术运算有四种方式: 1.使用 expr 外部程式 加法 r=`expr 4 + 5` echo $r 注意! '4' '+' '5' 这三者之间要有空格 r ...

  4. linux运算_LinuxShell算术运算

    Bash shell 的算术运算有四种方式: 1:使用 expr 外部程式 加法 r=`expr 4 + 5` echo $r 注意! '4' '+' '5' 这三者之间要有空白 r=`expr 4 ...

  5. Shell 基础介绍 [1]

    本文目录 1.什么是Shell? 2.脚本语言类型 3.其他常用的脚本语句种类 4.Shell脚本的建立和执行 5.Shell 变量类型 6.普通变量 7.Shell 特殊重要变量 8.Shell进程 ...

  6. 【Shell 编程基础第一部分】Shell脚本HelloShell及简单的Shell基础

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/shell/759.html ☞ 点击订阅 ☜ ...

  7. Linux shell脚本1

    什么是shell shell是一个命令解释器,提供用户和机器之间的交互 支持特定语法,比如逻辑判断.循环 每个用户都可以有自己特定的shell 还有其他zsh.ksh等 CentOS7 默认的shel ...

  8. SHELL编程之变量定义

    SHELL编程 学习前奏 1. 文件处理工具 1.1 grep工具 1.2 cut工具 1.3 sort工具 1.4 uniq工具 1.5 tee工具 1.6 paste工具 1.7 tr工具 小试牛 ...

  9. SHELL编程(一)

    SHELL编程 1. 文件处理工具 1.1 grep工具 1.2 cut工具 1.3 sort工具 1.4 uniq工具 1.5 tee工具 1.6 paste工具 1.7 tr工具 2. 编程语言分 ...

最新文章

  1. 面试官:因为这个语言,我淘汰了90%的人!
  2. linux环境双网卡主机路由配置
  3. python如何判断两个数组完全相等?
  4. 怎样实现关闭connection时自动关闭Statement和ResultSet
  5. ECCV 2018 | 美图云联合中科院提出基于交互感知注意力机制神经网络的行为分类技术...
  6. 博通2021财年第三季度营收67.8亿美元,半导体业务营收50亿美元
  7. org.springframework.boot:spring boot maven plugin丢失---SpringCloud Alibaba_若依微服务框架改造_--工作笔记012
  8. 苹果怒封Google、FB:私下购买用户隐私被制裁,数万员工受牵连
  9. 東京タワー初めてphoto
  10. Python:下载安装包
  11. 赤兔oracle恢复软件 收费,赤兔Oracle数据库恢复软件 v11.6
  12. mysql asc_mysql – 在字符串列上使用asc和desc的索引
  13. rabbit原理及项目应用
  14. Elasticsearch 最佳运维实践总结
  15. Dissect HTTP3
  16. 几何分布的众数为什么是1
  17. 推荐几个英语学习网站
  18. Flex Builder 3 如何弹出“打开文件对话框”,限制选择文件类型
  19. Activity中getWindow().setBackground()与getWindw().getDecorView().setBackground()的区别
  20. python3.8与pyinstaller_pyinstaller 3.5 在python 3.8 环境下出现不兼容的问题

热门文章

  1. DockerFile最佳实践:
  2. linux 深入检测io详情的工具iopp
  3. 使用wordpress分页函数paginate_links
  4. 推荐背单词最有效的方法:使用艾宾浩斯记忆曲线背单词
  5. Delphi 的消息机制浅探二
  6. Ubuntu Fcitx 乱码教训
  7. The new year,new mood,new plan~~
  8. Python XML操作处理
  9. Python代码分析工具:PyChecker、Pylint
  10. #论char数组结尾’\0’的必要性#