Linux shell 变量 数学 运算
2016-01-29 11:24
495 查看
http://blog.chinaunix.net/uid-20671208-id-3552751.html
Abstract :
1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算;
2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算;
1, Linux shell 变量的基本运算
数值作为常规变量直接赋值给变量,并且以字符串形式保存。
1.1 let 命令可以用于直接执行基本操作:
当我使用 let 的时候,我们不使用 $ 符号引用变量。
1.2 " [ ] "运算符跟 let 命令很相似:
"[ ]" 运算符里面可以使用 $ 符号引用变量,同时支持变量名与运算符之间不带空格。
1.3 " (( )) " 运算符跟 " [ ] " 运算符一样:
同样支持使用 $ 符号引用变量进行基本运算,同时支持变量名与运算符之间不带空格。
1.4 "expr" 命令同样可以用于变量的基本运算:
"expr" 命令同样支持 $ 符号引用变量进行基本运算,但是变量与运算符之间必须使用空格作为分隔符;
在使用 "expr" 命令对变量进行运算后,整个表达式必须使用 " · expression · " 的模式赋值给变量,即包含在 " ` " 符里面,
并且等效于 " $( expression ) " 模式。
由上图实验结果所示," expr " 命令的表达式中,变量与运算符之间必须使用空格作为分隔符,
有一点我没搞明白的就是为什么42行的表达式已经错了,为什么在43行才报错。
" expr " 还支持许多运算表达式,大家在终端打个 expr --help 命令看看吧,o(∩_∩)o 哈哈。。。
上面所述的四种shell中执行变量运算的方式中不支持浮点运算!
2, Linux shell 中使用 bc 命令实现高级数学运算:
bc 命令使用 标准输入 stdin 作为输入;
bc 是一个支持精确的浮点运算的高级计算器;
bc 拥有相当多的输入选项,并且支持数学函数调用;
执行 bc --help 自行查看 bc 所支持的输入选项;
2.1 bc 命令使用标准输入 stdin 作为输入,并且支持浮点运算:
2.2 bc 命令支持运算精度设置:
通过附加参数可以给 bc 指定运算精度;
附加参数使用分号 " ; " 作为分隔符;
实验结果所示,使用分号 " ; " 加入附加参数 scale ,指定精度为 9 位小数;
2.3 使用 bc 进行数值的记数进制间转换:
通过 ibase=value 作为附加参数,指定输入变量的记数进制;
通过 obase=value 作为附加参数,指定输出变量的记数进制;
2.4 使用 bc 调用数学公式进行高级数学运算:
" sqrt(value)
4000
" 执行 value 的开方运算;
" value^index " 执行 value 的幂运算;
Abstract :
1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算;
2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算;
1, Linux shell 变量的基本运算
数值作为常规变量直接赋值给变量,并且以字符串形式保存。
1.1 let 命令可以用于直接执行基本操作:
当我使用 let 的时候,我们不使用 $ 符号引用变量。
<pre name="code" class="cpp">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)
4000
" 执行 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)";
相关文章推荐
- linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )
- yum---Shell前端软件包管理器
- 运行命令行带 PowerShell & VS & QT 环境(windows下加载QT命令行编译环境-VS版)
- shell模式下文件编码转换
- Shell与Wmi获取windows性能
- linux shell 的切换
- Shell
- base64 shell编码解码
- 在Delphi中使用ShellExecute(handle, 'open', PChar(fname),nil, nil, SW_HIDE)函数应注意的问题
- 自动检查MySQL主从同步状态的shell脚本
- shell bash ksh
- shell批量将文件从dos格式转为Unix
- 【转载】HBase基本概念和hbase shell常用命令用法
- 几个adb shell的命令,放到批处理文件里面,方便好用
- SecureCRT上传bash: rz: command not found
- Shell数组:shell数组的定义、数组长度
- Shell字符串
- Shell注释
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- Shell替换:Shell变量替换,命令替换,转义字符