Shell中括号的作用
Shell中括号的作用
作者:Danbo 时间:2015-8-7
单小括号()
①.命令组。括号中的命令将会断开一个子Shell顺序执行,所以括号中的变量不能被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
②.命令替换。等同于`cmd`,Shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。
③.用于初始化数组。如:array=(a b c d)
双小括号(())
①.整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结果扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码1,或者是“假”,而一个非零值的表达式所返回的退出状态码将为0,或者是“true”。若是逻辑判断表达式exp为1则真,为0则假。
例如:
[root@localhost ~]# echo $((1+2));echo $?
3
0
[root@localhost ~]# echo $((1.1+2.2))
-bash: 1.1+2.2: syntax error: invalid arithmetic operator (error token is ".1+2.2")
[root@localhost ~]# echo $?
1
②.只要括号中的运算符、表达式符合C语言运算规则,都可用在$(())中,甚至是三目运算符。做不同进位运算,输出结果全部转化成了十进制。如下所示:
[root@localhost ~]# echo $((16#5f))
95 #即将16进制5f转换为十进制95
③.单纯用(())也可重定义变量值,比如,a=5;((a++))可将$a重定义为6
④.常用于算术运算比较双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用分号分开。只要括号中的表达式符合C语言运算规则,比如可以直接使用:for ((i=0;i<5;i++)),如果不使用双括号,则为:for i in `seq 4`或者for i in {0..4}。再如可以直接使用if (($i<5)),如果不使用双括号,则未if [ $i -lt 5 ]。
单中括号
①.bash内部命令,“[”和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构总共的左中括号是调用test的命令标识,有中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。
②.Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,可以使用转义字符,如下面这样:[ ab \< bc ],结果为真返回0,[ ]中的逻辑与和逻辑或使用-a和-o表示。
③.字符范围。用作正则表达式的一部分,描述一个匹配的字符范围。
④.在一个array结构的上下文中,中括号用来引用数组中每个元素的编号。
双中括号
①.[[ ]]结构比[ ]结构更加通用。
②.支持字符串的模式匹配,字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,[[ hello == hell? ]],结果为真。
③.使用[[...]]条件判断结构,而不是[...],能够防止脚本中的许多逻辑错误。比如,&&、||操作符能够正常存在于[[]]条件为判断结构中,如果使用在[]就会出错。
例如:
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]
大括号
①.对大括号中的文件名做扩展。比如:touch {a,d}.txt结果为:a.txt、d.txt。touch {a..d}.txt结果为:a.txt、b.txt、c.txt、d.txt。。
②.代码块,又被称为内部组,这个结构事实上创建了一个匿名函数。与小括号中的命令不同,大括号内的命令不会新开一个子Shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{ }的第一个命令和左括号之间必须有一个空格。
符号$后的括号
①.${a} 变量a的值,在不引起歧义的情况下可以省略大括号。
②.$(cmd) 命令替换,和`cmd`效果相同。
③.$((expression))和`expression`效果相同,计算数学表达式exp的数值,其中exp只要符合C语言的运算规则即可,甚至三目运算符和逻辑表达式都可以计算。
多条明命令执行
①.单小括号:(cmd1;cmc2;cmd3)
②.单大括号:{ cmd1;cmd2;cmd3; }
Shell中括号的作用的更多相关文章
- shell中括号的使用
在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string ...
- shell中括号的特殊用法 linux if多条件判断
一. bash [ ] 单双括号 基本要素: Ø [ ] 两个符号左右都要有空格分隔 Ø 内部操作符与操作变量之间要有空格:如 [ “a” = “b” ] Ø 字符串比较中,&g ...
- shell中括号总结: {}, (), (()), [], [[]]
括号总结 () 单小括号 命令组,括号中的命令将会开一个新的子shell执行 括号中变量不能被剩下脚本使用 命令之间分号隔开 命令和括号之间可以没有空格 命令替换,等同于``反引号 $(xxx)会被替 ...
- (转)shell中括号的特殊用法 linux if多条件判断
一. bash [ ] 单双括号 基本要素: Ø [ ] 两个符号左右都要有空格分隔 Ø 内部操作符与操作变量之间要有空格:如 [ “a” = “b” ] Ø 字符串比较中,&g ...
- SQL语句中加中括号[ ]的作用
有些可能是SQL里面的保留字,但是你又用了它做字段名 比如Action,用[Action] 就可以避免这个问题,如果直接Action SQL就要报错了. 解决较长的中文名表名可能会被不识别的问题.
- python正则表达式中括号的作用,形如 "(\w+)\s+\w+"
先看一个例子: import re string="abcdefg acbdgef abcdgfe cadbgfe" #带括号与不带括号的区别 regex=re.compile(& ...
- Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)
Shell提供了很多字符串和文件处理的命令,如awk.expr.grep.sed等命令,还有文件的排序.合并和分割等一系列的操作命令.下面重点总结下Shell字符串处理.文本处理以及各类命令及函数用法 ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- linux下的shell和脚本
1.各种Unix shell linux下的shell基本是从unix环境中的shell发展而来,贴一下wiki:其中我们常用的,可归类为Bourne Shell(/usr/bin/sh或/bin/s ...
随机推荐
- Java 界面编程【03】事件监听
当你把界面都设计好了,总需要添加相应的执行动作给组件,在JAVA中有相应的时间处理机制,叫做“监听器”,给组件添加相应执行动作的过程叫做“注册”,其中的“监听器”是一个接口,里面包含了相应的执行函数, ...
- wangzhi
http://blog.const.net.cn/a/9145.htm http://blog.sina.com.cn/s/blog_bf5abc95010169jf.html http://ciss ...
- luogu P3119 [USACO15JAN]草鉴定Grass Cownoisseur
题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...
- Java 正则表达式的使用
Java 正则表达式的使用 java.util.regex 包主要包括以下三个类: Pattern 类: pattern 对象是一个正则表达式的编译表示.Pattern 类没有公共构造方法.要创建一个 ...
- Android Intent调用 Uri的使用几种格式
打开百度 Uri uri = Uri.parse("http://www.baidu.com"); Intent intent =new Intent(Intent.ACTION_ ...
- Go -- LRU算法(缓存淘汰算法)(转)
1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...
- python 常见细节知识点
1. a[::-1]翻转 设有一个元组或者列表 a = (1,2,3,4) b = [1,2,3,4] 则a[::-1]和b[::-1]的含义是将元组或列表的内容翻转 a[::-1] # 结果为(4, ...
- requests(爬虫常用)库的使用
Requests库的使用 基于urllib改写的库 示例: import requests response=requests.get('http://www.baidu.com')#get请求 pr ...
- 百度地图之标注一组地理坐标<2>
一.需求 开发移动地图相关的应用有时会有这种需求:在地图上显示自己的定位,然后想查看周边使用这个应用的有哪些人.当然完毕这个功能须要后台数据的支持.你要把自己的位置信息发给后台,后台在依据你的位置查询 ...
- background-attachment
CreateTime--2017年9月28日10:58:58 Author:Marydon background-attachment 1.定义 定义背景图片随滚动轴的移动方式(设置背景图像是否固 ...