shell编程中括号大致有五种:(),[],(()),[[]],{}。
()
- 放置命令,格式$(cmd),如同’cmd’,解释器遇到这种格式,会先执行命令,得到结果再输出
- 初始化数组array=(1 2 3 4)
(())
- 算术运算$((33+44));
- 重定义
var=100
((var=101))
echo $var
- 算术比较
((var==404))&&echo “not found” #如果var是404,输出not found
[]
- 条件判断,可以test替代;
var=404
if [$var -eq 404] ##和下面意思一样
#if test $var -eq 404
then
echo "not found"
else
echo "hi"
fi
- 正则表达式的一部分
- 数组
[[]]
条件判断,那么和[]test有什么区别呢?
- &&、||、<和>只能再[[]]中使用
- [[]]支持算术扩展
- [[]]支持字符串模式匹配
var="nice"
if [[$var == nic?]]
then
echo "nice" #输出nice
else
echo "hi"
fi
if [[1+2 -eq 3]]
then
echo "yes" #输出yes
else
echo "no"
fi
所以判断条件,尽量用[[]],而不是[]
{}
- 代码块,和()是有区别的
- {}中不会开新进程,()会开,所以脚本里的变量在()中是不能用的,而在{}中是可以用的
- 格式问题,{ cmd;cmd;},{}左边必须空格开头,并且cmd后面必须加;
其余的就是和字符串相关的操作
字符串的替换和截断
${var:-string},${var:+string},${var:=string},${var:?string}
${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
${var:num},${var:num1:num2}