shell中各种括号的用法

一、单小括号()
1、将某个命令的返回值作为某个变量的值进行传递

#!/bin/bash
USER=$(whoami)
echo $USER

[root@jump ~]# for i in $(seq 0 4);do echo $i;done
0
1
2
3
4

2、用于初始化数组

array=(1 2 3 4)

二、双小括号(())
1、整数运算(不支持浮点型)

[root@jump ~]# echo $((1+1))
2

2、进制转换

16进制转10进制
[root@jump ~]# echo $((16#5f))
95

3、重新定义变量的值

[root@jump ~]# for ((i=0;i<5;i++));do echo $i;done
0
1
2
3
4

4、算数比较

[root@jump ~]# i=5;if (($i>1));then echo "yes";fi
yes

三、单中括号[...]

算数比较
[root@jump ~]# i=5;if [ $i -ge 1 ];then echo "yes";fi
yes

四、双中括号[[...]]

支持字符串模式匹配,甚至支持正则表达式;使用[[...]]条件判断,能够防止脚本中的许多逻辑错误,比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错;
[root@jump ~]# if [[ hello==hell? ]];then echo "yes";fi
yes

五、大括号{...}

1、常规用法

for i in {1..4};do echo $i;done   #打印1到4的数字;
touch {1..4}.txt  #创建1.txt 2.txt 3.txt 4.txt文件
touch {1,4}.txt   #创建1.txt 4.txt文件

2、变量替换

2.1、${var:-string}和${var:=string}
        如果变量var为空,则将string赋值给${var:-string}和${var:=string};

[root@jump ~]# cat aaa.sh
#!/bin/bash
NUM=$1

if [ ${NUM:="1"} -gt 10 ];then
    echo "比10大"
else
    echo "比10小"
fi

echo "输入值为:"${NUM:-"1"}
[root@jump ~]# bash aaa.sh
比10小
输入值为:1
[root@jump ~]# bash aaa.sh 55
比10大
输入值为:55

2.2、${var:+string}
  变量var不为空的时候,才将string赋值给${var:+string};
2.3、${var:?string}
  变量为空的时候,则把string输出到标准错误中,并从脚本中退出;

[root@jump ~]# cat str.sh
#!/bin/bash
NUM=$1
if [ ${NUM:?"1"} -gt 10 ];then
    echo "比10大"
else
    echo "比10小"
fi
[root@jump ~]# bash str.sh
str.sh:行3: NUM: 1
[root@jump ~]# bash str.sh 3
比10小

2.4、模式匹配

# 是去掉左边
% 是去掉右边
#和%中的单一符号是最小匹配,两个相同符号是最大匹配。
[root@jump ~]# var="hello word"
[root@jump ~]# echo $var
hello word
[root@jump ~]# echo ${var%o*d}
hello w
[root@jump ~]# echo ${var%%o*d}
hell
[root@jump ~]# echo ${var#?e}
llo word
[root@jump ~]# echo ${var##?e}
llo word
[root@jump ~]# echo ${var##*e}
llo word
[root@jump ~]# echo ${var##*s}
hello word
[root@jump ~]# echo ${var##*d}

[root@jump ~]# echo ${var##*r}
d
[root@jump ~]# echo ${var##hello}
word

  以上操作都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示仅与一个任意字符匹配,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符。

2.5、字符串的提取和替换

[root@jump ~]# var=/data/nginx
[root@jump ~]# echo $var
/data/nginx
[root@jump ~]# echo ${var:5}
/nginx
[root@jump ~]# echo ${var: -5}
nginx
[root@jump ~]# echo ${var: -6}
/nginx
[root@jump ~]# echo ${var:(-6)}
/nginx
[root@jump ~]# echo ${var:1:4}
data
[root@jump ~]# echo ${var/t/a}
/daaa/nginx
[root@jump ~]# echo ${var/a/o}
/dota/nginx
[root@jump ~]# echo ${var//a/o}
/doto/nginx
原文地址:https://www.cnblogs.com/zhangzhide/p/15109048.html