shell中的运算相关

1.运算方式及运算符号

运算符号意义( * 表示常用)
+,-加法,减法
*,/,%乘法,除法,取余
**幂运算
++ , –自增加,自减少
<,<=,>,>=比较符号
= , += , -= , *= , /= , %=赋值运算

例如 a+=1 相当于 a=a+1

2.SHELL 中常用的运算命令

运算操作与运算命令含义
(())用于整数运算
let用于整数运算,与 (()) 类似
expr用于整数运算,功能相对较多
bclinux 下的计算器,适合整数及小数运算
$[]用户整数运算

例1:

(1)关于$[]的用法

[root@shell_example mnt]# echo $[1]
1
[root@shell_example mnt]# echo $[1+1]
2
[root@shell_example mnt]# echo $[2*3]
6
[root@shell_example mnt]# echo $[2**3]
8
[root@shell_example mnt]# echo $[2**4]
16
[root@shell_example mnt]# echo $[2**5]
32

在这里插入图片描述
(2)关于(())的用法

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

在这里插入图片描述
在这里插入图片描述
(3)let的用法

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

在这里插入图片描述
(4)expr

[root@shell_example mnt]# expr 1+1
1+1
[root@shell_example mnt]# expr 1 + 1
2

在这里插入图片描述
(5)bc,退出时ctrl+c

[root@shell_example mnt]# 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
2*3
6
2*5
10
5/2
2
^C
(interrupt) Exiting bc.

在这里插入图片描述
例2:

(1)正序输出1-10(i++)

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

在这里插入图片描述

[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh 

在这里插入图片描述
(2)倒序输出(i–)

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

在这里插入图片描述

[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh 

在这里插入图片描述
(3)+=(j+=i就是j=j+i)

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

在这里插入图片描述

[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh 

在这里插入图片描述
(4)-=(j-=i就是j=j-i)

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

在这里插入图片描述

[root@shell_example mnt]# vim numtest.sh
[root@shell_example mnt]# sh numtest.sh 

在这里插入图片描述
(5) *=(j*=i就表示j=j*i,这里j的初始值默认为0,所以所有的结果都为0)

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

在这里插入图片描述
在这里插入图片描述
(6)/=(j/=i就表示j=j/i)

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

在这里插入图片描述
在这里插入图片描述
(7)%=(j%=i就表示j=j%i)

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例3:练习: 用运算和shell语句写出一个一份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

在这里插入图片描述
在这里插入图片描述
方法二:输入总的秒数

#!/bin/bash
[ -z  "$1" ] && {
        echo error
        exit
}
for ((TIME=$1;TIME>0;TIME--))
do
        let SEC=TIME%60
        let MIN=TIME/60
        echo -n "After ${MIN}m:${SEC}s is end "
        echo -ne "\r"
        sleep 1
done

在这里插入图片描述
在这里插入图片描述
注意:
1.方法一中clear表示每次输出都会刷新一次界面,不加的话会把每一次的输出都列在一起
2.sleep 1表示每隔一秒输出一次
3.echo -ne "\r"表示换行,注释掉的话会将所有的输出放在一行
在这里插入图片描述
4.方法二中"After ${MIN}m:${SEC}s is end "的end后必须要有空格,否则会出现重复打印最后一个字符的情况,这里的空格是占位符的作用
在这里插入图片描述

例4:练习二:

用学习过的知识设计一个计算器:
请输入您要操作的第一个数字
请输入您要操作的第二个数字
请输入你要进行的运算
执行后返回运算后的结果

脚本如下:

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

在这里插入图片描述
测试:

[root@shell_example mnt]# sh calculator.sh
You can input + - * / % | exit
Please input action: *
Please input first number: 2
Please input second number: 5
10
You can input + - * / % | exit
Please input action: + 
Please input first number: 1
Please input second number: 1
2
You can input + - * / % | exit
Please input action: exit
bye

在这里插入图片描述
或者:

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值