如果要执行运算,那就少不了运算符,和其他的编程语言相似,shell也有很多的运算符如下:
+、-、:代表着加号 和减号 或者,负号
*、/、%:代表着乘号,除号,和取模。
** : 幂运算
++、-- :表示着增加或者减少,它可以放在前置,也可以放在变量的结尾
!、||、&&、(取反)(或) (and)
<、<=、>、>= :比较符号,小于、小于等于、大于、大于等于
==、!=、= :相等,不相等, =表示相等于
<< 向左移动 向右移动
等等,这里就不说了 到后面实践中再见!
Shell编程之算术运算命令
(()) 用于整数之间常用的运算符,效率高
let :用于整数运算,类似于(())
expr :用于整数运算,但是还有其他功能
bc :Linux下的一个计算程序,适合整数及小数运算
$[] :用于整数运算
awk:awk既可以整数运算,也可以小数运算
declare: 定义变量值和属性,-i参数可以用于定义整形变量,做运算
第一眼看到这些 感觉很复杂,心乱,但是没有关系,慢慢的就好了~~~
一、双小括号(()) 数值运算命令
双小括号的作用是进行数值运算与数值的比较,它的效率很高,用法很灵活,是企业运维人员经常采用的操作符
((e=e+1)) 它的作用就是把e+1的结果赋值给变量e但是不可以用 echo ((e=e+1))来使用,但可以使用echo $((e=e+1))
e=$((e=e+1)) 作用就是把e+1的执行结果赋值给变量e
数值比较
((8>7&&5==5)) 用于数值之前的比较,用于条件判断
echo $((2+1)) 用于直接输出运算表达式的结果,在(()) 前面加$符号
案例1:双小括号"(())"数值运算实践
[root@shell-yankerp sh]# echo $((1+1)) #计算1+1后输出 2 #那么结果就是等于2 [root@shell-yankerp sh]#
以此类推使用减号
[root@shell-yankerp sh]# echo $((6-3)) #计算6-3等于多少 3 #结果为3 [root@shell-yankerp sh]#
是不是感觉有点简单。那么接下来利用"(())"进行稍微复杂的一些综合算术运算
[root@shell-yankerp sh]# ((a=1+2**3-4%3))
以上例子也就是说,首先a是一个变量名,那么在a=后面的一些计算的结果会赋值给a这个变量,那么首先我们得知道后面的计算结果是多少,在这个变量中 我们用到了+号"**"以及"-"号包括“%”首先计算过程是这样的。先算乘除,后算加减
2**3 等于 2x2x2=8 乘算出来之后算除。 4%3=1 取模---- 8-1=7 最后1+7=8 最后结果为8 输出如下:
例如2:
[root@shell-yankerp sh]# b=$((1+2**3-4%3)) #在这里b是一个变量 将变量名的计算结果赋值给b [root@shell-yankerp sh]# echo $b #输出如下: 8 [root@shell-yankerp sh]#
其实例1 和2都是差不多的 只不过是用了不同的方法!!!
例3:特殊运算符号的运算实例
[root@shell-yankerp sh]# a=8 #首先a变量名 = 变量值 等于8 那么a就是8 [root@shell-yankerp sh]# echo $((a=a+2)) #原来a=8 那么现在a+2 结果为10 10 [root@shell-yankerp sh]# echo $((a+=1)) #当结果为10 这一行代表 a=a+1那么就等于11 11 [root@shell-yankerp sh]# echo $((a**2)) #目前a=11 那么a**2 a的二次方 那么等于11x11=121 输出如下: 121 [root@shell-yankerp sh]#
例4:利用(())双括号,进行比较判断
[root@shell-yankerp sh]# echo $((2>1)) #当条件2>1正确后输出了1表示真 1 [root@shell-yankerp sh]# echo $((2>3)) #当条件2>3错误后输出0 0 [root@shell-yankerp sh]# echo $((6==6)) #6==6 那么就输出1 1 [root@shell-yankerp sh]#
if 判断小实战
在以上的图中不用想肯定是输出条件成立继续运行了因为8本来就大于5;7本来就等于7 输出如下:
我们尝试的改下脚本如下:
在上图中8等于5肯定是错误的 那么输出如下:
上面涉及到了数字及变量必须为整数,不能是小数... 但是可以用bc来解决后面会说到。
案例:在变量前后使用++、--、特殊运算符的表达式
首先我们需要知道++是什么意思
++、-- :表示着增加或者减少,它可以放在前置,也可以放在变量的结尾
[root@shell-yankerp sh]# a=10 [root@shell-yankerp sh]# echo $((a++)) 10 [root@shell-yankerp sh]# echo $a 11 [root@shell-yankerp sh]#
以上内容中的a=10 那么a是变量名 变量值等于10 那么echo $((a++)) ++的意思上面已经说过了,输出结果为10 因为++在a的后面 所以先输出a的值为10 那么继续echo $a 那么就变成11 因为a++后面增加1
例2:
[root@shell-yankerp sh]# a=11 [root@shell-yankerp sh]# echo $((a--)) 11 [root@shell-yankerp sh]# echo $a 10 [root@shell-yankerp sh]#
以上就是--的用法了。这里不在说了
在以下的案例中我相信的大家肯定知道了在前面加++ 和在后面加++的区别了 如下:
[root@shell-yankerp sh]# echo $a 10 [root@shell-yankerp sh]# echo $((--a)) 9 [root@shell-yankerp sh]# a=9 [root@shell-yankerp sh]# echo $a 9 [root@shell-yankerp sh]# echo $((++a)) 10 [root@shell-yankerp sh]#
例:通过(())运算后赋值给变量
[root@shell-yankerp sh]# yankerp=99 [root@shell-yankerp sh]# echo $((yankerp+1)) 100 [root@shell-yankerp sh]# echo $(( yankerp+1 )) 100 [root@shell-yankerp sh]#
在以上的案例中,有空格和没空格都是一样的。
包含(())各种常见的运算符命令执行如下:
[root@shell-yankerp sh]# echo $((3+2)) 5 [root@shell-yankerp sh]# echo $((3-2)) 1 [root@shell-yankerp sh]# echo $((3**2)) 9 [root@shell-yankerp sh]# echo $((3*2)) 6 [root@shell-yankerp sh]# echo $((3/2)) 1 [root@shell-yankerp sh]# echo $((3%2)) 1 [root@shell-yankerp sh]#
各种(())运算的shell脚本案例
#!/bin/bash # DATE:Wed Jan 31 19:49:59 CST 2018 # This is a yankerp! a=6 b=3 echo "a-b=$((a-b))" echo "a+b=$((a+b))" echo "a/b=$((a/b))" echo "a**b=$((a**b))"
输出结果为如下:
[root@shell-yankerp sh]# sh test.sh
a-b=3
a+b=9
a/b=2
a**b=216
[root@shell-yankerp sh]#
特殊位置变量+数值运算实战案例如下:
#!/bin/bash # DATE:Wed Jan 31 19:49:59 CST 2018 # This is a yankerp! a=$1 b=$2 echo "a-b=$((a-b))" echo "a+b=$((a+b))" echo "a**b=$((a**b))" echo "a/b=$((a/b))
在以上的脚本中 我们定义了特殊的位置变量 下面定义了数值运算,那么这个脚本的功能是,当我们输入两个字符,其中第一个字符赋值给了变量a 第二个字符赋值给了变量b 那么在下面进行数值运算,如果此脚本看不懂的大家可以参考我这篇文章https://www.jb51.net/article/134246.htm
运行结果如下:
[root@shell-yankerp sh]# sh test.sh 6 3
a-b=3
a+b=9
a**b=216
a/b=2
[root@shell-yankerp sh]#
这也就是特殊位置变量+本章的变量数值运算的结合
let运算命令的用法
例如
[root@shell-yankerp ~]# a=2 [root@shell-yankerp ~]# a=a+8 #没有用let [root@shell-yankerp ~]# echo $a a+8 #输出结果 [root@shell-yankerp ~]# unset a #清除变量 [root@shell-yankerp ~]# a=2 [root@shell-yankerp ~]# let a=a+8 使用let [root@shell-yankerp ~]# echo $a 10 [root@shell-yankerp ~]#
其实还可以这么实现,如下:
[root@shell-yankerp ~]# a=2 [root@shell-yankerp ~]# echo $((a=a+8)) 10 [root@shell-yankerp ~]# echo $a 10 [root@shell-yankerp ~]# unset a [root@shell-yankerp ~]# a=2 [root@shell-yankerp ~]# let a=a+8 [root@shell-yankerp ~]# echo $a 10 [root@shell-yankerp ~]#
两者区别!!!如上
expr命令用法实例:
[root@shell-yankerp sh]# expr 2 + 2 4 [root@shell-yankerp sh]# expr 4 - 2 2 [root@shell-yankerp sh]# expr 4 \* 2 8 [root@shell-yankerp sh]# expr 4 / 2 2 [root@shell-yankerp sh]#
当我们选择用*号需要拿\转义、需要注意在用expr命令时 左右两侧必须要空格
2、expr配合变量实例
[root@shell-yankerp sh]# a=10 [root@shell-yankerp sh]# a=`expr $a + 10` [root@shell-yankerp sh]# echo $a 20 [root@shell-yankerp sh]#
expr的企业级实战案例:
[root@shell-yankerp sh]# i=5 #这里设置了一个变量 i=5 [root@shell-yankerp sh]# expr $i + 6 &>/dev/null #那么我们使用expr命令 $i + 6 这里的6是一个整数 [root@shell-yankerp sh]# echo $"htmlcode">#!/bin/bash expr $1 + 1 &>/dev/null #这里是一个命令 使用了expr 也使用了特殊的位置变量 if [ "$" -eq 0 ] #如果以上命令执行结果为0 then #那么 echo "输入的是整数~" #输出一条 输入的是整数 else #否则 echo "/bin/sh $# 请输入一个整数" 这里也使用了特殊的位置变量 fi运行脚本测试
[root@shell-yankerp sh]# cat aaa.sh #!/bin/bash expr $1 + 1 &>/dev/null if [ "$" -eq 0 ] then echo "输入的是整数~" else echo "/bin/sh $0 请输入一个整数" fi [root@shell-yankerp sh]# sh aaa.sh 123 输入的是整数~ [root@shell-yankerp sh]# sh aaa.sh zhangsan lisi /bin/sh aaa.sh 请输入一个整数 [root@shell-yankerp sh]#实战:第一关判断参数个数是否为2.若不是请给出提示
第二关判断参数是否为整数,如果不是那么继续给出提示
第三关做运算~~~
#!/bin/bash if [ "$#" -ne "2" ] then echo "/bin/bash $0 请输出两个数值..." exit 1 fi #no.2 a=$1 b=$2 expr $1 + 1 &>/dev/null if [ "$" -ne "0" ] then echo "请输入数值..." exit 1 fi #no.3 echo "a+b=$((a+b))" echo "a-b=$((a-b))" echo "a/b=$((a/b))" echo "a*b=$((a*b))" echo "a**b=$((a**b))" echo "a%b=$((a%b))"剖析:在以上脚本中其实很简单,第一if 如果输入的不是两个传参值,那么给出提示 这是第一段if条件语句,如果输入的是两个数值,那么继续执行下面的条件,在第二个条件使用了位置参数变量$1 使用了expr命令来判断用户输入的是数字还是字符串,当用户输入的是数字那么就是返回是成功的 那么我们使用了if语句 如果上面命令执行成功 如果不等于0 那么给出相应的提示,最后前面的两个条件成立,那么接下来进行算法,这个前面是说过的。
执行脚本如下:
好了 本次就到这里,希望阅读者快快吸收~~~ 后续不断更新 谢谢大家,也希望大家多多支持。
声明:以上文章是<<跟着老男孩学Linux运维Shell编程实战第五章;一部分看完的总结!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]