Linux基础------Shell数值计算的几种方法

原文:http://blog.csdn.net/fu_wayne/article/details/21620639

在Linux下总会遇到数值计算问题,由于Linux下变量都属于弱变量,没有变量类型的概念(貌似脚本语言都是这样)。

例如定义一个变量:x=1

此时的变量x默认是一个字符串,即使看着像一个数字,所以当尝试用如下的方法去进行计算的时候,得到的结果却不是想要的

echo $x+=1         ------------> 输出:2+=1,并不是想要的结果2

Linux下有多种方法进行计算,一下摘录几例:

1.使用$[]

个人最常用的就是$[]方法进行计算,简单方便,适合不太复杂的计算。

  1. x=1
  2. echo $[$x+=1]

输出:2

2.使用expr

expr命令为Linux中的命令,一般用于整数值计算,但也可用于字符串操作。
使用格式:

expr var1 operator var2
 
例如:
  1. x=1
  2. expr $x + 4
输出:5
 
注意:表达式之间的空格,注意只能进行整数运算,如果操作数不为整数,命令将会报错。
此命令所有计算的结果会以整数形式返回,例如上述的表达式变为:expr $x / 4 ,其结果为1,结果已经自动进行了取整操作。
 
 
3.使用(())
 
使用方法:((表达式1,表达式2,表达式3))
 
相比上面的两种方法,(())这种方法略显强大,它的强大之处在于:
1) 支持a++,a--操作(是不是找到C语言的感觉)
2) 支持多个表达式运算,各个表达式之间用“,”分开
3) 双括号可以进行逻辑运算,四则运算
4) 双括号结构 扩展了for,while,if条件测试运算
5) 在双括号结构中,所有变量可以不加入:“$”符号前缀
 
  1. x=1
  2. ((y = x + 1,z = y + 1))
  3. echo $z

输出:3

 
如果双括号带:$,将获得表达式值,赋值给左边变量
  1. a=10
  2. b=10
  3. total=$((a*b))
  1. echo $total
输出:100
 
扩展流程控制语句(逻辑关系式)(摘自网络)
  1. #!/bin/sh
  2. num=100;
  3. total=0;
  4. for((i=0;i<=num;i++));
  5. do
  6. ((total+=i));
  7. done
  8. echo $total;
  9. total=0;
  10. i=0;
  11. while((i<=num));
  12. do
  13. ((total+=i,i++));
  14. done
  15. echo $total;
  16. if((total>=5050));then
  17. echo "ok";
  18. fi
4.使用 let 命令
  1. var=1
  2. let "var+=1" 或 let var+=1 这种写法运算符间不能有空格
  3. echo $var
  4. output:
  5. 2

使用方法:

let 表达式
注意:let必须是完整的算术表达式,即有等号两边

(转)Linux基础------Shell数值计算的几种方法的更多相关文章

  1. linux 执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时, ...

  2. Linux文本行倒序排列6种方法

    Linux文本行倒序排列6种方法 1. 命令方法: nl filename | sort -nr | cut -f2 这个方法很unix风格,使用多命令组合完成某种功能是典型的unix特点 单命令: ...

  3. Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件

    Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件 交换文件 查看内存:free -m , -m是显示单位为MB,-g单位GB 创建一个文件:touch /root/swapfi ...

  4. linux进程后台运行的几种方法 - nohup/setsid/&

    linux进程后台运行的几种方法 - nohup/setsid/& [转载]   我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务 ...

  5. 执行shell脚本的几种方法及区别

    执行shell脚本的几种方法及区别 http://blog.csdn.net/lanxinju/article/details/6032368 (认真看) 注意:如果涉及到脚本之间的调用一定要用 . ...

  6. Linux系统产生随机数的3种方法

    Linux系统产生随机数的3种方法 方法一:生成8位随机数 [root@localhost ~]# echo "$RANDOM$(date +%N%t)" | md5sum | c ...

  7. Linux 下操作GPIO(两种方法,驱动和mmap)(转载)

    目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据io ...

  8. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  9. Linux 下操作gpio(两种方法,驱动和mmap)

    目前我所知道的在linux下操作GPIO有两种方法: 1.  编写驱动,这当然要熟悉linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据 ...

随机推荐

  1. 编写高质量代码改善C#程序的157个建议——建议25:谨慎集合属性的可写操作

    建议25:谨慎集合属性的可写操作 如果类型的属性中有集合属性,那么应该保证属性对象是由类型本身产生的.如果将属性设置为可写,则会增加抛出异常的几率.一般情况下,如果集合属性没有值,则它返回的Count ...

  2. 编写高质量代码改善C#程序的157个建议——建议14: 正确实现浅拷贝和深拷贝

    建议14: 正确实现浅拷贝和深拷贝 为对象创建副本的技术称为拷贝(也叫克隆).我们将拷贝分为浅拷贝和深拷贝. 浅拷贝 将对象中的所有字段复制到新的对象(副本)中.其中,值类型字段的值被复制到副本中后, ...

  3. DELPHI XE5轻松输出到MacOsX

    配置:MACOSX10.9.3 +XCODE5.1 + VBOX + WINXP + DELPHI XE 5UP2 配置步骤从略. 1.选择firemonkey desktop application ...

  4. OnExit事件 OnChange事件

    procedure TSetParkForm.edtPrePosExit(Sender: TObject); // 焦点移开 或已操作 begin if (G2.RowCount > 0) an ...

  5. .netcore部署到IIS上出现HTTP Error 502.5 - Process Failure问题解决

    首先网上是有很多解决方案,但是对我这个错误完全没用 如果你们没有环境首先得预装环境如下 1.首先在bing.com下搜索asp.net core download, 然后打开搜索到的信息.NET Do ...

  6. 怎样检查fragmentation

    可以运行下面SQL语句: SELECT dbschemas.[name] AS 'Schema', dbtables.[name] AS 'Table', dbindexes.[name] AS 'I ...

  7. 【bzoj3998】弦论 后缀自动机

    Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个. ...

  8. 老男孩Day16作业:登录、注册、后台管理页面(动态)

    一.作业需求: 1.后台管理主界面(左边菜单框.(全选.反选)框.返回顶部按钮) 2.老男孩登录.注册页面 二.博客地址:https://www.cnblogs.com/catepython/p/93 ...

  9. P3235 [HNOI2014]江南乐

    $ \color{#0066ff}{ 题目描述 }$ 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的 ...

  10. URL编码以及GET和POST提交乱码解决方案

    get方式时参数是作为url一部分传输的.而对于url是有规范的,汉字超出了规范的范围. post方式不需要加编码是错误的.post时也必须传送符合服务器规范的编码.如果错误,服务器收到的内容也不会正 ...