在Bash脚本中使用算术运算符
我们将学习使用Bash运算符进行各种算术计算。
这里是Bash中的算术运算符:
|运算符|描述|
| --- - | --- |
| + |加法|
| - |减法|
| * |乘法|
|/|除法(没有十进制数)|
| %|模量分部(仅提供余数)|
| ** |指数(x的y次方)|
在Bash脚本中执行添加和减法
让我们创建一个名为Alty.sh的Bash脚本,这将简单地添加两个文件大小(以字节为单位)并显示输出。
du命令为我们提供文件的大小。
输出具有文件大小和文件名。
这是切割命令用于提取第一列的位置(即
文件大小)来自输出。
使用管道重定向传递du命令的输出以切割命令。
这是脚本:
#!/bin/bash fs1=$(du -b | cut -f1) fs2=$(du -b | cut -f1) echo "File size of is: $fs1" echo "File size of is: $fs2" total=$(($fs1 + $fs2)) echo "Total size is: $total"
请注意,我们将把两个文件名作为参数传递给脚本。
例如,这里我运行脚本并通过两个文件/etc/passwd
和/etc/group
作为参数:
Hyman@theitroad:~/scripts$./addition.sh /etc/passwd /etc/group File size of /etc/passwd is: 2795 File size of /etc/group is: 1065 Total size is: 3860
添加脚本中最重要的线是:
total=$(($fs1 + $fs2))
我们使用+运算符添加两个数字$FS1和$FS2.
另请注意,为了评估我们必须在双重括号之间括起来的任何算术表达式如下:
$((arithmetic-expression))
我们还可以使用负运算符( - )来减法。
例如,以下语句中的子变量的值将导致七:
sub=$((10-3))
在Bash脚本中执行乘法和除法
让我们创建一个名为giga2mega.sh的bash脚本,它将将gigabytes(gb)转换为megabytes(MB):
#!/bin/bash GIGA= MEGA=$(($GIGA * 1024)) echo "$GIGA GB is equal to $MEGA MB"
现在让我们运行脚本来了解四个千兆字节中有多少兆字节:
Hyman@theitroad:~/scripts$./giga2mega.sh 4 4 GB is equal to 4096 MB
这里我使用乘法(*)运算符将千兆字节数乘以1024以获取兆字节等同物:
MEGA=$(($GIGA * 1024))
它很容易为此脚本添加更多功能以将千兆字节(GB)转换为千字节(KB):
KILO=$(($GIGA * 1024 * 1024))
我会让你将千兆字节转换为字节作为练习运动!
我们还可以使用Division Operator(/)划分两个数字。
例如,以下语句中div变量的值将评估为五个:
div=$((20/4))
请注意,这是整数划分,因此所有分数都丢失。
例如,如果我们将5划分为2,则将获得2个不正确的2:
Hyman@theitroad:~/scripts$div=$((5/2)) Hyman@theitroad:~/scripts$echo $div 2
获得十进制输出;我们可以使用"BC"命令。
例如,要使用"bc`命令划分5到2,我们可以使用以下语句:
echo "5/2" | bc -l 2.50000000000000000000
请注意,只要我们处理十进制数字,我们可以使用其他运算符以及"BC""命令使用其他运算符:
使用指数和余数(Modulo)
让我们创建一个电力计算器!我将创建一个名为power.sh的脚本,它将接受两个数字a和b(作为参数),它将显示升高的结果B:
#!/bin/bash a= b= result=$((a**b)) echo "^=$result"
请注意,我使用指数运算符(**)来计算提升到B的力量的结果。
让我们做一些脚本来确保它产生了正确的答案:
Hyman@theitroad:~/scripts$./power.sh 2 3 2^3=8 Hyman@theitroad:~/scripts$./power.sh 3 2 3^2=9 Hyman@theitroad:~/scripts$./power.sh 5 2 5^2=25 Hyman@theitroad:~/scripts$./power.sh 4 2 4^2=16
我们还可以使用Modulo Operator(%)来计算整数余量。
例如,以下语句中的REM变量的值将评估为2:
rem=$((17%5))
这里的余数是2,因为17除以5,剩下2