查看原文
其他

【10-2】做数据分析,要不要掌握Linux系列:shell编程之运算符!

黄伟呢 数据分析与统计学之美 2023-05-04

1、运算符种类

2、算术运算符【+ - * / %】

1)expr算数运算符

1)运算符符号两侧,必须有空格;
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 ~]# C="abcada"    
[root@bigdata111 ~]# E=`expr length $C`
[root@bigdata111 ~]# echo $E
6
② 计算某个字符,在字符串中首次出现的位置:index
[root@bigdata111 ~]# C="abcada"
[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
注:字符串索引从1开始,表示从索引m开始起截取n个字符串。
[root@bigdata111 ~]# C="abcada"
// 下面代码表示从索引2处开始,截取3个字符;
[root@bigdata111 ~]# I=`expr substr $C 2 3`
[root@bigdata111 ~]# echo $I
bca

3)$(())的使用:可以直接省略$取变量的值,也不用使用那么多的空格。

[root@bigdata111 ~]# echo $B
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 ~]# P=5
[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 ~]# P=5
[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命令强大的用法

// 第一次使用bc命令,会报错。因此,要先安装。
[root@bigdata111 ~]# yum -y install bc
计算整数:
[root@bigdata111 ~]# echo "2+100" | bc
102
计算小数:
[root@bigdata111 ~]# echo "2.8+7.6" | bc
10.4
计算幂指数:
[root@bigdata111 ~]# echo "10^2" | bc
100
开平方:sqrt(num)
[root@bigdata111 ~]# echo "sqrt(100)" | bc
10
设置小数点位数:scale=num
[root@bigdata111 ~]# echo "scale=2;3/8" | bc
.37
进制转换:obase=num1;ibase=num2
[root@bigdata111 ~]# echo "obase=2;127" | bc
1111111

// 八进制转换为二进制:ibase表示当前的进制;obase表示要转换成的进制
[root@bigdata111 ~]# echo "ibase=8;obase=2;7" | bc
111

3、比较运算符(关系运算符)

常用的比较运算符如下: [比较运算符中,最好用左侧的这几个英语。]
操作如下:
结果如下:
[hadoop@image shell]$ . compare.sh 
10 -eq 100 : a不等于b
----------------------
10 -gt 100 : a小于b

3)逻辑运算符(布尔运算符)

常用逻辑运算符如下:
操作如下:
结果如下:
[hadoop@image shell]$ . bool.sh 
60 >= 50 -a 80 < 90 :是

4)三目运算符

// 语法格式如下
// []两侧必须有空格
[ 表达式 ] && str1 ll str2     
操作如下:
结果如下:
[hadoop@image shell]$ . three.sh 
666
888
变量b:888大

5)字符串运算符

常用字符运算符如下:
操作如下:
结果如下:
[hadoop@image shell]$ . str.sh 
abc和def不相等
-----------------------
-z abc不为0
-----------------------
def不为空

6)文件运算符

常用文件运算符如下:
操作如下:
结果如下:
[hadoop@image shell]$ . file.sh 
666
888
变量b:888大
---------------------
文件可读
---------------------
文件不可执行
--------------------
文件存在

----------End----------

为了公平起见,黄同学选择在朋友圈赠书,同时已经送了好多本书籍了。好处:这样一来,大家中奖概率也大,都会有机会的,很多都是刚刚加了我的好友,都中奖了!

方式一:复制我微信号aili1127421544,添加我微信;

方式二:长按扫描下方二维码,添加我微信;

备注:黄同学朋友圈福利多多,欢迎查阅!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存