计算Shell脚本语言中的数学表达式 - 第五部分

你的人会感觉舒服,了解shell脚本和书写流利他们根据自己的需要。 这是本系列教程,我们将开展使用脚本语言有点复杂的数学运算的最后一个职位。 Shell脚本系列的最后四篇文章这是按时间顺序。

学习Shell脚本部分 - V

  1. 了解基本的Linux Shell脚本语言提示 - 第一部分
  2. 5 Shell脚本Linux新手学习Shell编程 - 第二部分
  3. 航行通过Linux的世界BASH脚本 - 第三部分
  4. Linux Shell编程的数学方面 - 第四部分

让我们从Fibonacci系列开始

数字模式,其中每个数字是两个前面数字的总和。 该系列是0,1,1,2,3,5,8 ......根据定义,在Fibonccai序列的前两个数字是0和1。

脚本1:Fibonacci.sh
#!/bin/bash
echo "How many numbers do you want of Fibonacci series ?" 
read total 
x=0 
y=1 
i=2 
echo "Fibonacci Series up to $total terms :: " 
echo "$x" 
echo "$y" 
while [ $i -lt $total ] 
do 
i=`expr $i + 1 ` 
z=`expr $x + $y ` 
echo "$z" 
x=$y 
y=$z 
done
示例输出
[root@youcl ~]# chmod 755 Fibonacci.sh
[root@youcl ~]# ./Fibonacci.sh
How many numbers do you want of Fibonacci series ? 
10 
Fibonacci Series up to 10 terms :: 
0 
1 
1 
2 
3 
5 
8 
13 
21 
34

你所熟悉的事实,计算机只能理解的二进制格式,即“0”“1”和我们大多数人都喜欢学习小数二进制转换。 如何为这个复杂的操作编写一个简单的脚本。

脚本2:Decimal2Binary.sh
#!/bin/bash 
for ((i=32;i>=0;i--)); do 
r=$(( 2**$i)) 
Probablity+=( $r  ) 
done 
[[ $# -eq 0 ]] &echo -en "Decimal\t\tBinary\n" 
for input_int in $@; do 
s=0 
test ${#input_int} -gt 11 &printf "%-10s\t" "$input_int" 
for n in ${Probablity[@]}; do 
if [[ $input_int -lt ${n} ]]; then 
[[ $s = 1 ]] && printf "%d" 0 
else 
printf "%d" 1 ; s=1 
input_int=$(( $input_int - ${n} )) 
fi 
done 
echo -e 
done
示例输出
[root@youcl ~]# chmod 755 Decimal2Binary.sh
[root@youcl ~]# ./Decimal2Binary.sh 1121
Decimal		Binary 
1121      	10001100001

:上面的脚本在运行时接受,这显然是一种辅助输入。

那么内置的“BC”命令可以在十进制转换为二进制在单行的脚本。 运行,在你的终端。

[root@youcl ~]# echo "obase=2; NUM" | bc

与您希望从十进制转换为二进制数,替换“NUM”。 例如,

[root@youcl ~]# echo "obase=2; 121" | bc 
1111001

接下来,我们会写哪些功能对面上面的脚本, 转换二进制数值十进制的脚本。

脚本3:Binary2Decimal.sh
#!/bin/bash 
echo "Enter a number :" 
read Binary 
if [ $Binary -eq 0 ] 
then 
echo "Enter a valid number " 
else 
while [ $Binary -ne 0 ] 
do 
Bnumber=$Binary 
Decimal=0 
power=1 
while [ $Binary -ne 0 ] 
do 
rem=$(expr $Binary % 10 ) 
Decimal=$((Decimal+(rem*power))) 
power=$((power*2)) 
Binary=$(expr $Binary / 10) 
done 
echo  " $Decimal" 
done 
fi
示例输出
[root@youcl ~]# chmod 755 Binary2Decimal.sh
[root@youcl ~]# ./Binary2Decimal.sh
Enter a number : 
11 
3

:以上功能可在终端使用“BC”命令来执行。

[root@youcl ~]# echo "ibase=2; BINARY" | bc

与二进制数,即替换'BINARY'。,

[root@youcl ~]# echo "ibase=2; 11010101" | bc 
213

同样你可以写从八进制十六进制转换为十进制 ,反之亦然自己。 完成使用“BC”命令是上述结果的终端。

十进制到八进制
[root@youcl ~]# echo "obase=8; Decimal" | bc
十进制到十六进制
[root@youcl ~]# echo "obase=16; Decimal" | bc
八进制到十进制
[root@youcl ~]# echo "ibase=8; Octal" | bc
十六进制到十进制
[root@youcl ~]# echo "ibase=16; Hexadecimal" | bc
二进制到八进制
[root@youcl ~]# echo "ibase=2;obase=8 Binary" | bc

在一些shell脚本语言的使用,说明是通用数字测试。

Test : INTEGER1 -eq INTEGER2
Meaning: INTEGER1 is equal to INTEGER2
Test : INTEGER1 -ge INTEGER2
Meaning: INTEGER1 is greater than or equal to INTEGER2
Test: INTEGER1 -gt INTEGER2
Meaning: INTEGER1 is greater than INTEGER2
Test:INTEGER1 -le INTEGER2
Meaning: INTEGER1 is less than or equal to INTEGER2
Test: INTEGER1 -lt INTEGER2
Meaning: INTEGER1 is less than INTEGER2
Test: INTEGER1 -ne INTEGER2
Meaning: INTEGER1 is not equal to INTEGER2

这是这篇文章和文章系列的全部。 这是Shell脚本系列的最后一篇文章,它不意味着对脚本语言中没有的文章将再次来到这里,它只是意味着shell脚本教程已经过去,每当我们觉得值得一个有趣的话题知道或查询从你的人,我们将很乐意从这里继续系列。

保持健康,调节并连接到youcl。 很快我会有另一个有趣的话题,你会喜欢阅读的人。 分享评论部分您宝贵的想法。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