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 ...
随机推荐
- 大文件LOG持续输出
作了两个版本,一是websocket输出,一是直接显示指定行数. class WebSocketHandler(tornado.websocket.WebSocketHandler): file_co ...
- latex beamer 插入代码
有网友在beamer中使用mcode也就是 listings 输出源代码时遇到如下错误: Runaway argument?! Paragraph ended before \lst@next was ...
- HDU 5972 Regular Number(字符串shift - and算法)
题目链接 HDU5972 2016 ACM/ICPC 大连区域赛 B题 我们预处理出$b[i][j]$,$b[i][j] = 1$的意义是数字$i$可以放在第$j$位. 然后就开始这个匹配的过程. ...
- PropertyPlaceholderConfigurer 基本用法
目录 一.PropertyPlaceholderConfigurer 的继承体系 二.PropertyPlaceholderConfigurer 的基本概念 三.PropertyPlaceholder ...
- jvm 问题分析
jmap dump:file=[文件名].dump [进程号] 生成dump root@VM-185-251-ubuntu:/opt/scripts# jmap -dump:file=three.d ...
- java中正则表达式要进行转义的字符。
/** * 转义正则特殊字符 ($()*+.[]?\^{},|) * * @param keyword * @return */public static String escapeExprSpeci ...
- weblogic运维时经常遇到的问题和常用的配置
希望这篇能把weblogic运维时经常遇到的问题.常用的配置汇总到一起. 1.配置jvm参数: 一般在domain启动过程中会看到以下启动的日志信息,如下图所示: 图中红色方框部分为启动weblo ...
- Nutch学习笔记一 ---环境搭建
学习环境: ubuntu 概要: Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 通过nutch,诞生了hadoop.tika ...
- display:flex不兼容Android、Safari低版本的解决方案 【flex布局】
引自 http://www.cnblogs.com/shimily/articles/7943370.html <!DOCTYPE html> <html lang="en ...
- [Javascript] Await a JavaScript Promise in an async Function with the await Operator
The await operator is used to wait for a promise to settle. It pauses the execution of an async func ...