04-shell必会运算知识

一、认识运算符

1,运算符介绍

【+】【-】【*】【/】:加减乘除

【%】:取余

【^】或者【**】:幂、指数,2^10=1024,10个2相乘;

【i++】或者【i=i+1】:计数,计算次数累计

【j=j+??】或者【j+=??】:求和;

【&&】:并且的意思;

【||】:或者的意思;

【$RANDOM】:随机数

2,取余【%】

[root@gong tmp]# echo 10%3 | bc
1

3,取余配合随机数【$RANDOM】

可以控制我们随机数的大小;

[root@gong tmp]# echo $RANDOM%22 | bc
19

[root@gong tmp]# echo $RANDOM%5 | bc
3

4,并且【&&】

        &&前面执行成功了,才执行后面的命令

[root@gong tmp]# ls /etc/hosts >> /dev/null  && echo "目录存在"
目录存在

        &&前面不成功,则不执行后面的语句

[root@gong tmp]# ls /etc/xinjizhiwa 2> /dev/null  && echo "目录存在" 

5,或者【||】

        ||前面执行失败了,才执行后面的命令;

[root@gong tmp]# ls /etc/xinjizhiwa 2> /dev/null  || echo "查询目标不存在"
查询目标不存在

        ||前面执行成功了,则不执行后面的命令;

[root@gong tmp]# ls /etc/hosts 2> /dev/null  || echo "查询目标不存在"

#什么都不显示

二、运算方法

1,运算方法的种类

1,awk:

可以计算,可以带小数,也可以使用shell进行变量传递;一般的计算都可以使用awk;

2,bc:

带小数,计算方便,但是需要安装bc命令;

3,expr:

进行计算,不带小数,纯整数计算;

4,let:

计算整数,变量直接就可以使用,用于计算自增i++

5,$(()):

进行计算整数,变量也可以直接使用

6,$[]:

进行计算整数,变量也可以直接使用

2,awk进行计算

· 计算小数

[root@gong tmp]# awk 'BEGIN{print 3/10}'
0.3
[root@gong tmp]# awk 'BEGIN{print 3/10*100}'
30

· awk使用shell变量

[root@gong tmp]# xin=3
[root@gong tmp]# ji=10
[root@gong tmp]# awk -vf=$xin -vg=$ji 'BEGIN{print f/g}'
0.3

· awk内直接声明变量

[root@gong tmp]# awk -vf=30 -vg=100 'BEGIN{print f/g}'
0.3

3,bc进行计算

[root@gong tmp]# echo 30/100 | bc -l
.30000000000000000000
[root@gong tmp]# echo 1/3 | bc -l
.33333333333333333333

[root@gong tmp]# echo 2^10 | bc -l
1024

4,expr进行计算

温馨提示,expr不能直接使用*作为乘法,需要转义;【\*】

· 运算符之间加空格

[root@gong tmp]# expr 1+1
1+1
[root@gong tmp]# expr 1 + 1
2

· 乘法\*转义

[root@gong tmp]# expr 2 * 3
expr: syntax error
[root@gong tmp]# expr 2 \* 3
6

· 不能计算小数

[root@gong tmp]# expr 2 / 3
0
[root@gong tmp]# expr 6 / 3
2

· expr一个小坑

        使用expr计算0+0的时候,计算的结果是0,$?查看上一次命令是否正确时,返回数值却是1,未来我们通过其他方法特性,来判断是否为数字;

[root@gong tmp]# expr 1 + 1
2
[root@gong tmp]# echo $?
0

下面命名计算对了,课时查看上一步命令是否正确时返回却是非0;一个坑;

[root@gong tmp]# expr 0 + 0
0
[root@gong tmp]# echo $?
1

5,let进行计算

[root@gong tmp]# xin=666
[root@gong tmp]# ji=999
[root@gong tmp]# let c=xin+ji
[root@gong tmp]# echo $c
1665

6,$(())进行计算

[root@gong tmp]# xin=666
[root@gong tmp]# ji=999
[root@gong tmp]# echo $((xin+ji))
1665
[root@gong tmp]# d=$((xin+ji))
[root@gong tmp]# echo $d
1665

7,$[]进行计算

[root@gong tmp]# xin=666
[root@gong tmp]# ji=999
[root@gong tmp]# e=$[xin+ji]
[root@gong tmp]# echo $e
1665

8,案例

        编辑脚本:用户通过输入两个数字和运算符来计算出结果

[root@gong ~]# vim al.sh

#!/bin/bash

read -p "请输入第一个数字:" num1
read -p "请输入运算符(+-*/^):" shell
read -p "请输入下一个数字:" num2
res=`echo $num1 $shell $num2 | bc -l`
echo $res

[root@gong ~]# sh al.sh 
请输入第一个数字:30
请输入运算符(+-*/^):/
请输入下一个数字:100
.30000000000000000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心机の之蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值