shell脚本学习之Bash shell 里各种括号的用法
今天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题。对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash
Shell几种括号的用法和区别,别的Shell我不会。。。
(( )) :一对圆括号有两个地方用到。
1,for循环,
for (( expr1 ; expr2 ; expr3 ))
这里一对双括号里边的表达式,GNU的文档指出,expr1支持 Shell Arithmetic;expr2不为0时,expr3被赋值且语句执行。说的很麻烦,还要花时间搞清楚什么是Shell Arithmetic。其实一言以蔽之,支持数字条件。比如:
for (( a=0 ; a<10 ; a++ )); do echo $a; done
会输出 0 1 2 3 (带换行哦~~~)
2,数学表达
(( )) 和 $(( ))
(( )) 的用法与let一样,就不用多解释了吧~~~
$(( ))就是把计算结果拿出来,可以用在双引号里边,比如:
echo "1+2=$(( 1 + 2 ))"
会输出 1+2=3
( ):一个圆括号
在for循环里,跟C语法一样一样的。
或者是子程序,返回整个里边表达的返回值。里边的变量都是局部的,修改不会带到外边。举例子
a=1
(a=3; echo $a)
echo a
结果是 3 1
还有个就是圈数组。。。这个就没神马意思了
[ ]:一个方括号,是bash的命令,查man手册是可以查到的,跟test一样,在手册里可以看到很多用法。比如-b -c -gt -eq 什么的很多,还有用-a表示与,-o表示或等等
[[ ]]:一对方括号是一个方括号的加强版,则是Shell的保留字,里边支持了 || && 等等这些符号。一般我喜欢用这个
还有相对复杂的 { }
几个用处,区分变量,如:
var=abcd; echo ${var}EFG;
这样,Bash就不会认为变量是varEFG了
还有用来截取字符串的 ${ }语法比较灵活多变,这里不做多解释,大家有兴趣可以自己去搜搜资料,一般我脚本用到的字符串处理,这个都能搞定了。
代码块。用来区分代码的,但是跟( )有个区别,就是在末尾要加上 ;
目前看到常用的用法也就是这样,肯定不全,欢迎补充,欢迎交流。
shell脚本学习之Bash shell 里各种括号的用法的更多相关文章
- 【Shell脚本学习6】Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编 ...
- 【Shell脚本学习9】Shell替换:Shell变量替换,命令替换,转义字符
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value ...
- 【Shell脚本学习8】Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运 ...
- 【Shell脚本学习1】Shell简介:什么是Shell,Shell命令的两种执行方式
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...
- 【Shell脚本学习22】Shell 函数:Shell函数返回值、删除函数、在终端调用函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...
- 【Shell脚本学习21】Shell break和continue命令
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,Shell也使用 break 和 continue 来跳出循环. break命令 break命令允许跳出所有循环(终止 ...
- 【Shell脚本学习13】Shell数组:shell数组的定义、数组长度
Shell在编程方面比Windows批处理强大很多,无论是在循环.运算. bash支持一维数组(不支持多维数组),并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利 ...
- 【Shell脚本学习2】Shell脚本语言与编译型语言的差异
大体上,可以将程序设计语言可以分为两类:编译型语言和解释型语言. 编译型语言 很多传统的程序设计语言,例如Fortran.Ada.Pascal.C.C++和Java,都是编译型语言.这类语言需要预先将 ...
- 【Shell脚本学习25】Shell文件包含
像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本. Shell 中包含脚本可以使用: . filename 或 source filename 两种方式的效果相同,简单起 ...
随机推荐
- C#入门经典学习笔记一
这篇主要讲C#的一些语法. 1.委托 委托类型声明的格式如下: public delegate void TestDelegate(string message); delegate 关键字用于声明一 ...
- HDU-1406 完数
http://acm.hdu.edu.cn/showproblem.php?pid=1406 完数 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- ubuntu 手动添加jar到本地仓库
前言:maven仓库的下载速度太慢了,而且有些jar不存在,或者加入自己开发的依赖包,还是要学会自己手动加入jar.下面以 javax.servlet-api为例. 1.获取下载的javax.serv ...
- fetion for linux
- 8个必备的PHP功能开发
这篇文章主要介绍了8个必备的PHP功能开发,需要的朋友可以参考下 PHP开发的程序员应该清楚,PHP中有很多内置的功能,掌握了它们,可以帮助你在做PHP开发时更加得心应手,本文将分享8个开发必备的PH ...
- Hibernate学习之表一对多,多对一关系
代码: person类: public class Person { private long id; private String name; private int age; private Da ...
- 在Mybatis-spring中由于默认Autowired导致不能配置多个数据源的问题分析及解决
在使用Mybatis中,通常使用接口来表示一个Sql Mapper的接口以及相对应的xml实现,而在spring的配置文件中,通常会使用MapperScannerConfigurer来达到批量扫描以及 ...
- LabSharp莱博夏普简介
莱博夏普提供实验室信息化解决方案,为实验室提供LIMS系统建设方案咨询,并为中小型LIMS系统供应商提供系统解决方案咨询.
- 备战“软考”之软件project
说到"软件project"就有一种非常纠结的感觉!为什么呢?由于刚进入软考复习阶段,大家都把它放到了"比較"次要的地位,由于已经学过两遍,再加上它没有非常难理解 ...
- 一大波Java来袭(二)异常处理
概要解析: 本章的知识点能够记为:1图+5keyword+先逮小的.后逮大的 一.基础 (一)定义 1.异常 是指在程序执行的时候发生的一些异常事件.良好的程序设计应该在异常发生的时候提供处理异常的 ...