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

最新文章

  1. Hyper-V 激活Windows系统重启后黑屏的解决方法 + 激活方法
  2. Sort Colors [LeetCode]
  3. JAVA 5.17习题
  4. Asp.Net正在中止线程引发的问题
  5. Amazon-countDuplicate
  6. 反编译APK的工具和方法
  7. ARP协议详解
  8. C++的函数重载 转
  9. iOS: 学习笔记, 用代码驱动自动布局实例(swift)
  10. Copy_on_write的简单实现
  11. Error:C:\Users\issuser\AndroidStudioProjects\SQLiteDemo1\.gradle\buildOutputCleanup\cache.properties (系统找不到指定的文件。)
  12. mybatis常用类起别名
  13. Redis批量导入数据的方法
  14. Windows下安装单机Kafka
  15. Android相关 博客收藏
  16. Tensorflow之Slim使用
  17. rac添加新节点的步骤与方法
  18. abap method中的异常处理
  19. 微信小程序入门与实战
  20. SQL Timeout超时的处理方法

热门文章

  1. Python图像处理:如何获取图像属性、兴趣ROI区域及通道处理
  2. OAuth2授权服务器Id Server一键生成配置原理
  3. 客户案例-SES S.A.
  4. C++面向对象-类和对象那些你不知道的细节原理
  5. VMware 虚拟机图文安装和配置 Rocky Linux 8.5 教程
  6. 论文解读《Bilinear Graph Neural Network with Neighbor Interactions》
  7. 【NodeJS】替换模糊查询字符里包含的正则关键字
  8. ZIP压缩输入/输出
  9. Matplotlib的小入门
  10. 优先队列STL