• 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就是退出状态码)

  • 相关阅读:
    洛谷 P1226 【模板】快速幂||取余运算 题解
    洛谷 P2678 跳石头 题解
    洛谷 P2615 神奇的幻方 题解
    洛谷 P1083 借教室 题解
    洛谷 P1076 寻宝 题解
    洛谷 UVA10298 Power Strings 题解
    洛谷 P3375 【模板】KMP字符串匹配 题解
    Kafka Shell基本命令
    Mybatis与Hibernate的详细对比
    MyBatis简介
  • 原文地址:https://www.cnblogs.com/lab-zj/p/12932409.html
Copyright © 2020-2023  润新知