shell编程中的括号大致有五种,分别是 (), [], (()), [[]], {} 接下来简单的介绍以下它们的用法:
- ()
- 放置命令,格式$(cmd),如同`cmd` 。
解释器遇到这种格式,会先执行命令,得到结果再输出。 - 初始化数组 array=(1 2 3 4)
- (())
- 算术运算 $((3*3+4*4))
- 重定义
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;cmd) ,{}左边必须空格开头,并且cmd后面必须加;
其余的就是和字符串相关的操作
字符串的替换和截断
${var:-string},${var:+string},${var:=string},${var:?string}
${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
${var:num},${var:num1:num2}