shell | {}和()
执行
bash -n xx.sh
用于检测脚本语法是否有错误
bash -x xx.sh
用于追踪执行
${var}
用于限定变量名称的范围,并且支持通配符
$(cmd)
shell会先执行括号的cmd,然后将结果作为变量进行替换,替换只能替换标准输出,错误输出不能替换。
一串命令的()和{}
()
是重新开一个子shell然后执行,而{}
则是在当前shell里执行。()
最后一个命令可以不用分号,{}
最后一个命令要用分号。()
里第一个命令和左边括号不必有空格,而{}
第一个命令和左括号之间必须有一个空格。()
和{}
里的某个命令的重定向只影响该命令, 而括号外的重定向则影响到括号里的所有命令。
root@guo:~/initramfs# var=test
root@guo:~/initramfs# echo var
var
root@guo:~/initramfs# echo $var
test
root@guo:~/initramfs# (var=notest;echo $var)
notest
root@guo:~/initramfs# {var=notest;echo $var}
{var=notest: command not found
test}
root@guo:~/initramfs# {var=notest;echo $var;}
-su: syntax error near unexpected token `}'
root@guo:~/initramfs# { var=notest;echo $var;}
notest
root@guo:~/initramfs# echo $var
notest
从上线可以看出,{}
修改了变量的值。表明在当前shell中运行的。
root@guo:~/initramfs# var=test
root@guo:~/initramfs# echo $var
test
root@guo:~/initramfs# (var=notest;echo $var)
notest
root@guo:~/initramfs# echo $var
test
从上面可以看出()
里的执行完毕后没有改变变量的值,说明在子shell中执行的。
特殊替换
${var:-string} 和 ${var:=string}
当变量var为空或未定义时,则在命令行中用string替换:${var:-string}
若var不为空时,则用变量var的值,而不进行替换。
root@guo:~/initramfs/bin# echo $a
root@guo:~/initramfs/bin# echo ${a:-bcc}
bcc
root@guo:~/initramfs/bin# echo $a
root@guo:~/initramfs/bin# a=test
root@guo:~/initramfs/bin# echo ${a:-bcc}
test
root@guo:~/initramfs/bin# unset a
root@guo:~/initramfs/bin# echo $a
root@guo:~/initramfs/bin# echo ${a:=bcc}
bcc
root@guo:~/initramfs/bin# echo $a
bcc
而${var:=string}
则是当变量var为空时,则将string赋值给var。
${var:+string}
当var不为空时才替换成string,若var为空,则不替换或替换成var的值,即空
root@guo:~/initramfs/bin# a=test
root@guo:~/initramfs/bin# echo $a
test
root@guo:~/initramfs/bin# echo ${a:+bcd}
bcd
root@guo:~/initramfs/bin# echo $a
test
root@guo:~/initramfs/bin# unset a
root@guo:~/initramfs/bin# echo $a
root@guo:~/initramfs/bin# echo ${a:+bcd}
${var:?string}
当var不为空时,则用var的值来替换,而当var为空时,则把string输出到STDERR中,并退出脚本。一般用此来检测是否设置了变量的值
root@guo:~/initramfs/bin# echo $a
root@guo:~/initramfs/bin# echo ${a:?bcd}
-su: a: bcd
root@guo:~/initramfs/bin# a=test
root@guo:~/initramfs/bin# echo ${a:?bcd}
test
$((exp))
符合C语言的运算符都在里面进行计算。包括三目运算符,不支持浮点型和字符串,只支持整型计算
root@guo:~/initramfs/bin# echo $(3+2)
3+2: command not found
root@guo:~/initramfs/bin# echo $((3+2))
5
模式替换
${var%pattern},${var%%pattern} 从右边开始匹配
${var#pattern},${var##pattern} 从左边开始匹配
${var%pattern} ,${var#pattern} 表示最短匹配,匹配到就停止,非贪婪
${var%%pattern},${var##pattern} 是最长匹配
只有在pattern中使用了通配符才能有最长最短的匹配,否则没有最 长最短匹配之分
结构中的pattern支持通配符
*
表示零个或多个任意字符
?
表示零个或一个任意字符
[...]
表示匹配中括号里面的字符
[!...]
表示不匹配中括号里面的字符
root@guo:~/initramfs/bin# f=a.tar.gz
root@guo:~/initramfs/bin# echo ${f#*.}
tar.gz *匹配的a
root@guo:~/initramfs/bin# echo ${f##*.}
gz 最长匹配,匹配到了后面的.
root@guo:~/initramfs/bin# echo ${f%.*}
a.tar
root@guo:~/initramfs/bin# echo ${f%%.*}
a
==和=
==
可用于判断变量是否相等,=
除了可用于判断变量是否相等外,还可以表示赋值
在 (( ))
中 =
表示赋值, ==
表示判断(整数比较),它们不等价
root@guo:~/initramfs/bin# ((n=5))
root@guo:~/initramfs/bin# echo $n
5
root@guo:~/initramfs/bin# ((n==5)) && echo "equal"
equal
shell | {}和()的更多相关文章
- Shell替换
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. #!/bin/bash a= echo -e "Value of a is ...
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- shell简介
Shell作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. shell使用的熟练程度反映了用户对U ...
- Shell碎碎念
1. 字符串如何大小写转换 str="This is a Bash Shell script." 1> tr方式 newstr=`tr '[A-Z]' '[a-z]' < ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
随机推荐
- Python 多进程编程之 进程间的通信(在Pool中Queue)
Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...
- 微信浏览器Ajax请求返回值走error
微信浏览器Ajax post请求是返回值走的error $.ajax({ type: "POST", url: "https://XXXX", cache: f ...
- 2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
传送门 题意:支持单点修改,维护子树里的最大连通子块和. 思路: 扯皮: bzojbzojbzoj卡常差评. 网上的题解大多用了跟什么最大子段和一样的转移方法. 但是我们实际上是可以用矩阵转移的传统d ...
- MUI的一些笔记
自定义图标 https://www.iconfont.cn选择图标添加入购物车 进入项目管理下载需要的图标压缩包之后按照自己的需求进行html的操作 事件绑定 mui(dom)on( event , ...
- 第33章:MongoDB-索引--GridFS存储文件
①简介 GridFS是MongoDB用来存储大型二进制文件的一种存储机制.特别适合用在存储一些不常改变,但是经常需要连续访问的大文件的情况. ②GridFS的优点 1:能够简化技术栈,如果已经使用了M ...
- clickhouse安装使用文档
Clickhouse简介 Clickhouse是什么 1. 开源的列存储数据库管理系统 2. 支持线性扩展 3. 简单方便 4. 高可靠性 5. 容错(支持多主机异步复制,可以跨多个数据中心部署. 单 ...
- 部署自己配置的nginx到kubernetes,并且能通过ingress访问
本文的环境介绍 [root@m-30-1 ~]# kubectl version Client Version: version.Info{Major:"1", Minor:&qu ...
- 【python接口自动化测试教程】00---00章节就代表开篇吧
今天突然想写个接口测试教程,由于本人是初级的比小白稍微好那么一丢丢,所以不知道能不能坚持下来 写的不对的地方还请大咖指教 先去忙自己的工作了,忙完了回来开始写第一章吧 或者先写个大纲,要不然写的章节会 ...
- Jquery 图片走马灯效果原理
本篇只讲解水平走马灯效果,垂直向上走马灯效果不讲解,原理一样,但是水平走马灯效果有一个小坑.待会讲解 照例先上代码: HTML: <div class="box"> & ...
- springboot知识点补充(一)
测试配置 @RunWith(SpringRunner.class) @SpringBootTest @Configuration @ActiveProfiles("test") p ...