Linux系列:shell编程之运算符

举报
数据分析与统计学之美 发表于 2021/09/27 20:59:20 2021/09/27
【摘要】 linux系列第十课

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 ~]# B=$((2+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

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

常用的比较运算符如下: [比较运算符中,最好用左侧的这几个英语。]
在这里插入图片描述
操作如下:
在这里插入图片描述
结果如下:

[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---------------------
文件可读
---------------------
文件不可执行
--------------------
文件存在
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。