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有三个参数,scale是运算精度,ibase指定输入变量的记数进制;obase指定输出变量的记数进制;
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)";

Linux shell 整数运算 let [ ] (( )) expr以及 浮点数 bc用法(转)的更多相关文章

  1. Linux Shell 数学运算

    Linux Shell 数学运算 在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果.要在Shell中进行数学运算,我们需要借助点小手段.目前,Linux Shell中进行数学运 ...

  2. Shell初学(六)Linux Shell 时间运算以及时间差计算方法

    Linux Shell 时间运算以及时间差计算方法 时间的加减,以及时间差的计算. 1. 时间加减 这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒. 如:1990-01 ...

  3. shell整数运算

  4. linux shell & bash

    shell & bash shell指允许用户通过文本操作计算机的程序. interactive shell:从是否通过标准输入输出与用户进行交互的角度分为交互式shell(interacti ...

  5. linux shell 常用基本语法

    转自网络,真正来源不详.... 一. Linux基本命令 1.1.  cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或 ...

  6. Linux Shell 基本语法

    一. Linux基本命令 1.1.  cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或目录 1.2. mv命令 用户可 ...

  7. [Linux]shell编程基础/linux基础入门

    声明执行程序 #!/bin/bash 用来告诉系统使用/bin/bash 程序来执行该脚本.譬如python 脚本,可以这样写: #!/usr/bin/python   赋值和引用 赋值公式: 变量名 ...

  8. linux shell expr 使用

    linux shell expr 使用 收藏人:春秋百味 -- | 阅: 转: | | 分享 非原创, 摘自:<LINUX与UNIX Shell编程指南> 17.5 expr用法 expr ...

  9. Linux shell命令中expr

    在Linux shell命令中expr虽然不是很起眼,但是它的作用是非常大的!到目前为止,我个人看来最大的作用就是两个——四则运算和字符串的操作. 先说四则运算,在Shell中四则运算不能简简单单的加 ...

随机推荐

  1. [luoguP3325][HNOI2012]矿场搭建

    P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...

  2. 测试Storm的多源头锚定

    过程, Spout 发送msgid 1-10 一级Bolt, msgid1的tuple做为基本组合tuple, 其他8个和一组合, 然后发送给二级Bolt, 同时单个msgid对应的tuple都ack ...

  3. 【Oracle】三个配置文件tnsnames-listener-sqlnet介绍【转】

    转自:博客园-oracle: listener.ora .sqlnet.ora .tnsnames.ora的配置及例子 介绍三个配置文件 1)listener.ora 2)sqlnet.ora 3)t ...

  4. CSS 中定位方式有几种,说明他们的意义

    1.static  默认定位方式 显示为没有设置定位时的位置 2.fixed(固定定位)  他所相对固定的对象是可视窗口,与其他无关.以浏览器窗口作为参考进行定位 3.relative(相对定位) 元 ...

  5. c# 获取网络流量

    public class ip_helper{enum Constants {MAX_INTERFACE_NAME_LEN=256, MAXLEN_PHYSADDR=8,MAXLEN_IFDESCR= ...

  6. Ubuntu 16.04 Server 版安装过程图文详解

    进入系统安装的第一个界面,开始系统的安装操作.每一步的操作,左下角都会提示操作方式!! 1.选择系统语言-English 2.选择操作-Install Ubuntu Server 3.选择安装过程和系 ...

  7. VMware虚拟机下载与安装(内附密钥)

    VMware下载与安装 一.虚拟机的下载 1.进入VMware官网,点击左侧导航栏中的下载,再点击图中标记的Workstation Pro,如下图所示. 2.根据操作系统选择合适的产品,在这里以Win ...

  8. vue入门笔记

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与 ...

  9. ECSHOP和SHOPEX快递单号查询EMS插件V8.6专版

    发布ECSHOP说明: ECSHOP快递物流单号查询插件特色 本ECSHOP快递物流单号跟踪插件提供国内外近2000家快递物流订单单号查询服务例如申通快递.顺丰快递.圆通快递.EMS快递.汇通快递.宅 ...

  10. 转:python教程专题资源免费下载整理合集收藏

    python教程专题资源免费下载整理合集收藏 < Python学习手册(第4版)>(Learning Python, 4th Edition)[PDF] 94MB 简体中文 <Pyt ...