Shell script-simple four arithmetic and shell calculator script

Four simple arithmetic of shell

Arithmetic operations: By default, the shell can only support simple integer operations

Calculation content:

  • Add (+)
  • Less(-)
  • Multiply()
  • except(/)
  • Find the remainder (%)
  • power(*)

Four arithmetic symbols

expression For example Description
$(( )) echo $((1+1))
$[ ] echo $[10-5]
expr expr 10 / 5 In the expr program, the value and the operator need to be separated by a space, the multiplication (*) operator needs to be escaped with an escape character (\ ), expr cannot be used for exponentiation
let n=1; let n+=1 is equivalent to let n=n+1 let n+=2 is equivalent to let n=n+2, let n**=2 cannot be used

Integer arithmetic

Method 1: expr

	[root@localhost shell]# n1=10
	[root@localhost shell]# n2=20
	[root@localhost shell]# expr $n1 + $n2
	30
	[root@localhost shell]# expr $n1 + $n2
	30
	[root@localhost shell]# sum=`expr $n1 + $n2`
	[root@localhost shell]# echo $sum
	30

Method two: $(())

	[root@localhost shell]# n1=10
	[root@localhost shell]# n2=20
	[root@localhost shell]# echo $((n1*n2))
	200
	[root@localhost shell]# echo $((n1/n2))
	0
	[root@localhost shell]# echo $((n1%n2))
	10
	[root@localhost shell]# echo $((2**10))
	1024

Method three: $[]

	[root@localhost shell]# echo $[5+2]
	7
	[root@localhost shell]# echo $[5*2]
	10
	[root@localhost shell]# num=$[2**10]
	[root@localhost shell]# echo $num 
	1024

Method 4: let

	[root@localhost shell]# let n1=1+2
	[root@localhost shell]# echo $n1
	3
	[root@localhost shell]# i=10
	[root@localhost shell]# let i++
	[root@localhost shell]# echo $i
	11

Understood i ++ sum ++ i

  • Effect on the value of the variable
[root@maomao ~]# i=1
[root@maomao ~]# let i++
[root@maomao ~]# echo $i
2
[root@maomao ~]# j=1
[root@maomao ~]# let ++j
[root@maomao ~]# echo $j
2
  • Effect on the value of the expression
[root@maomao ~]# unset i j
[root@maomao ~]# i=1;j=1
[root@maomao ~]# let x=i++         先赋值,再运算
[root@maomao ~]# let y=++j         先运算,再赋值
[root@maomao ~]# echo $i
2
[root@maomao ~]# echo $j
2
[root@maomao ~]# echo $x
1
[root@maomao ~]# echo $y
2

i++ is first assignment, then operation
++i is to calculate first, then assign

Instance

# 我们要写一个查看当前内存使用百分比的脚本
#!/bin/bash
mem_used=`free -m|grep Mem|awk '{print$3}'`
mem_total=`free -m |grep Mem |awk '{print $2}'`
mem_percent=$(($mem_used*100/$mem_total))
echo "当前内存使用百分比:$mem_percent%"

[root@maomao shell]# bash free.sh 
当前内存使用百分比:32%


```shell
# i++ 一般常和while一起使用 while的变量需要自增
# 比如我们写一个探测本网段哪些主机存活的脚本
#!/bin/bash
i=2
while [ $i -le 254 ]
do
        {
    
       
        ip=192.168.188.$i
        ping -c1 -W1 $ip &>/dev/null
        if [ $? -eq 0 ];then
                echo "$ip up."
        fi
        }&
        let i++

done
wait
echo "all finish..."


Decimal arithmetic

Method one: bc

# 使用bc之前需要先安装
yum -y install bc

[root@maomao 1.20]# echo "2.2*4.4124" |bc
9.7072

# 除法的时候需要通过scale指定小数点后几位
[root@maomao 1.20]# echo "scale=5;10/3" |bc
3.33333

[root@maomao shell]# echo "运算百分值:$(echo "scale=2;2.5*6.1*9.3"|bc)%"
运算百分值:141.82%

The above memory script can also be optimized to the decimal point

#!/bin/bash
mem_used=`free -m|grep Mem|awk '{print$3}'`
mem_total=`free -m |grep Mem |awk '{print $2}'`
mem_percent=$(echo "scale=2; $mem_used*100/$mem_total" |bc)
echo "当前内存使用百分比:$mem_percent%"

[root@maomao shell]# bash free.sh 
当前内存使用百分比:32.43%


Method two: awk

# awk可以进行常规的所有运算
[root@maomao scripts]# echo "7.7 3.8"|awk '{print ($1-$2)}'
3.9
 
[root@maomao 1.20]# echo "8.8 6.6"|awk '{print ($1/$2)}'
1.33333

[root@maomao scripts]# echo "3 9"|awk '{print ($1+3)*$2}'
54

Method three: python

# 可以请python帮忙计算
[root@maomao 1.20]# echo "print 10.0/3" |python
3.33333333333

[root@maomao 1.20]# echo "print 3.1415926*3" |python
9.4247778

shell calculator script

#!/bin/bash
read -p "请输入第一个数字:" num1
read -p "请输入第二个数字:" num2
menu() {
    
    
cat <<-EOF
        #########################
        #       计算器          #
        #       1.加法          #
        #       2.减法          #
        #       3.乘法          #
        #       4.除法          #
        #       5.求模          #
        #       6.求幂          #
        #       m.菜单          #
        #       q.退出          #
        #########################
        EOF
}

menu

jia() {
    
    
        awk "BEGIN{print $1+$2}"
}
jian() {
    
    
        awk "BEGIN{print $1-$2}"
}
cheng() {
    
    
        awk "BEGIN{print $1*$2}"
}
chu() {
    
    
        awk "BEGIN{print $1/$2}"
}
mo() {
    
    
        awk "BEGIN{print $1%$2}"
}
mi() {
    
    
        awk "BEGIN{print $1**$2}"
}

while :
do

read -p "请选择功能:" action
case $action in
m)
        clear
        menu
        ;;
1)
        jia $num1 $num2
        ;;
2)
        jian $num1 $num2
        ;;
3)
        cheng $num1 $num2
        ;;
4)
        chu $num1 $num2
        ;;
5)
        mo $num1 $num2
        ;;
6)
        mi $num1 $num2
        ;;
q)
        break
        ;;
"")
        ;;
*)
        echo "错误"
        ;;
esac
done

[root@maomao jiaoben]# bash jisuanqi1.sh 
请输入第一个数字:124.12
请输入第二个数字:2703   
#########################
#	计算器		#
#	1.加法		#
#	2.减法		#
#	3.乘法		#
#	4.除法		#
#	5.求模		#
#	6.求幂		#
#	m.菜单		#
#	q.退出		#
#########################
请选择功能:1
2827.12
请选择功能:2
-2578.88
请选择功能:3
335496
请选择功能:4
0.0459193
请选择功能:5
124.12
请选择功能:6
inf
请选择功能:q


Guess you like

Origin blog.csdn.net/Cantevenl/article/details/115262671