Linux系列:shell编程之运算符
【摘要】 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)