bash 括号(小括号,双小括号,中括号,双中括号,大括号)
小括号()和大括号{}
主要包括一下几种
- ${var}
- $(cmd)
- ()和{}
- $((exp))
- ${var:-string},${var:+string},${var:=string},${var:?string}
- $(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)
1.shell变量应用原型 ${var}
2.变量替换 ${cmd}与`cmd`类似
注意:$(cmd)只输出标准输入,如果命令执行错误,则无输出
3. 一串命令执行 ()和{},
二者都用于执行一串命令,指令之间用;分开,注意:括号内的数据重导向只影响括号内部的指令输入输出,不影响括号外部的指令
不同之处如下:
运行方式:
1)()重新开启一个shell运行命令,{}在当前shell运行
2)()最后一条指令不需要; , {}最后一条指令需要;
3) {}第一个指令和左括号需要有空格,()不需要
下面是一个简单的例子
$ var=test
$ (var=notest; echo $var) ###变量var值为notest,此是在子shell中有效
notest
$ echo $var ###父shell中值仍为test
test
$ { var=notest; echo $var;} ###注意左括号和var之间要有一个空格
notest
$ echo $var ###父shell中的var变量的值变为了notest
notest
$ { var1=test1;var2=test2;echo $var1>a;echo $var2;} ###输出test1被重定向到文件a中,
test2 ###而test2输出则仍输出到标准输出中。
$ cat a
test1
$ { var1=test1;var2=test2;echo $var1;echo $var2;}>a ###括号内命令的标准输出全部被重定向到文件a中
$ cat a
test1
test2
4.$((expr))用于执行数学运算,语法类似c语言
例子如下
$ echo $((3+2))
5
$ echo $((3>2))
1
$ echo $((25<3 ? 2:3))
3
$ echo $var $ echo $((var=2+3))
5
$ echo $var
5
$ echo $((var++))
5
$ echo $var
6
$
在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算。估计很多朋友都感觉比较难以接受。特变逻辑运算符”[]”使用时候,必须保证运算符与算数 之间有空格。 四则运算也只能借助:let,expr等命令完成。 今天讲的双括号”(())”结构语句,就是对shell中算数及赋值运算的扩展。
使用方法:
语法:
((表达式1,表达式2…))
特点:
1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。
2、在双括号结构中,所有变量可以不加入:“$”符号前缀。
3、双括号可以进行逻辑运算,四则运算
4、双括号结构 扩展了for,while,if条件测试运算
5、支持多个表达式运算,各个表达式之间用“,”分开
使用实例:
- 扩展四则运算
1234567891011#!/bin/sh
a=1;
b=2;
c=3;
((a=a+1));
echo
$a;
a=$((a+1,b++,c++));
echo
$a,$b,$c
运行结果:
sh testsh.sh
2
3,3,4双括号结构之间支持多个表达式,然后加减乘除等c语言常用运算符都支持。如果双括号带:$,将获得表达式值,赋值给左边变量。
- 扩展逻辑运算
#!/bin/sh
a=1;
b=
"ab"
;
echo
$((a>1?8:9));
((b!=
"a"
))&&
echo
"err2"
;
((a<2))&&
echo
"ok"
;
运行结果:
sh testsh.sh
9
err2
ok
- 扩展流程控制语句(逻辑关系式)
#!/bin/sh
num=100;
total=0;
for
((i=0;i<=num;i++));
do
((total+=i));
done
echo
$total;
total=0;
i=0;
while
((i<=num));
do
((total+=i,i++));
done
echo
$total;
if
((total>=5050));
then
echo
"ok"
;
fi
运算结果:
sh testsh.sh
5050
5050
ok
有了双括号运算符:[[]],[],test 逻辑运算,已经let,expr 都可以抛到一边了。
5. ${var: } ,${var%}用于变量的替换和匹配替换结构
替换:
${var:-string} 若var为空,${var:-string}值为string
${var:=string} 与${var:-string}功能类型,不过${var:=string} 将string值赋给var变量
${var:=string} 判断某个变量是否赋值,没有的话则给它赋上一个默认值
${var:+string}的替换规则和${var:=string}相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值
匹配:
${var%pattern}和${var%%pattern}表示从最右边(即结尾)匹配的
${var#pattern} 和${var##pattern}从最左边(即开头)匹配的
中括号[] [[]]
一. bash [ ] 单双括号
基本要素:
Ø [ ] 两个符号左右都要有空格分隔
Ø 内部操作符与操作变量之间要有空格:如 [ “a” = “b” ]
Ø 字符串比较中,> < 需要写成\> \< 进行转义
Ø [ ] 中字符串或者${}变量尽量使用"" 双引号扩住,避免值未定义引用而出错的好办法
Ø [ ] 中可以使用 –a –o 进行逻辑运算
Ø [ ] 是bash 内置命令:[ is a shell builtin
二.bash [[ ]] 双方括号
基本要素:
Ø [[ ]] 两个符号左右都要有空格分隔
Ø 内部操作符与操作变量之间要有空格:如 [[ “a” = “b” ]]
Ø 字符串比较中,可以直接使用 > < 无需转义
Ø [[ ]] 中字符串或者${}变量尽量如未使用"" 双引号扩住的话,会进行模式和元字符匹配
[root@localhostkuohao]# [[ "ab"=a* ]] && echo "ok"
ok
Ø [[] ] 内部可以使用 && || 进行逻辑运算
Ø [[ ]] 是bash keyword:[[ is a shell keyword
[[ ]] 其他用法都和[ ] 一样
Ø [[ ]] 和 [ ] 都可以和 ! 配合使用
优先级 ! > && > ||
逻辑运算符 < 关系运算符
逻辑运算符 : ! && || -a -o
关系运算符 : < > \> \< == = != – eq –ne -gt -ge –lt -le
-----------------------------------------------------------------------------
n [[ ]] 比[ ] 具备的优势
-----------------------------------------------------------------------------
①[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。
②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。
③使用[[ ... ]]条件判断结构,而不是[... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。
④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。
使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如,&&, ||, <, 和> 操作符能够正常存在于[[]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错。
参考:https://blog.csdn.net/claytonzeng/article/details/10267225
参考:https://blog.csdn.net/DLUTBruceZhang/article/details/9230757
bash 括号(小括号,双小括号,中括号,双中括号,大括号)的更多相关文章
- shell编程中的单/双 小括号, 中括号, 大括号
linux shell中的变量类型?分字符串或者数字或者bool类型吗? 参考: http://www.cnblogs.com/nufangrensheng/p/3477281.html 不分! sh ...
- Excel-统一小括号格式(中文小括号,英文小括号)
1.统一小括号格式(中文小括号,英文小括号) 公式=ASC("(") #"(" 解释函数: ASC(A1)#对于双字节字符集(DBCS)语言,将全角英文字符(即 ...
- 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解
前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...
- java 调用bash shell脚本阻塞的小问题的解决
java 调用bash shell脚本阻塞的小问题的解决 背景 使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结 ...
- 微信小程序+“芝麻小客服”可设自动关注公众号,助力运营闭环
微信小程序全面上线已经接近1年的时间,从最初的"用完即走"理念到2017年总计更新开放60余次的功能创新,微信小程序不一定会爆发下一次的红利,但绝对是微信生态中重要的一环. 芝麻小 ...
- PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键
PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键 1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner ...
- 有趣 GIF 动图集 - 仿佛每张小动图都诉说了一个小笑话或者小故事
点这里 来自法国南特(Nantes)的 Guillaume Kurkdjian 目前还是个学生.Kurkdjian 擅长创作一些平面动态图像,这些有趣的小动图仿佛每张都诉说了一个小笑话或者小故事,像个 ...
- 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...
- 玩玩小程序:使用 WebApi 交互打造原生的微信小程序 - 图灵小书架
使用 WebApi 交互打造原生的微信小程序 - 图灵小书架 目录 介绍 源码地址 扫一扫体验 代码分析 其它相关信息(互联网搜集) 介绍 定时抓取图灵社区官网的首页.最热.推荐和最新等栏目的相关图书 ...
- 用css 添加手状样式,鼠标移上去变小手,变小手
用css 添加手状样式,鼠标移上去变小手,变小手 cursor:pointer; 用JS使鼠标变小手onmouseover(鼠标越过的时候) onmouseover="this.style. ...
随机推荐
- Redis创建高可用集群教程【Windows环境】
模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...
- 使用ApiPost模拟发送get、post、delete、put等http请求
现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get.post.delete.put请求,还可以导出文档,支持团队协作也是它 ...
- 初识thinkphp(4)
这次内容是数据库的使用方法 因为在第一章讲过就是拿index这个文件写的数据库的访问,这次实验我使用文件是系统默认的首页 配置的内容也在那里有提过就不重发戳图了. 数据库按照手册上的建议建了3行的内容 ...
- Python join() 方法与os.path.join()的区别
Python join() 方法与os.path.join()的区别 pythonJoinos.path.join 今天工作中用到python的join方法,有点分不太清楚join() 方法与os.p ...
- View 事件分发
View 事件分发 学习自 <Android开发艺术探索> 官方文档-MotionEvent 事件分发机制漫谈 View的事件分发机制,使我们了解View的工作原理继而学习如何自定义Vie ...
- jsonp的理解
众所周知:在开发过程中,有时候需要客户端从服务器接收或向服务器发送一些数据:如果使用普通的ajax,则会遇到跨域访问无权限的问题. 要解决这个问题,就需要了解一下jsonp了: 1. ajax请求普通 ...
- 牛客OI赛制测试赛3游记
A - 数字权重 题目大意: 一个\(n\)位的数字.设第\(i\)位的数为\(a_i\),其中\(a_1\)为最高位,\(a_n\)为最低位,\(k\)为给定的数字.求同时满足满足以下两个条件的数的 ...
- Codeforces Beta Round #14 (Div. 2) B. Young Photographer 水题
B. Young Photographer 题目连接: http://codeforces.com/contest/14/problem/B Description Among other thing ...
- 【原】用IDEA远程Debug Tomcat服务
[环境参数] Web容器:Tomcat 8.0 IDE:IDEA 2018.1.5 [具体步骤] 1.配置Tomcat容器参数 编辑$CATALINA_HOME/bin/catalina.sh脚本,加 ...
- mysql_提示 Lock wait timeout exceeded解决办法
我的mysql报这个错 err=1205 - Lock wait timeout exceeded; try restarting transaction 利用 SHOW PROCESSLIST来查看 ...