外部过滤器,程序和命令--数学计算命令
2017-08-21 15:35
211 查看
操作”数字”
factor
将一个正数分解为多个素数.bash$ factor 2345 2345: 5 7 67
bc
bc命令是一种支持任意精度的交互执行的计算器语言. bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下.bc比较类似于C语言的语法.
这里有一个简单的使用bc命令的模版, 可以用来计算脚本中的变量. 这个模版经常用于命令替换中.
variable=$(echo "OPTIONS; OPERATIONS" | bc)
语法:
bc (选项)(参数)
选项:
-i:强制进入交互式模式; -l:定义使用的标准数学库; -w:对POSIX bc的扩展给出警告信息; -q:不打印正常的GNU bc环境信息; -v:显示指令版本信息; -h:显示指令的帮助信息.
参数:
文件:指定包含计算任务的文件.
实例:
算术操作高级运算bc命令它可以执行浮点运算和一些高级函数:
echo "1.212*3" | bc 3.636
设置小数精度(数值范围).
echo "scale=2; 3/8" | bc # 参数"scale=2"是将bc输出结果的小数位设置为2位. .37
! “scale”制定了有效数字的个数.
进制转换.
#!/bin/bash abc=100 a=1100100 echo "obase=2;$abc" | bc # 执行结果为:1100100,这是用bc将十进制转换成二进制. echo "obase=10;ibase=2;$a" | bc # 执行结果为:100,这是bc将二进制转换为十进制. exit 0
计算平方和平方根.
echo "10^10" | bc # 10000000000 echo "sqrt(100)" | bc # 10 echo "sqrt(10)" | bc # 3 echo "scale=3;sqrt(10)" |bc # 3.162
调用bc的另一种方法就是here document, 并把它嵌入到命令替换块中. 当一个脚本需要将一个选项列表和多个命令传递到bc中时, 这种方法就显得非常合适了.
variable=`bc << LIMIT_STRING options statements operations LIMIT_STRING ` ...or... variable=$(bc << LIMIT_STRING options statements operations LIMIT_STRING )
例:使用”here document”来调用bc.
#!/bin/bash # 使用命令替换来调用'bc' # 并与'here document'相结合. var1=`bc << EOF 18.33 * 19.78 EOF ` echo $var1 # 362.56 # 使用 $(...)这种标记法也可以. v1=23.53 v2=17.881 v3=83.501 v4=171.63 var2=$(bc << EOF scale=4 a=( $v1 + $v2 ) b=( $v3 * $v4 ) a * b + 15.35 EOF ) echo $var2 var3=$(bc -l <<EOF scale=9 s ( 1.7 ) EOF ) # 返回弧度为1.7的正弦. # "-l"选项将会调用'bc'算术库. echo $var3 # .991664810 hyp= # 声明全局变量. #hypotenuse () # 计算直角三角形的斜边. #{ # hyp=$(bc -l << EOF # 不能缩进,会产生错误. # scale=9 # sqrt ( $1 * $1 + $2 * $2 ) # EOF # ) #} hypotenuse () # 计算直角三角形的斜边. { hyp=$(bc -l << EOF scale=9 sqrt ( $1 * $1 + $2 * $2 ) EOF ) } hypotenuse 3.68 7.31 echo "hypotenuse = $hyp" # 8.184039344 exit 0
dc
dc(桌面计算器desk calculator)工具是面向栈的, 并且使用RPN(逆波兰表达式”Reverse PolishNotation”又叫”后缀表达式”). 与bc命令很相似, 但是这个工具具备好多只有编程语言才具备的能力.( 正常表达式 后缀表达式(逆波兰表达式) a+b a,b,+ a+(b-c) a,b,c,-,+ a+(b-c)*d a,d,b,c,-,*,+ )
绝大多数人都避免使用这个工具, 因为它需要非直观的RPN(逆波兰)输入, 但是, 它却有特定的用途.
bash$ echo "16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D68736142snlbxq" | dc Bash bash$
awk
在脚本中使用浮点运算的另一种方法是使用awk内建的数学运算函数, 可以用在shell包装中.例: 计算直角三角形的斜边:
#!/bin/bash # hypotenuse.sh: 返回直角三角形的斜边. ARGS=2 # 需要将两个直角边作为参数传递进来. E_BADARGS=65 # 错误的参数值. if [ $# -ne "$ARGS" ] # 测试传递到脚本中的参数值. then echo "Usage: `basename $0` side_1 side_2" exit $E_BADARGS fi AWKSCRIPT=' { printf( "%3.7f\n", sqrt($1*$1 + $2*$2) ) } ' # 命令 / 传递给awk的参数. # 将参数通过管道传递给awk. echo -n "Hypotenuse of $1 and $2 = " echo $1 $2 | awk "$AWKSCRIPT" exit 0
运行;
bash$ ./hypotenuse.sh 3 4 Hypotenuse 3 and 4 = 5.0000000 bash$
awk详细用法点我
相关文章推荐
- 外部过滤器, 程序和命令
- 外部过滤器,程序和命令--混杂命令
- 外部过滤器,程序和命令--基本命令
- 外部过滤器,程序和命令--终端控制命令
- 外部过滤器,程序和命令--时间/日期 命令
- 外部过滤器,程序和命令--文本处理命令
- 外部过滤器,程序和命令--复杂命令
- 出现'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件
- Android安装报错,提示“reg”不是内部或外部命令,也不是可运行的程序或批处理文件
- wsimport 不是内部或外部命令,也不是可运行的程序或批处理文件
- 在cmd上运行'mvn -v'时,提示'mvn' 不是内部或外部命令,也不是可运行程序
- Android错误_adb不是内部或外部命令,也不是可运行的程序
- cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法
- adb不是内部或外部命令,也不是可运行的程序
- xxx 不是内部或外部命令,也不是可运行的程序 或批处理文件
- C:\WINDOWS\system32\sichost.exe' 不是内部或外部命令,也不是可执行的程序
- 问题:设计一个大学教师和学生管理程序, 教师包括 编号、姓名、职称和教研室 数据的输入输出; 大学生包括编号、姓名、性别、班号、英语、高等数学和数据结构三门课程成绩的输入输出和计算平均分; 研究生包
- ABAP--编写应用服务器执行外部命令的程序示例
- 'nasmw' 不是内部或外部命令,也不是可运行的程序
- Android Studio Terminal 不是内部或外部命令,也不是可运行程序或批处理文件