Linux 基本命令 在命令行和脚本中进行数学表达式运算 退出脚本命令

本文详细介绍了在Bash Shell脚本中进行数学运算的方法,包括expr命令、使用方括号进行整数运算,以及如何利用bc内建计算器进行浮点数运算。还展示了如何在脚本中使用bc进行复杂的数学表达式计算,并讲解了退出脚本时的退出状态码及其意义。
摘要由CSDN通过智能技术生成

目录

1、expr

2、使用方括号

3、浮点数运算

1)内建bash计算器:bc

2)在脚本中使用bc

4、退出脚本


1、expr

expr 1+5
# 得到结果6
expr 5 \* 2
# *容易被shell错误解释,需要用转义字符标出来
# 得到结果10

        在shell脚本中使用expr命令也复杂,要将一个数学算式的结果赋给一个变量,需要使用命令替换来获取expr命令的输出。

2、使用方括号

        bash shell有一个针对处理数学运算符的改进:使用方括号,($[ operation ])。

var1=$[1+5]
echo $var1
# echo用于显示字符输出,结果是6
# 在脚本中同样适用
#!/bin/bash
var1=100
var2=50
var3=45
var4=$[$var1*($var2-$var3)]
echo The final result is $var4
# 以上是脚本文件file1的内容

# 在命令交互界面执行以下命令
chmod u+x file1    # 只授予这个文件的所属者(u)执行的权限
./file1
# 输出结果是500

但bash shell数学运算符只支持整数运算。

3、浮点数运算

1)内建bash计算器:bc

bash计算器能够识别:

  • 数字(整数和浮点数)
  • 变量(简单变量和数组)
  • 注释(以#或 /* */ 开始的行)
  • 表达式
  • 编程语句(如,if-then语句)
  • 函数
# 在shell提示符下使用bc命令访问bash计算器
bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
11*5.3
58.3
13*3.5
45.5
5*6.7
33.5
quit
# quit命令表示退出bash计算器

#浮点运算由内建scale控制,必须设置想要保留的小数点个数
bc -q
69/5
13
scale=5
45/4
11.25000
# -q命令行选项,可以不显示冗长欢迎信息
# bash计算器支持变量
bc -q
var1=10
var1 * 4
40
var2 = var1 / 5
print var2
2
quit
# 变量一旦定义,可以在整个bash计算器使用
# print 允许打印变量和数字

2)在脚本中使用bc

variable=$(echo "options;expression" | bc)
# 命令替换命令$(...),括号中命令的输出赋给变量
# options 允许设置变量,需要不止一个变量可用分号分开
# expression参数定义了通过bc执行的数学表达式

# 脚本文件file2
#!/bin/bash
var1=$(echo "scale=4;3.44/5" | bc)
echo The answer is $var1
# 在命令交互界面执行
chmod u+x file2
./file2
# 结果得到:The answer is .6880
#!/bin/bash
var1=100
var2=45
var3=$(echo "scale=4; $var1/$var2" | bc)
echo The answer for this is $var3

# 执行上述脚本文件file3
./file3
# 得到结果: The answer for this is 2.222
#!/bin/bash
var1=20
var2=3.14159
var3=$(echo "scale=4; $var1 * $var1" | bc)
var4=$(echo "scale=4; $var3 * $var2" | bc)
echo The final result is $var4

bc命令能识别输入重定向(见:Linux bash 基本命令 重定向输入输出 管道连接_想喝奶茶啾啾的博客-CSDN博客)但是仍比较麻烦,最好使用内敛输入重定向:

variable=$(bc << EOF
options
statements
expressions
EOF
)
# EOF文本字符串标识了内联重定向数据的起止
# 使用命令替换符号将bc命令的输出赋给变量

在脚本中使用:

#!/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

4、退出脚本

        shell中运行的每个命令都使用退出状态码(exit status)告诉shell它已经运行完毕。退出状态
码是一个0~255的整数值,在命令结束运行时由命令传给shell,可以捕获这个值并在脚本中使用。

        Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码。对于需要进行检查的
命令,必须在其运行完毕后立刻查看或使用$?变量。

$ date
Sat Jan 15 10:01:30 EDT 2014
$ echo $?
0
$

        一个成功结束的命令的退出状态码是0,如果一个命令结束时有错误,退出状态码就是一个正数值。

状态码描述
0命令成功结束
1一般性未知错误
2不适合的shell命令
126命令不可执行
127没找到命令
128无效的退出参数
128+x与Linux信号x相关的严重错误
130通过Ctrl+C终止的命令
255正常范围之外的退出状态码
# 默认成功完成的退出状态码是0,exit命令允许在脚本结束时指定一个退出状态码。
#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[$var1 + $var2]
echo The answer is $var3
exit 5

# 执行上述脚本文件file4
chmod u+x test13
./test13
# 得到结果:The answer is 40
# 查看状态码
echo $?
5
# 也可以在exit命令的参数中使用变量
#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[$var1 + $var2]
exit $var3

# 执行上述脚本文件file5
chmod u+x test14
./test14
echo $?
40


# 注意退出状态码最大只能是255
#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[$var1 * $var2]
echo The value is $var3
exit $var3
# 运行上述脚本文件file6
./test14b
# 得到结果:The value is 300
echo $?
44
# 状态码不是300,因为超过255(0-255),由300除以256,得到余数44。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值