Abstract :

1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算;
2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算;

1, Linux shell 变量的基本运算

数值作为常规变量直接赋值给变量,并且以字符串形式保存。

1.1 let 命令可以用于直接执行基本操作:
        
当我使用 let 的时候,我们不使用 $ 符号引用变量。

  1. no1=7;
  2. no2=8;
  3. echo "------------ let command -------------"
  4. let no1++;
  5. let no2--;
  6. let no1+=3;
  7. let no2-=5;
  8. let result=no1+no2;
  9. printf "let result=%d\n" $result;

1.2 " [ ] "运算符跟 let 命令很相似:

"[ ]" 运算符里面可以使用 $ 符号引用变量,同时支持变量名与运算符之间不带空格。

  1. echo "----------------- [] operator ----------------"
  2. printf "no1:%d no2:%d \n" $no1 $no2;
  3. result1=$[ no1 + no2 ];
  4. printf "result1 = %d \n" $result1;
  5. result2=$[no1+no2 + 7];
  6. printf "result2 = %d \n" $result2;
  7. result3=$[ $no1+$no2+5 ];
  8. printf "result3 = %d \n" $result3;
  9. no2=$[ no2 + 1 ];
  10. printf "no1 = %d no2 = %d \n" $no1 $no2;


1.3 " (( )) " 运算符跟 " [ ] " 运算符一样:

同样支持使用 $ 符号引用变量进行基本运算,同时支持变量名与运算符之间不带空格。

  1. echo "----------------- (( )) operator --------------"
  2. printf "no1: %d no2: %d \n" $no1 $no2;
  3. result1=$(( no1 + no2 ));
  4. printf "result1 = %d \n" $result1;
  5. result2=$((no1+no2+3));
  6. printf "result2 = %d \n" $result2;
  7. result3=$(( $no1+$no2 + 5))
  8. printf "result3 = %d \n" $result3;

1.4 "expr" 命令同样可以用于变量的基本运算:

"expr" 命令同样支持 $ 符号引用变量进行基本运算,但是变量与运算符之间必须使用空格作为分隔符;
在使用 "expr" 命令对变量进行运算后,整个表达式必须使用 " · expression · " 的模式赋值给变量,即包含在 " ` " 符里面,
并且等效于 " $( expression ) " 模式。

  1. echo "---------------- expr command ---------------"
  2. printf "no1: %d no2: %d \n" $no1 $no2;
  3. result1=`expr 3 + 4`;
  4. printf "result1 = %d \n" $result1;
  5. result2=`expr $no1 + 4`;
  6. printf "result2 = %d \n" $result2;
  7. result3=`expr $no1 + $no2`;
  8. printf "result3 = %d \n" $result3;
  9. result4=`expr $no1+$no2`;
  10. printf "result4 = %d \n" $result4;
  11. result5=$(expr $no1 + 3);
  12. printf "result5 = %d \n" $result5;
  13. result6=$(expr $no1+4);
  14. printf "result6 = %d \n" $result6;
  15. result7=$(expr $no1+$no2);
  16. printf "result7 = %d \n" $result7;


由上图实验结果所示," expr " 命令的表达式中,变量与运算符之间必须使用空格作为分隔符,
有一点我没搞明白的就是为什么42行的表达式已经错了,为什么在43行才报错。
" expr " 还支持许多运算表达式,大家在终端打个 expr --help 命令看看吧,o(∩_∩)o 哈哈。。。

上面所述的四种shell中执行变量运算的方式中不支持浮点运算!

2, Linux shell 中使用 bc 命令实现高级数学运算:

bc 命令使用 标准输入 stdin 作为输入;
bc 是一个支持精确的浮点运算的高级计算器;
bc 拥有相当多的输入选项,并且支持数学函数调用;
执行 bc --help 自行查看 bc 所支持的输入选项;

2.1 bc 命令使用标准输入 stdin 作为输入,并且支持浮点运算:

  1. echo "----------------- bc command ----------------"
  2. echo "4 * 0.56" | bc;
  3. no=48;
  4. result1=`echo "$no * 1.5" | bc`;
  5. echo "result1 = $result1";

2.2 bc 命令支持运算精度设置:

通过附加参数可以给 bc 指定运算精度;
附加参数使用分号 " ; " 作为分隔符;

  1. result2=`echo "scale=9;$no / 3;" | bc`;
  2. echo "result2 = $result2";

实验结果所示,使用分号 " ; " 加入附加参数 scale ,指定精度为 9 位小数;

2.3 使用 bc 进行数值的记数进制间转换:

