Linux(三) 科学计算

  • expr命令

  最初,Bourne shell提供一种专有命令来计算数学等式.expr命令允许处理命令行中的灯饰,但是很笨拙:

expr 1+5

  expr命令能够区分一些不同的数学操作符和字符串操作符

  

   在脚本或命令行中使用标准操作符会出现问题,尽管在expr命令中他们可以正常运行.shell中许多expr命令操作符(如星号)有其他含义.在expr命令中使用他们会生成一些奇怪的结果

  

  要解决此问题,在传送给expr命令的字符可能被错误解析前,需要使用shell转义字符(反斜杠)来识别它们:

  

  • 使用括号( [ ] )

  bash shell包含expr命令,使其与Bouneshell保持兼容.当为一个变量指定一个数学值时,可以 用美元符号和方括号($[operation])把数学等式括起来:

var1=$[1 + 5]
echo $var1
# 6
var2=$[$var1 * 2]
echo $var2
# 12

  在bash shell脚本中计算数学等式有一个主要限制.

var1=100
var2=45
var3=$[$var1 / $var2]
echo The final result is $var3
# The final result is 2

  Bash shell 的数学操作只支持整数算法, 如果想做任何类型的实际的计算,这是一个很大的限制. Z shell (zsh)支持浮点算数运算,如果在shell脚本中需要浮点计算,可以考虑使用z shell

  

  • 浮点解决方案

  有几种克服bash整数限制的解决方案.最普遍的解决方法是使用内置的bash计算器(称为bc)

  1) bc的基本知识

    bash计算器实际上是一种编程语言,该语言允许在命令行中输入浮点表达式,然后解释 表达式并计算它们,最后返回结果.bash计算器可以识别: 数字(证书和浮点) , 变量(简单变量和数组) , 注释(以英镑符号开始的行或C语言的/* */对) , 表达式 , 编程语句 , 函数 .可以使用bc命令从shell提示符访问bash计算器.

    

    在这个例子以输入表达式12*5.4开始, bash计算器返回结果.计算器对每一个后续键入的表达式都进行计算并显示结果.要退出bash计算器,必须输入quit

    浮点算术被称为scale的内置变量控制.必须把这个值设置为想要的十进制小数位数,否则得不到想要的结果

    

     scale变量的默认值是0.在设置scale值之前,bash计算器提供0小数位的答案.将scale变量值设为4之后,bash计算器显示为4位小数位的答案.-q命令行参数禁止bash计算器的荣誉欢迎标语

    除了普通的数字,bash计算器也识别变量, 一旦定义了变量值,可以在整个bash计算器会话中使用该变量.print语句允许打印变量和数字

    

   2) 在脚本中使用bc

    使用 反引号字符管道 可在脚本中使用bc

#!/bin/bash
var1=`echo " scale=4; 3.44 / 5" | bc`
echo The answer is $var1

# 输出: The answer is .6880

    也可以使用在shell脚本中定义的变量

#!/bin/bash
var1=100
var2=45
var3=`echo " scale=4; $var1 * $var2" | bc`
var4=`echo "scale=4; $var3 * $var2" | bc`
echo The final result is $var4

# 输出: The final result is 202500

    在shell脚本中,可以把输出赋值给变量. 使用该技术,可以吧脚本中每个操作和表达式放在单独的行中,使其更加清晰并便于阅读. 在bash计算器内创建的变量只在bash计算器内有效,而不能用在shell脚本中

#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71

var5=`bc EOF
scale=4
a1 = ($var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
`

echo The final answer for this mess is $var5

# 输出: The final answer for this mess is 2813.9882
  • 退出脚本

  为了向shell表明,命令已经处理完毕,每条运行在shell中的命令都使用一个退出状态.这个退出状态时一个介于0好255之间的证书值,当命令运行完成时,命令就会把退出状态传递给shell.可以捕捉这个值并在您的脚本中使用它.

  1) 核对退出状态

    Linux提供 $? 特殊变量来保存最后一条命令执行结束的退出状态.如果想核对一条命令的退出状态,必须在这条命令运行完成之后立即查看或使用变量 $? . 它会改变为shell执行的最后一条命令的退出状态值

date
# 输出: Sat Sep 29 10:01:00 EDT 2020
echo $?
# 输出: 0

    按照惯例,一条命令成功完成的退出状态是 0.如果命令执行错误, name退出状态就是一个正整数

asdfg
# 输出: -bash: asdfg: command not found
echo $?
# 输出: 127

    Linux退出状态码

    

   2) 退出命令

    默认情况下,shell脚本中最后一条命令的退出状态退出. 可以把它改为返回自己的退出状态码. exit命令允许在脚本结束时,指定一个退出状态

#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[ $var1 + $var2 ]
echo The answer is $var3
exit 5

# 输出: The answer is 40
echo $?
# 显示: 5

    应该谨慎使用这个功能,因为退出状态代码最高是255, 如果大于255, 退出状态码会进过计算自动降低到适合 0-255范围之内的数. 计算规则是: 用要返回的状态码和256求余(如300和256的余数是44, 44就是退出状态码)

原文地址:https://www.cnblogs.com/lab-zj/p/12932409.html