一、单小括号()
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