其他
【10-2】做数据分析,要不要掌握Linux系列:shell编程之运算符!
1、运算符种类
2、算术运算符【+ - * / %】
1)expr算数运算符
2)乘法运算(\*),必须转义;
注:只要使用expr,记住在【运算符符号两侧】添加空格就没错。
[root@bigdata111 ~]# A=`expr 2 + 3`
[root@bigdata111 ~]# echo $A
5
// 减
[root@bigdata111 ~]# B=`expr 10 - 8`
[root@bigdata111 ~]# echo $B
2
// 乘(乘法运算必须转义)
[root@bigdata111 ~]# C=`expr 2 * 3`
expr: syntax error
[root@bigdata111 ~]# C=`expr 2 \* 3`
[root@bigdata111 ~]# echo $C
6
// 除(除法运算,直接去掉小数位)
[root@bigdata111 ~]# D=`expr 5 / 2`
[root@bigdata111 ~]# echo $D
2
练习:计算(2+3)*4的值
[root@bigdata111 ~]# A=`expr \( 2 + 3 \) \* 4`
[root@bigdata111 ~]# echo $A
20
# 方法二
[root@bigdata111 ~]# B=`expr \`expr 2 + 3\` \* 4`
[root@bigdata111 ~]# echo $B
20
2)expr的几个常用函数
① 计算字符串的长度:length
[root@bigdata111 ~]# E=`expr length $C`
[root@bigdata111 ~]# echo $E
6
② 计算某个字符,在字符串中首次出现的位置:index
[root@bigdata111 ~]# G=`expr index $C a`
[root@bigdata111 ~]# echo $G
1
[root@bigdata111 ~]# A="abcdef"
[root@bigdata111 ~]# echo `expr index ${A} d`
4
③ 截取某个字符串指定长度:substr
// 下面代码表示从索引2处开始,截取3个字符;
[root@bigdata111 ~]# I=`expr substr $C 2 3`
[root@bigdata111 ~]# echo $I
bca
3)$(())的使用:可以直接省略$取变量的值,也不用使用那么多的空格。
5
[root@bigdata111 ~]# C=$(((2+3)*4))
[root@bigdata111 ~]# echo $C
20
[root@bigdata111 ~]# P=5
[root@bigdata111 ~]# Q=4
[root@bigdata111 ~]# D=$(($P+$Q))
[root@bigdata111 ~]# echo $D
9
[root@bigdata111 ~]# E=$((P+Q))
[root@bigdata111 ~]# echo $E
9
4)$[]的使用:和$(())的用法一致。
[root@bigdata111 ~]# Q=4
[root@bigdata111 ~]# A=$[$P+$Q]
[root@bigdata111 ~]# echo $A
9
[root@bigdata111 ~]# B=$[P+Q]
[root@bigdata111 ~]# echo $B
9
[root@bigdata111 ~]# R=10
[root@bigdata111 ~]# C=$[(P+Q)*R]
[root@bigdata111 ~]# echo $C
90
5)let的使用:也相当好用。
[root@bigdata111 ~]# Q=5
[root@bigdata111 ~]# R=10
[root@bigdata111 ~]# let A=$P+$Q
[root@bigdata111 ~]# echo $A
10
[root@bigdata111 ~]# let B=P+Q
[root@bigdata111 ~]# echo $B
10
[root@bigdata111 ~]# let C=(P+Q)*R
[root@bigdata111 ~]# echo $C
100
6)$ $() $ (()) ${} $[]的用法区别
[root@bigdata111 ~]# a=2
[root@bigdata111 ~]# echo $a
2
[root@bigdata111 ~]# echo ${a}
2
// 当变量前后,紧挨其它字符,用$取变量值,会出错;
[root@bigdata111 ~]# echo $ab
[root@bigdata111 ~]# echo b$a
b2
// 当变量前后,紧挨其它字符,用${}取变量值,不会报错;
[root@bigdata111 ~]# echo ${a}b
2b
[root@bigdata111 ~]# echo b${a}
b2
// ()括号中是某个命令的用法;
[root@image1 ~]# date
Sun Nov 3 15:46:31 CST 2019
[root@image1 ~]# echo $(date)
Sun Nov 3 15:46:37 CST 2019
[root@image1 ~]# ls
a.sh b.sh
[root@image1 ~]# echo $(ls)
a.sh b.sh
// ()括号中是某个运算表达式的用法;
[root@image1 ~]# echo $(echo $(((2+3)*4)))
20
[root@image1 ~]# a=2
[root@image1 ~]# b=3
[root@image1 ~]# c=4
[root@image1 ~]# echo $(((a+b)*c))
20
[root@image1 ~]# echo $[(a+b)*c]
20
7)bc命令强大的用法
[root@bigdata111 ~]# yum -y install bc
102
10.4
100
10
.37
1111111
// 八进制转换为二进制:ibase表示当前的进制;obase表示要转换成的进制
[root@bigdata111 ~]# echo "ibase=8;obase=2;7" | bc
111
3、比较运算符(关系运算符)
10 -eq 100 : a不等于b
----------------------
10 -gt 100 : a小于b
3)逻辑运算符(布尔运算符)
60 >= 50 -a 80 < 90 :是
4)三目运算符
// []两侧必须有空格
[ 表达式 ] && str1 ll str2
666
888
变量b:888大
5)字符串运算符
abc和def不相等
-----------------------
-z abc不为0
-----------------------
def不为空
6)文件运算符
666
888
变量b:888大
---------------------
文件可读
---------------------
文件不可执行
--------------------
文件存在
----------End----------
为了公平起见,黄同学选择在朋友圈赠书,同时已经送了好多本书籍了。好处:这样一来,大家中奖概率也大,都会有机会的,很多都是刚刚加了我的好友,都中奖了!
方式一:复制我微信号aili1127421544,添加我微信;
方式二:长按扫描下方二维码,添加我微信;
备注:黄同学朋友圈福利多多,欢迎查阅!