linux中各种括号之(),(()),[],[[]],{}

来源:互联网 发布:suse linux yast 编辑:程序博客网 时间:2024/05/23 19:13

1.单小括号()

(1)命令组,括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。形如(cmd1;cmd2;cmd3),这三条命令的执行不会影响当前的shell环境。

(2)命令替换,$(command)

(3)定义数组,array = ("beijing" "tianjin" "chongqin" "shanghai")


2.双小括号

(0)((expr))中的expr可以支持C语言中的各种表达式,甚至连a>b?a:b这样的三目表达式都支持

(1)(())中使用变量,均不需要$符号,例如,((a=b+c))

(2)(())中可以有多个表达式,各个表达式用逗号,分割,例如((a++,b++,c++))

(3)((expr))中expr表达式不仅可以是关系表达式,也可以是算术表述式,比如((a>b)) 或者((a+b))

(4)((expr))可以用在for、while、if中的条件判断中,例如if((a>b))  while((a==b))

(5)可以使用$((expr))获取expr的表达式计算结果值


3.单中括号[]

(1)[]中[是base的内置命令,和test命令是一样的。]表示条件表达式的结束。也就是说,

if  [ $num1 -eq $num2 ] ; then 等价于 if  /usr/bin/[ $num1 -eq $num2 ] ; then 还等价于if  test $num1 -eq $num2 ; then

(2)[]的具体用法有

  • [ expr ]
  • [ expr1 -o expr2 ]  eg, [ "$variable" == "Y" -o "$variable" == "y"]
  • [ expr1 -a expr2 ]
  • [ expr1 ] || [ expr2 ]
  • [ expr1 ] && [ expr2 ]

4.双中括号[[]]
[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。
      对于复合表达式这块,[[]]支持如下两种[]不支持的形式,
  • [ expr1 || expr2 ]  eg, [ "$variable1" == "Y" || "$variable2" == "y"]
  • [ expr1 && expr2 ] 

5.大括号{}
(1)类似数组的功能
{1..9}  #使用两个点号连接,表示1到9{1,8,9}  #使用逗号连接,表示1,8,9#使用举例:#统计00点30分到00点44分之间 每分钟的qpsfor i in {30..44};do        echo -n "01-10 00:${i} qps stat:" && cat access.log.2016011000 | grep "01-10 00:${i}" | wc -ldone#统计00点30分,00点35分,00点44分这三个时刻点的qpsfor i in {30,35,44};do        echo -n "01-10 00:${i} qps stat:" && cat access.log.2016011000 | grep "01-10 00:${i}" | wc -ldone#touch文件touch  access.log.20160110{00,15,30,45}
(2)代码块的功能,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。
(3)变量内容的删除、替代和替换。类似于这样的形式,${变量#关键字},${变量%关键字},${变量/旧字符串/新字符串},${str-expr},${str+expr},${str:=expr}等等


学习资料参考http://blog.csdn.net/tttyd/article/details/11742241

0 0