转载:https://www.cnblogs.com/OliverQin/p/10286256.html
圆括号
1.单圆括号()
①命令组,括号中的命令将会开启一个子shell独立运行;括号中以分号连接,最后一个命令不需要;各命令和括号无需空格
Linux:/qins # (var=1;echo $var)
1
②命令替换,等同于`cmd`,shell将会执行$(cmd)中的命令,将其输出放到原来的命令中
Linux:/qins # echo $(date +%Y-%m-%d)
2019-01-17
③定义数组
Linux:/qins # a=(1 2 3)
2.双圆括号(())
①整数扩展。这种运算支持整数型的,但不支持浮点型的
Linux:/qins # echo $((2.1+3))
-bash: 2.1+3: syntax error: invalid arithmetic operator (error token is ".1+3")
Linux:/qins # echo $((2+3))
5
②跨进制运算
进制转换例子:十六进制2AF5(10~15依次对应了A、B、C、D、E、F)
用竖式计算: 2AF5换算成10进制:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2 = 2560
第3位: 2 * 16^3 = 8192 +
-------------------------------------
10997
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
Linux:/qins # echo $((16#2af5))
10997
说明:16#2af5表示16进制的2af5
③重定义变量值
Linux:/qins # a=5;((a--));echo $a
4
④用于算术用运算比较
Linux:/qins # for((i=1;i<=5;i++));
> do
> echo $i
> done
1
2
3
4
5
3.中括号[]
①bash的内部命令,[和test是等同的。进行字符串比较,使用==与!=,整数比较使用-gt,-eq这种形式,[]中的逻辑与和逻辑或使用-a与-o表示
括号两边都有空格,字符与等号==之间需要空格
②引用数组中每个元素的编号
Linux:/qins # a=(1 2 3)
Linux:/qins # echo ${a[0]}
1
4.双中括号[[]]
if
[ $a -
ne
1] && [ $a != 2 ]
可以写成
if
[[ $a != 1 && $a != 2 ]]
双括号比[]更通用
5.大括号
①表达变量的值
Linux:/qins # a=2
Linux:/qins # echo $ab
Linux:/qins # echo ${a}b
2b
当表达式的值存在歧义的时候需要加上{}以便区分;
②批量操作
Linux:/qinys/oliver # touch {a,b,c,d}.dat
Linux:/qinys/oliver # ls
a.dat b.dat c.dat d.dat
批量创建了文件
③扩展顺序
Linux:/qinys/oliver # touch {1..5}file.dat
Linux:/qinys/oliver # ls -lrt
total 0
-rw-r--r-- 1 root root 0 Jan 17 21:01 5file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 4file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 3file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 2file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 1file.dat
按顺序批量创建了文件
④特殊替换:${var:-string},${var:+string},${var:=string},${var:?string}
说明:unset a表示将a被赋予的值清空
${var:-string},当var为空,则替换为空,var非空,则使用原值
Linux:/qinys/oliver # a=3
Linux:/qinys/oliver # echo ${a:-23}
3
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:-23}
23
${var:+string}与${var:-string}刚好相反
Linux:/qinys/oliver # a=3
Linux:/qinys/oliver # echo ${a:+23}
23
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:+23}
${var:=string}与${var:-string}功能类似,唯一不同的是,当var为空的时候,是将string赋予var
Linux:/qinys/oliver # a=3
Linux:/qinys/oliver # echo ${a:=23}
3
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:=23}
23
${var:?string}与${var:-string}功能类似,唯一不同的是,当var为空的时候,将错误输出并退出
Linux:/qinys/oliver # a=10
Linux:/qinys/oliver # echo ${a:?99}
10
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:?99}
-bash: a: 99
⑤多命令执行
前后必须有空格,并且每个命令结束都有分号