我的shell編程(四)-數學運算

Bash 數學運算之expr

此篇幅主要講數學運算

  • 有2種數學運算方法:
語法
方法一 expr $num1 operator $num2
方法二 ((((num1 operator $num2))
  • expr 操作符對照表
操作符 含義
num1 | num2 num1不爲空且非0,返回num1 ,否則返回num2
num1&num2 num1不爲空且非0,返回num1;否則返回0
num1<num2 num1小於num2 ,返回1 ,否則返回0
num1<=num2 num1小於等於num2 ,返回1 ,否則返回0
num1=num2 num1等於num2 ,返回1 ,否則返回0
num1=!num2 num1不等於num2 ,返回1 ,否則返回0
num1>num2 num1大於num2 ,返回1 ,否則返回0
num1>=num2 num1大於等於num2 ,返回1 ,否則返回0
num1+num2 求和
num1-num2 求差
num1*num2 求積
num%num2 求餘
  • bash 運算之expr

num1=20

num2=100

[root@localhost ~]# num1=13
[root@localhost ~]# num2=14

[root@localhost ~]# expr $num1 > $num2  /不大於,返回0,但是這裏沒有返回值,沒有轉義
[root@localhost ~]# echo $?
0
[root@localhost ~]# expr $num1 \> $num2  //不大於,但是返回值0 ,此處轉義了
0
[root@localhost ~]# 
[root@localhost ~]# num1=14
[root@localhost ~]# num2=13
[root@localhost ~]# expr $num1 \> $num2  大於,成立,所以返回值1
1
[root@localhost ~]# 

[root@localhost ~]# expr $num1 \>= $num2
1
[root@localhost ~]# 


加減乘除

[root@localhost ~]# num1=10
[root@localhost ~]# num2=14
[root@localhost ~]# num3=`expr $num1*$num2`
[root@localhost ~]# echo $num3
140
[root@localhost ~]# 
[root@localhost ~]# expr $num1 + $num2
24
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# expr $num1 - $num2
-4
[root@localhost ~]# expr $num1 \* $num2   相乘   //此處就需要轉義
140
[root@localhost ~]# 
[root@localhost ~]# expr $num1 \% $num2  求餘
10
[root@localhost ~]#
[root@localhost ~]# num3=$(($num1*num2))   //在括號裏面不需要轉義
[root@localhost ~]# echo $num3
140
[root@localhost ~]# 

練習例子:

  • 提示用戶輸入一個正整數num,然後計算1+2+3+4+……+num的值,必須對num是否爲正整數做判斷,不符合就讓他再次輸入

思路分析:正整數就要求 大於0 和整數,那麼如何判斷是整數了?

[root@localhost ~]# num1=50
[root@localhost ~]# expr $num1 \> 0
1
[root@localhost ~]# num1=51.78
[root@localhost ~]# expr $num1 \> 0  // 雖然大於0了,整數和小數返回的都是1 ,所以還是無法區分整數
1


[root@localhost ~]# expr $num1 + 1  //這裏爲了區分整數,我們採用 expr $num + 1,如果$num 是小數,就會報錯,是整數,就不會報錯
expr: non-integer argument
[root@localhost ~]# num1=10
[root@localhost ~]# expr $num1 + 1
11
[root@localhost ~]# 

#!/bin/bash
while true
do
	read -p "Please input positive nummber:" num
	expr $num + 1 &> /dev/null
	if [ $? -eq 0 ];then
		if [ `expr $num \> 0` -eq 1 ];then
			for ((i=1;i<=$num; i++))
			do
				sum=`expr $num + $i`
			done
			echo "1+2+3+4+5+6+……+$num = $sum"
			exit
		fi
	fi
	echo "error,input enleqal"
	continue
done

分析:首先我們輸入一個數字,然後使用 expr $num + 1 去判斷是不是整數,如果上一步操作正確,就說明是整數,飯後繼續判斷是不是大於0 ,如果大於0 則返回 數字1 是否是等於1 ,是怎繼續循環
i=1;i<$num;i++,然後運算。輸出。並且停止循環。如果輸入的是錯的,則提示非法輸入。繼續循環,

  • 如何進行浮點數進行運算

數學運算之bc

  • bc是bash內建的運算器,、支持浮點數運算
  • 內建變量scale可以設置,默認爲0
操作符 含義
num1+num2 求和
num1-num2 求差
num1/num2 求商
num1*num2 求積
num1%num2 求餘
num1^num2 指數運算

首先直接安裝bc

[root@localhost ~]# yum -y install bc
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package bc.x86_64 0:1.06.95-13.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================
 Package      Arch             Version                     Repository     Size
===============================================================================
Installing:
 bc           x86_64           1.06.95-13.el7              wyh           115 k

Transaction Summary
===============================================================================
Install  1 Package

Total download size: 115 k
Installed size: 215 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : bc-1.06.95-13.el7.x86_64                                    1/1 
  Verifying  : bc-1.06.95-13.el7.x86_64                                    1/1 

Installed:
  bc.x86_64 0:1.06.95-13.el7                                                   

Complete!
[root@localhost ~]# 

演示:

[root@localhost ~]# 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'. 
1+2
3
23+5
28
24/6
4
24%3
0
24%4
0
24 % 4
0
24 % 3
0
23 % 5
3
3.23456 % 1
.23456

內建變量 scale 默認是0 精確程度

[root@localhost ~]# echo "23+25" | bc
48
[root@localhost ~]# echo "scale=4;23.3/3.5" |bc
6.6571
[root@localhost ~]# 
[root@localhost ~]# echo "scale=4;3.37891/2" |bc
1.6894


腳本部署:

[root@localhost ~]# cat example_4.sh 
#!/bin/bash
#
read -p "num1:" num1
read -p "num2:" num2

num3=`echo "scale=4;$num1/$num2" |bc`

echo "$num1 / $num2 = $num3"
[root@localhost ~]# sh example_4.sh 
num1:5.6
num2:3
5.6 / 3 = 1.8666
[root@localhost ~]#
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章