通过 ibase=value 作为附加参数,指定输入变量的记数进制;
通过 obase=value 作为附加参数,指定输出变量的记数进制;

  1. no=100;
  2. echo "echo \"obase=2;ibase=10;$no\" | bc = `echo "obase=2;ibase=10;$no" | bc`";
  3. no=1000;
  4. echo "echo \"scale=5;obase=10;ibase=2;$no/3\" | bc = `echo "scale=5;obase=10;ibase=2;$no/3" | bc`";

2.4 使用 bc 调用数学公式进行高级数学运算:

" sqrt(value) " 执行 value 的开方运算;
" value^index " 执行 value 的幂运算;

  1. echo "sqrt(100) = `echo "sqrt(100)" | bc`";
  2. echo "sqrt(100) = $(echo "sqrt(100)" | bc)";
  3. echo "10^3 = `echo "10^3" | bc`";
  4. echo "10^3 = $(echo "10^3" | bc)";

http://blog.chinaunix.net/uid-20671208-id-3552751.html

 

Linux shell 变量 数学 运算的更多相关文章

  1. shell变量数学运算

    shell变量数学运算 #!/bin/sh # 本脚本说明shell脚本中变量运算的用法 # 错误的用法var=1var=$var+1echo $var 输出:1+1 # 第一种用法,letvar=1 ...

  2. Linux Shell 06 数学运算

    1.let let "var+=1" let v2= echo $var,$v2 #2,4 a.只支持整数运算 b.基本支持所有运算符(包括++,——,**) c.表达式中使用变量 ...

  3. shell变量与运算

    shell变量与运算 @(0003 shell编程) 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$号,只有引用变量的值时才使用$号.也就是说在内存中,标记变量的变量名称是str,而不 ...

  4. SHELL脚本--数学运算和bc命令

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 使用let.(()).$(())或$[]进行基本的整数运算,使 ...

  5. Linux shell变量详解

    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个 ...

  6. Linux Shell 变量自加

    转至:https://blog.csdn.net/dj0379/article/details/50946398/ declare -i iv=$svnvlet iv+=1shell中变量自增的实现方 ...

  7. shell执行数学运算

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

  8. python文件读写操作与linux shell变量命令交互执行

    python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼! #coding=utf-8 #!/usr/bin/python import os impor ...

  9. 《Linux shell变量总结回顾》RHEL6(转)

    文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [root@localhost ~]# set   //查看到的是局部变量和全局变量2种 [ ...

随机推荐

  1. ubuntu下安装kde Plasma

    Ubuntu15.04安装KDE Plasma 5.3桌面环境_百度经验 http://jingyan.baidu.com/article/bad08e1ee280e709c8512185.html ...

  2. Codeforces Round #Pi (Div. 2) C. Geometric Progression map

    C. Geometric Progression Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  3. 在CentOS 6上搭建私有的Docker Registry

    在CentOS 6上搭建私有的Docker Registry v2Registry概念 :Registry是一个无状态的, 高可扩展的服务器端应用程序, 用于存储和分发Docker Image. 依赖 ...

  4. Android 电池电量进度条,上下滚动图片的进度条(battery)

    最近,制作一个app,需要模拟一个电池电量的进度条,根据电量多少来设置百分比,进度条不断上下滚动,就像平时手机充电一样的电池电量进度条.我就自定义view实现了电量进度条.修改图片就可以达到自己想要的 ...

  5. AutoMapper使用笔记

    AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...

  6. Eclipse启动Tomcat时45秒超时的解决方法

    Eclipse启动Tomcat时,默认配置的启动超时时长为45秒.假若项目需要加载的东西比较多,启动时间会比较久,如果启动超过45秒将会报错.有两种解决途径,方法只有一个,就是修改启动时间. 1. 修 ...

  7. 简单几何(点的位置) POJ 1584 A Round Peg in a Ground Hole

    题目传送门 题意:判断给定的多边形是否为凸的,peg(pig?)是否在多边形内,且以其为圆心的圆不超出多边形(擦着边也不行). 分析:判断凸多边形就用凸包,看看点集的个数是否为n.在多边形内用叉积方向 ...

  8. POJ2441 Arrange the Bulls(状压DP)

    题目是,有n头牛,每头牛都喜爱某几个草地,要把这n头牛分配给m个不同的它们喜爱的草地,问有几种分配方式. dp[n][S]表示前n头牛分配完毕后占用的草地集合是S的方案数 dp[0][0]=1 dp[ ...

  9. 删除mysql

    我以前遇到过删除mysql如果删除不干净的话,下次无法安装,也无法启动服务. 如今找到了解决方案 前言:只适用在Windows下--在控制面板中删除MySQL程序--然后在C盘中删除MySQL文件夹- ...

  10. 再析在spring框架中解决多数据源的问题

    在前面我写了<如何在spring框架中解决多数据源的问题>,通过设计模式中的Decorator模式在spring框架中解决多数据源的问题,得到了许多网友的关注.在与网友探讨该问题的过程中, ...