2020-04-06
算术表达式
$((expression))
(以上括号中的)表达式是指算术表达式,它由数值和算术操作符组成。
算术表达式只支持整数(全部是数字,不带小数点),但是能执行很多不同的操作。这里是一些它支持的操作符:
在算术表达式中空格并不重要,并且表达式可以嵌套。
一对括号可以用来把多个子表达式括起来。
[root@VM_0_7_centos shellTest]# echo $((2+5))
7
[root@VM_0_7_centos shellTest]# echo $((2-5))
-3
[root@VM_0_7_centos shellTest]# echo $((2*5))
10
[root@VM_0_7_centos shellTest]# echo $((2/5))
0
[root@VM_0_7_centos shellTest]# echo $((10/5))
2
[root@VM_0_7_centos shellTest]# echo $((10%3))
1
[root@VM_0_7_centos shellTest]# echo $((10**3))
1000
[root@VM_0_7_centos shellTest]# echo $(($((5**2)) * 3))
75
[root@VM_0_7_centos shellTest]# echo $(((5**2) * 3))
75
[root@VM_0_7_centos shellTest]# echo $((5**2 * 3))
75
花括号展开
通过它,你可以从一个包含花括号的模式中创建多个文本字符串。
[root@VM_0_7_centos shellTest]# echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
花括号展开模式可能包含一个开头部分叫做报头,一个结尾部分叫做附言。花括号表达式本身可能包含一个由逗号分开的字符串列表,或者一个整数区间,或者单个的字符的区间。这种模式不能嵌入空白字符。花括号展开可以嵌套。
[root@VM_0_7_centos shellTest]# echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
[root@VM_0_7_centos shellTest]# echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
[root@VM_0_7_centos shellTest]# echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
那么这对什么有好处呢?最常见的应用是,创建一系列的文件或目录列表。例如,如果我们是摄影师,有大量的相片。我们想把这些相片按年月先后组织起来。首先,我们要创建一系列以数值 “年-月” 形式命名的目录。通过这种方式,可以使目录名按照年代顺序排列。我们可以手动键入整个目录列表,但是工作量太大了,并且易于出错。反之,我们可以这样做:
[root@VM_0_7_centos shellTest]# mkdir Pics
[root@VM_0_7_centos shellTest]# cd Pics/
[root@VM_0_7_centos Pics]# mkdir {2007..2009}-0{1..9} {2007..2009}-{10..12}
[root@VM_0_7_centos Pics]# ls
2007-01 2007-04 2007-07 2007-10 2008-01 2008-04 2008-07 2008-10 2009-01 2009-04 2009-07 2009-10
2007-02 2007-05 2007-08 2007-11 2008-02 2008-05 2008-08 2008-11 2009-02 2009-05 2009-08 2009-11
2007-03 2007-06 2007-09 2007-12 2008-03 2008-06 2008-09 2008-12 2009-03 2009-06 2009-09 2009-12
参数展开
[root@VM_0_7_centos Pics]# echo $USER
root
[root@VM_0_7_centos Pics]# printenv | less # 查看有效的变量列表
命令替换
命令替换允许我们把一个命令的输出作为一个展开模式来使用:
[root@VM_0_7_centos Pics]# echo $(ls)
2007-10 2007-11 2007-12 2008-10 2008-11 2008-12 2009-10 2009-11 2009-12