shell中的计算

1.运算方式及运算符号及意义

在这里插入图片描述

2.SHELL中常用的运算命令

在这里插入图片描述

3.利用(())进行赋值运算

echo $((1+1))
westos=3
echo $((westos+=1))
for ((i=1;i<10;i++))
do
	((j+=i))
	echo $j
done

实验:
<1>“1+1”的五种运算命令

-1-使用$[]

[root@shenzhen mnt]# echo $[1+1]

在这里插入图片描述
-2-使用(())

[root@shenzhen mnt]# ((i=1+1))
[root@shenzhen mnt]# echo $i

在这里插入图片描述
-3-使用let

[root@shenzhen mnt]# let i=1+1
[root@shenzhen mnt]# echo $i

在这里插入图片描述
-4-使用expr

[root@shenzhen mnt]# expr 1 + 1

在这里插入图片描述
-5-使用bc

[root@shenzhen mnt]# bc
……
1+1

在这里插入图片描述
<2>幂的使用说明(**)

[root@shenzhen mnt]# echo $[2*3]
[root@shenzhen mnt]# echo $[2**3]

在这里插入图片描述
<3>正序输出1~10

[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
for ((i=1;i<=10;i++))
do
        echo $i
done

在这里插入图片描述
<4>倒序输出10~1

[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
for ((i=10;i>0;i--))
do
        echo $i
done

在这里插入图片描述
<5>使用“+=”的说明(j+=i相当于j=j+i)

[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
for ((i=10;i>0;i--))
do
        ((j+=i))	
        echo $j	##(j=0+10=10,j1=j+9=19,j2=j1+8=27……)
done

在这里插入图片描述
<6>使用“-=”的说明(j-=i相当于j=j-i)

[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
for ((i=10;i>0;i--))
do
        ((j-=i))
        echo $j	##(j=0-10=-10,j1=j-9=-19,j2=j1-8=-27……)
done

在这里插入图片描述
<7>使用“=”的说明(j=i相当于j=j*i)

[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
for ((i=10;i>0;i--))
do
        ((j*=i))
        echo $j	##(j=0,零乘任意数都得零)
done

在这里插入图片描述
<8>使用“/=”的说明(j/=i相当于j=j/i)

[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
[root@shenzhen mnt]# sh -x number.sh	##使用sh -x命令可以查看到执行脚本时的每一次运算过程

在这里插入图片描述

#!/bin/bash
j=99
for ((i=10;i>0;i--))
do
        ((j/=i))	##当j=99时,(j=99/10=9,j1=j/9=1,j2=j2/8=0……)
        echo $j
done

在这里插入图片描述
<9>使用“%=”的说明(j%=i相当于j=j%i)

[root@shenzhen mnt]# vim number.sh
[root@shenzhen mnt]# sh number.sh
[root@shenzhen mnt]# sh -x number.sh	##使用sh -x命令可以查看到执行脚本时的每一次运算过程

在这里插入图片描述

#!/bin/bash
j=99
for ((i=10;i>0;i--))
do
        ((j%=i))	##当j=99时,(j=99%10=9,j1=j%9=0,j2=j2%8=0……)
        echo $j
done

在这里插入图片描述
<10>设计一个1分10秒的倒计时
方法一:

[root@shenzhen mnt]# vim time.sh
[root@shenzhen mnt]# sh time.sh
please input min:1	##输入1分钟
please input sec:10	##输入10秒钟

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
read -p "please input min:" m
read -p "please input sec:" s
for ((Time=m*60+s;Time>0;Time--))
        do
                let s=$Time%60
                let m=$Time/60
                echo "After "$m":"$s "is over"
                echo -ne "\r"
                sleep 1
                clear
        done

在这里插入图片描述
显示的结果如下:
在这里插入图片描述
方法二:

[root@shenzhen mnt]# vim time.sh 
[root@shenzhen mnt]# sh time.sh 1 10

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
second=$[$1*60+$2]
clear
for ((time=$second;time>0;time--))
do
        min=$[time/60]
        sec=$[time%60]
        echo -n "After $min:$sec is end "
        echo -ne "\r"
        sleep 1
done

在这里插入图片描述
显示的结果如下:
在这里插入图片描述
注意:
1.在脚本echo -n "After m i n : min: sec is end "中,必须在end其后加空格,因为其秒的位数有时是两位,有时是一位,如果不加空格则会影响输出的内容(即会输出is overr)
2.echo -ne "\r"表示覆盖之前的内容,如果将其注释,会出现以下结果:

在这里插入图片描述
3.sleep 1 表示每隔一秒覆盖一次之前的内容,如果将其注释,将不会输出任何内容,只会重新开启一个界面,原因是脚本中有clear
4.clear表示重新开启一个新的界面进行脚本中clear下的内容

<11>编写脚本

利用以上命令制作一个计算器要求如下:
执行Calculator.sh
请输入您要操作的数字:
请输入要操作的运算:
请输入要操作的第二个数字:
>>执行后显示操作后的数值<<

方法一(脚本中使用函数):

[root@shenzhen mnt]# vim test.sh
[root@shenzhen mnt]# sh test.sh

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
CAL()
{
        echo "your can input +-/*%.... | exit"
        read -p "input action: " ACTION
        [ "$ACTION" = "exit" ]&&{
                echo bye
                exit 0
        }
        read -p "input first number: " FNUM
        read -p "input second number: " SNUM

        bc <<EOF
        $FNUM $ACTION $SNUM
EOF
CAL
}
CAL

在这里插入图片描述
方法二(脚本中使用while):

[root@shenzhen mnt]# vim test.sh
[root@shenzhen mnt]# sh test.sh

在这里插入图片描述
脚本中的内容如下:

#!/bin/bash
while true
do
        echo "your can input +-/*%.... | exit"
        read -p "input action: " ACTION
        [ "$ACTION" = "exit" ]&&{
                echo bye
                exit 0
        }
        read -p "input first number: " FNUM
        read -p "input second number: " SNUM

        bc <<EOF
        $FNUM $ACTION $SNUM
EOF
done

在这里插入图片描述

注意:
while 1=1在这里不能使用

猜你喜欢

转载自blog.csdn.net/qq_39376481/article/details/88752775