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 ~]#