Linux shell 变量 数学 运算
Abstract :
1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算;
2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算;
1, Linux shell 变量的基本运算
数值作为常规变量直接赋值给变量,并且以字符串形式保存。
1.1 let 命令可以用于直接执行基本操作:
当我使用 let 的时候,我们不使用 $ 符号引用变量。
- no1=7;
- no2=8;
- echo "------------ let command -------------"
- let no1++;
- let no2--;
- let no1+=3;
- let no2-=5;
- let result=no1+no2;
- printf "let result=%d\n" $result;
1.2 " [ ] "运算符跟 let 命令很相似:
"[ ]" 运算符里面可以使用 $ 符号引用变量,同时支持变量名与运算符之间不带空格。
- echo "----------------- [] operator ----------------"
- printf "no1:%d no2:%d \n" $no1 $no2;
- result1=$[ no1 + no2 ];
- printf "result1 = %d \n" $result1;
- result2=$[no1+no2 + 7];
- printf "result2 = %d \n" $result2;
- result3=$[ $no1+$no2+5 ];
- printf "result3 = %d \n" $result3;
- no2=$[ no2 + 1 ];
- printf "no1 = %d no2 = %d \n" $no1 $no2;
1.3 " (( )) " 运算符跟 " [ ] " 运算符一样:
同样支持使用 $ 符号引用变量进行基本运算,同时支持变量名与运算符之间不带空格。
- echo "----------------- (( )) operator --------------"
- printf "no1: %d no2: %d \n" $no1 $no2;
- result1=$(( no1 + no2 ));
- printf "result1 = %d \n" $result1;
- result2=$((no1+no2+3));
- printf "result2 = %d \n" $result2;
- result3=$(( $no1+$no2 + 5))
- printf "result3 = %d \n" $result3;
1.4 "expr" 命令同样可以用于变量的基本运算:
"expr" 命令同样支持 $ 符号引用变量进行基本运算,但是变量与运算符之间必须使用空格作为分隔符;
在使用 "expr" 命令对变量进行运算后,整个表达式必须使用 " · expression · " 的模式赋值给变量,即包含在 " ` " 符里面,
并且等效于 " $( expression ) " 模式。
- echo "---------------- expr command ---------------"
- printf "no1: %d no2: %d \n" $no1 $no2;
- result1=`expr 3 + 4`;
- printf "result1 = %d \n" $result1;
- result2=`expr $no1 + 4`;
- printf "result2 = %d \n" $result2;
- result3=`expr $no1 + $no2`;
- printf "result3 = %d \n" $result3;
- result4=`expr $no1+$no2`;
- printf "result4 = %d \n" $result4;
- result5=$(expr $no1 + 3);
- printf "result5 = %d \n" $result5;
- result6=$(expr $no1+4);
- printf "result6 = %d \n" $result6;
- result7=$(expr $no1+$no2);
- 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 作为输入,并且支持浮点运算:
- echo "----------------- bc command ----------------"
- echo "4 * 0.56" | bc;
- no=48;
- result1=`echo "$no * 1.5" | bc`;
- echo "result1 = $result1";
2.2 bc 命令支持运算精度设置:
通过附加参数可以给 bc 指定运算精度;
附加参数使用分号 " ; " 作为分隔符;
- result2=`echo "scale=9;$no / 3;" | bc`;
- echo "result2 = $result2";
实验结果所示,使用分号 " ; " 加入附加参数 scale ,指定精度为 9 位小数;
2.3 使用 bc 进行数值的记数进制间转换:
通过 ibase=value 作为附加参数,指定输入变量的记数进制;
通过 obase=value 作为附加参数,指定输出变量的记数进制;
- no=100;
- echo "echo \"obase=2;ibase=10;$no\" | bc = `echo "obase=2;ibase=10;$no" | bc`";
- no=1000;
- 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 的幂运算;
- echo "sqrt(100) = `echo "sqrt(100)" | bc`";
- echo "sqrt(100) = $(echo "sqrt(100)" | bc)";
- echo "10^3 = `echo "10^3" | bc`";
- echo "10^3 = $(echo "10^3" | bc)";
http://blog.chinaunix.net/uid-20671208-id-3552751.html
Linux shell 变量 数学 运算的更多相关文章
- shell变量数学运算
shell变量数学运算 #!/bin/sh # 本脚本说明shell脚本中变量运算的用法 # 错误的用法var=1var=$var+1echo $var 输出:1+1 # 第一种用法,letvar=1 ...
- Linux Shell 06 数学运算
1.let let "var+=1" let v2= echo $var,$v2 #2,4 a.只支持整数运算 b.基本支持所有运算符(包括++,——,**) c.表达式中使用变量 ...
- shell变量与运算
shell变量与运算 @(0003 shell编程) 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$号,只有引用变量的值时才使用$号.也就是说在内存中,标记变量的变量名称是str,而不 ...
- SHELL脚本--数学运算和bc命令
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 使用let.(()).$(())或$[]进行基本的整数运算,使 ...
- Linux shell变量详解
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个 ...
- Linux Shell 变量自加
转至:https://blog.csdn.net/dj0379/article/details/50946398/ declare -i iv=$svnvlet iv+=1shell中变量自增的实现方 ...
- shell执行数学运算
整数: expr let $(()) $[] 浮点数: bc 1.使用expr ♦参与运算的成员和运算符之间必须有一个空格: ♦对于那些容易被shell错解的,在它们传入expr命令之前,需要使用sh ...
- python文件读写操作与linux shell变量命令交互执行
python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼! #coding=utf-8 #!/usr/bin/python import os impor ...
- 《Linux shell变量总结回顾》RHEL6(转)
文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [root@localhost ~]# set //查看到的是局部变量和全局变量2种 [ ...
随机推荐
- linux tricks 之 FIELD_SIZEOF.
------------------------------------------- 本文系作者原创, 欢迎大家转载! 转载请注明出处:netwalker.blog.chinaunix.net -- ...
- hdu 4001 dp 2011大连赛区网络赛A
题意:给一些指定长宽高的砖,求能累出的最大高度,不同砖有不同编号,每种编号对下面的砖做出了限制 dp 注意输出要用%I64d,否则会wa,以后不用%lld了 Sample Input 3 10 10 ...
- Android ActionBar 一步一步分析 (转)
原文摘自:http://blog.csdn.net/android2me/article/details/8874846 1.Action Bar 介绍 我们能在应用中看见的actionbar一般就是 ...
- 使用startActivityForResult方法(转)
功能: A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A 注意: 使用startActivityForResult方法 在配置文件就是不能指定Activi ...
- hihoCoder挑战赛14 -1223
描述 给定n个关于X的不等式,问最多有多少个成立. 每个不等式为如下的形式之一: X < C X <= C X = C X > C X >= C 输入 第一行一个整数n. 以下 ...
- 【部分原创】标准C语言的优先级、结合性、求值顺序、未定义行为和非确定行为浅析
零. 优先级 在C++ Primer一书中,对于运算符的优先级是这样描述的: Precedence specifies how the operands are grouped. It ...
- Android 编程下 App Install Location
从 API 8 开始(参考官方文档:App Install Location | Android Developers),你可以将你的应用安装在外部储存中(例如,安装到设备的 SD 卡上).这是一个可 ...
- 【分享送书】NGUI全面实践教程V3.8.2 活动开始了!!
[分享送书]NGUI全面实践教程V3.8.2 活动开始了!! 活动奖品: 活动地址:http://dwz.cn/JHdlu
- 不用写软件,纯JS 实现QQ空间自动点赞
这里分享一个自己写的点赞JS,已实现了好友动态.右侧栏猜你喜欢 点赞,有兴趣的朋友可以加上去玩玩.打开浏览器的开发者模式运行就可以看到效果了 var count = 0; var total = 0; ...
- DevExpress DXperience 的ASPxFilterControl 不显示 Like 菜单的方法
当使用Linq 作为数据源时,如果使用 ASPxFilterControl 的 Like 菜单筛选数据,就会出现以下错误 LINQ to Entities does not recognize the ...