博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bash中的括号(一)
阅读量:5037 次
发布时间:2019-06-12

本文共 1665 字,大约阅读时间需要 5 分钟。

初学Bash脚本编程,里面的各种括号,绝对是一个大坑,为了救人救己,以防再度入坑,特记录如下:

一、单小括号:

      1、创建子Shell。单个小括号用来创建一个子shell,子shell允许你在不影响当前shell的环境下去执行操作。例如:

pwd/root(cd /tmp;pwd)/tmp

又如,你在 home 目录,cd 到 /tmp 目录,sleep 5 秒,最后 cd 回 home,但是你会在 sleep 的过程中按 Ctrl + c 中断。命令如下:

~$ cd /tmp/; sleep 5; cd ~^C/tmp$

你会留在 /tmp 目录中,因为最后的 cd ~ 根本没执行。所以如果你希望临时切换别的目录执行某些命令,但又希望中断后回到原来的目录,这个方法就不凑效了。

但是如果你加上小括号:

~$ ( cd /tmp/; sleep 5; )^C~$

这里没有最后的 cd ~,因为多此一举,subshell 有自己的工作目录,相当于你另外开一个终端而已,这样避免一些环境变量被某些代码弄乱。

 

      2、小括号还有命令替换的功能,result=$(command)与result=`command`有同样的效果。

var=$(pwd)echo $var/root

     3、用于初始化数组。如: array=(a b c d) 

二、单方括号:

     1、[和test是等同的,均是shell的内置命令,使用type测试一下:

[root@noi ~]# type [[ is a shell builtin[root@noi ~]# type testtest is a shell builtin

     2、Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab \< bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。

举个例子(坑了我好一阵子,才弄明白):

#3比1大,返回0表示真,正确[root@noi ~]# [ 3 \> 1 ];echo $?0#3比10小,返回0,错误,原因是[和test默认均是比较的字符串,而字符'3'比字符'1'(字符串“10”的第一个字符)大,所以返回真。[root@noi ~]# [ 3 \> 10 ];echo $?0

上面的例子中 [ 3 \> 10 ] 实际上shell执行的是 [ '3' \> '10' ] 这样写就清楚多了,呵呵。

     3、需要注意的是:[]中每个字符之间必须由空格隔开,否则shell就会报错。

     4、如果真想比较数字,可以用:-gt(大于),-lt(小于),-ge(大于等于),-le(小于等于),-eq(等于),-ne(不能于)

[root@noi ~]# [ 3 -gt 1 ];echo $?0[root@noi ~]# [ 3 -gt 10 ];echo $?1[root@noi ~]# [ 5 -lt 2 ];echo $?1[root@noi ~]# [ 5 -gt 2 ];echo $?0

     5、最后一个坑,在[和test测试中,用0表示真(助记0表示没有错误),用1表示假(助记1表示有错误),之所以要这样搞,和c程序反着,

就是因为,shell负责接收其他程序的返回值,而返回值正确(对应一种情况),返回值错误(各种各样的原因导致很多错误类型,需要用不同数值表示),

这样的话,用0(表真)和其他值(表假)可以完美解决这个问题。可以这样理解,除了返回0是正确的以外,返回其他值都是有问题的,呵呵。

以上是常规的用法,但是光这些还不够啊,所以需要用到其他的表达式写法,我先保存下,下篇接着写。

转载于:https://www.cnblogs.com/litifeng/p/6894508.html

你可能感兴趣的文章
ecshop 系统信息在哪个页面
查看>>
【转】码云source tree 提交超过100m 为什么大文件推不上去
查看>>
Oracle数据库的增、删、改、查
查看>>
阿里市值超越亚马逊 马云开启下半场技术理想
查看>>
MySql执行分析
查看>>
git使用中的问题
查看>>
yaml文件 .yml
查看>>
linux字符集修改
查看>>
phpcms 添加自定义表单 留言
查看>>
mysql 优化
查看>>
读书笔记 ~ Nmap渗透测试指南
查看>>
WCF 配置文件
查看>>
动态调用WCF服务
查看>>
oracle导出/导入 expdp/impdp
查看>>
类指针
查看>>
css修改滚动条样式
查看>>
2018.11.15 Nginx服务器的使用
查看>>
Kinect人机交互开发实践
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>