「生活可以更简单, 欢迎来到我的开源世界」
  1. 一、小括号,圆括号()
    1. 1、单小括号 ()
    2. 2、双小括号 (( ))
  2. 二、中括号,方括号[]
    1. 1、单中括号 []
    2. 2、双中括号[[ ]]
  3. 三、大括号、花括号 {}
    1. 1、常规用法
    2. 2、几种特殊的替换结构
    3. 3、四种模式匹配替换结构
    4. 4、字符串提取和替换
  4. 四、符号$后的括号
  5. 五、使用
Linux Shell中()、(())、[]、[[]]、{}的作用
2020-11-19

转自: 乌托邦2号

blog.csdn.net/taiyang1987912/article/details/39551385

一、小括号,圆括号()

1、单小括号 ()

2、双小括号 (( ))

二、中括号,方括号[]

1、单中括号 []

2、双中括号[[ ]]

例子:

if ($i<5)  
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]

for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done

三、大括号、花括号 {}

1、常规用法

# ls {ex1,ex2}.sh  
ex1.sh ex2.sh
# ls {ex{1..3},ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh
# ls {ex[1-3],ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh

2、几种特殊的替换结构

带冒号的情况:

去除冒号的情况:

对比总结:带冒号的检查是否为空,不带冒号的检查是否未定义

3、四种模式匹配替换结构

模式匹配记忆方法:

${var%pattern}${var%%pattern}${var#pattern}${var##pattern}

这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。

结构中的pattern支持通配符

# var=testcase  
# echo $var
testcase
# echo ${var%s*e}
testca
# echo $var
testcase
# echo ${var%%s*e}
te
# echo ${var#?e}
stcase
# echo ${var##?e}
stcase
# echo ${var##*e}

# echo ${var##*s}
e
# echo ${var##test}
case

4、字符串提取和替换

${var:num},${var:num1:num2},${var/pattern/pattern},${var//pattern/pattern}

[root@centos ~]# var=/home/centos
[root@centos ~]# echo $var
/home/centos
[root@centos ~]# echo ${var:5}
/centos
[root@centos ~]# echo ${var: -6}
centos
[root@centos ~]# echo ${var:(-6)}
centos
[root@centos ~]# echo ${var:1:4}
home
[root@centos ~]# echo ${var/o/h}
/hhme/centos
[root@centos ~]# echo ${var//o/h}
/hhme/cenths

四、符号$后的括号

五、使用

1、多条命令执行

对{}和()而言, 括号中的重定向符只影响该条命令, 而括号外的重定向符影响到括号中的所有命令。

<⇧>