Linux之shell中的大括号、中括号、小括号的使用详解+多示例

摘要:很多人和我一样对于shell的各种括号的各种用法肯定不是很清楚,有时候看见别人脚本都不知道是什么意思,今天就来说说bash中的大中小括号的用法和解释,本人常用bash所以也只能用bash来说明了,若其他shell有出入请勿怪我。

一、shell中的大括号(也叫花括号) "{}"的用法:

1、${var}
在这里插入图片描述

解释:当变量名和后面的内容都是变量命名所允许的内容时候这时候直接用$var是不行的得用{}把变量名括起来

2、${var:-string}
在这里插入图片描述

解释:当变量var值为空时var:−a会吧a作为值,当变量var值不为空时,{var:-a}会吧a作为值,当变量var值不为空时,var:aavar{var:-a}会吧var的值作为变量

3、${var:+string}
在这里插入图片描述

解释:${var:+a}的替换规则和上面的相反,即当变量var的值不为空的时将值换成a,当变量var为空时则不替换或者说是替换成变量var的值,即空值。(因为变量var此时为空,所以这两种说法我认为是一样的)

4、${var:=string}
在这里插入图片描述

解释:当变量var值为空时,var:=a会将其赋值为a,且变量var也被赋值是a了,若变量var不为空时,{var:=a}会将其赋值为a,且变量var也被赋值是a了,若变量var不为空时,var:=aavaravar{var:=string}的值都是变量var的值。(很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。)

5、${var:?string}
在这里插入图片描述

解释:若变量var不为空,则用变量var的值来替换${var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。

6、扩展
在这里插入图片描述

说明:你们以为a这个位置只能常量?答案是否定的照样可以是其他变量名或者一个命令。

7、${var%pattern}

在这里插入图片描述

解释:${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式

8、${var%%pattern}

在这里插入图片描述

解释:${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式

9、${var#pattern}
在这里插入图片描述

解释:${variable#pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式

10、${var##pattern}
在这里插入图片描述

解释: ${variable##pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式

11、{1,2,3}和{1…n}
Linux之shell中的大括号、中括号、小括号的使用详解+多示例


二、shell中的中括号(也叫方括号) "[ ]"的用法:

1、单中括号 []

①bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。

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

③字符范围。用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。

④在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。

2、双中括号[[ ]]

①[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。

②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

③使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。

④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。


三、shell中的小括号 "( )"的用法:

1、()用法

①、() 数组赋值
在这里插入图片描述

②、() 子shell赋值

在这里插入图片描述

在子shell中变量var值为lookback,但是在上级shell中就不是这个值,可以看出是在子shell中有效的赋值

③、() 命令集合结果重定向

在这里插入图片描述

2、$()用法
这个就不多说了应该都知道,用来执行一条命令

3、(())用法
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSON实现桌面可移动的小便签

大多数的管理系统都会有个主程序的桌面&#xff0c;而且上面放置了一个常用的快捷方式或便捷的信息&#xff0c;比如邮件&#xff0c;通知&#xff0c;即丰富了系统内容又能够使用户在第一时间内浏览的信息。 跟XML相比&#xff0c;JSON的优势在于格式简洁短小&#xff0c;生成…

linux常用特殊符号

在shell中常用的特殊符号罗列如下&#xff1a; $ ${} $? $$ $* $# $ command{} [] [[]] () (()) ; 分号 (Command separator) 在 shell 中&#xff0c;&#xff1b;主要用来在一行中运行一条或者多条指令。 ;; 连续分号 (Terminator) 专用在 case 的选项&#xff0c;担任 T…

win7普通家庭版硬盘分区

我以前对电脑很多东西的概念也没有&#xff0c;但是自己选择了网络工程这个专业&#xff0c;那就得对它负责。自己买了个手提电脑&#xff0c;但是硬盘没有分好区&#xff0c;所以我自己开始查阅资料&#xff0c;完成了分区这个过程。 步骤一&#xff1a; 右击我的电脑选择管理…

Centos7制作局域网http的yum源

制作局域网http的yum源 1、下载安装包到本地&#xff0c;以下载vim软件包为例 yum install --downloadonly --downloaddir/opt/download vim 2、将安装包拷贝至局域网预先设置好的yum服务器 [rootlocalhost yum]# cd /opt/yum 进入到软件包所在文件夹 [rootlocalhost y…

[转]Vi/Vim查找替换使用方法

vi/vim 中可以使用 &#xff1a;s 命令来替换字符串。该命令有很多种不同细节使用方法&#xff0c;可以实现复杂的功能&#xff0c;记录几种在此&#xff0c;方便以后查询。     &#xff1a;s/vivian/sky/ 替换当前行第一个 vivian 为 sky     &#xff1a;s/vivian/sky…

awk入门

linux之awk文本处理入门 1、awk简介 awk是一种编程语言&#xff0c;用于linux下对文本和数据进行处理。数据可以来来自标准输入、一个或多个文件&#xff0c;或其他命令的输出。 更多作为脚本来使用。 awk处理数据的方式&#xff1a;逐行扫描文件&#xff0c;寻找匹配的特定…

[Advance] How to debug a program (上)

Tool GDB Examining Memory (data or in machine instructions) You can use the command x (for “examine”) to examine memory in any of several formats, independently of your programs data types. x/nfu addr x addr x n, the repeat count The repeat count is a de…

windows7系统安装更新补丁提示0x80240037错误如何解决,文件的后缀名怎么换?

作者&#xff1a;WYF 我们以 IE11-Windows6.1-KB3008923-x64.msu 补丁为例 1、首先我们把IE11-Windows6.1-KB3008923-x64.msu的后缀名msu改为cab&#xff0c;然后解压&#xff0c;注意解压到一个新的文件夹中&#xff0c;不要在本文件夹中解压&#xff08;例如&#xff1a;可以…

[转]C++中sizeof(struct)怎么计算?

版权属于原作者&#xff0c;我只是排版。 1、 sizeof应用在结构上的情况 请看下面的结构&#xff1a; structMyStruct{doubledda1;chardda;inttype;};对结构MyStruct采用sizeof会出现什么结果呢&#xff1f;sizeof(MyStruct)为多少呢&#xff1f;也许你会这样求&#xff1a;siz…

多核电脑的配件(CPU)

cpu CPU&#xff0c;全称中央处理器&#xff0c;既是电脑的指令中枢&#xff0c;也是系统的最高执行单位。 CPU主要负责指令的执行&#xff0c;作为电脑系统的核心组件&#xff0c;在电脑系统中占有举足轻重的地位&#xff0c;是影响电脑系统运算速度的重要部件。 cpu的基本信…

DELPHI怎样编写COM组件

元旦闲来无事,学习一下DELPHI怎样编写COM组件.结果一试才发现问题多多,要么是找不到接口,要么是找不到方法.查了很多资料,发现说的都不清楚.现在把我所学到的和大家分享一下,希望新学的人能少走弯路. 1、什么是COM COM是微软定的一种组件编写的规范,目的是为了实现组件的重用,不…

centos7利用nexus离线搭建局域网pypi源

centos7利用nexus离线搭建局域网pypi源 1、官网下载nexus oss版本 https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.2-02-unix.tar.gz [rootlocalhost bin]# wget https://sonatype-download.global.ssl.fastly.net/reposit…

c++链表的操作

#include <iostream>using namespace std;class Item{public:friend class List;private:Item(int d0){datad;next0;}Item *next;int data;};class List{private:Item *list;Item *endl();public:List(){list NULL;}List(int d){listnew Item(d);}int print();//输出int …

从零搭建nginx服务器

本文开始从零搭建一个nginx网页服务器。 1.最小化安装linux&#xff08;web服务器需要纯净的环境&#xff09; 2.局域网环境&#xff08;环境限制&#xff0c;需要搭建本地包配置环境&#xff09; 3.配置安装nginx环境 1.搭建系统 物理系统:两台浪潮服务器&#xff0c;两台联…

解决wordpress无法离线发布(远程发布)的故障

使用wordpress mu3.0与3.1时&#xff0c;不知道什么原因&#xff0c;只要开户了WORDPRESS的MU选项&#xff0c;Zoundry Raven和Windows Live Writer就无法注册账户成功(之前在Zoundry Raven里建好的账号还能收发&#xff0c;但不能新建)。在Zoundry Raven上表现为&#xff1a;输…

vim最常用快捷键

Vim最常用快捷键 拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy&#xff0c;并粘贴&#xff08;p&#xff09;。 删除当前行 dd , 删除当前行向下的 5 行 5dd 在文件中查找某个单词 [命令行下 /关键字 &#xff0c; 回车 查找 , 输入 n 就是查找下一个 ],查询 hello. 设置文件…

.NET中栈和堆的比较【转自:c#开发园地】

本文转自&#xff1a;C#开发园地 原文翻译的地址&#xff1a;http://www.cnblogs.com/c2303191/articles/1065675.html压栈(入栈)执行方法中的指令.NET中栈和堆的比较1 原文出处&#xff1a; http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM…

修改远程桌面的端口+防火墙设置

作者&#xff1a;WYF 修改远程桌面的端口防火墙设置&#xff08;最详细&#xff09; Windows系统中的远程终端服务是一项功能非常强大的服务&#xff0c;其默认的端口号3389很容易成为入侵者长驻主机的通道&#xff0c;使用户电脑成为通常称为的“肉鸡”&#xff0c;受入侵者远…

ppp和chap的区别

PAP和CHAP协议是目前的在PPP(MODEM或ADSL拨号)中普遍使用的认证协议&#xff0c;CHAP在RFC1994中定义&#xff0c;是一种挑战响应式协议&#xff0c;双方共享的口令信息不用在通信中传输&#xff1b;PAP在RFC1334中定义&#xff0c;是一种简单的明文用户名/口令认证方式。 2. P…

keepalived高可用+nginx负载均衡

keepalived高可用nginx负载均衡 1、IP地址规划 hostnameip说明KN0110.4.7.30keepalived MASTER节点 nginx负载均衡器KN0210.4.7.31keepalived BACKUP节点 nginx负载均衡器WEB0110.4.7.24web01节点WEB0210.4.7.25web02节点 2、关闭防火墙&#xff0c;selinux&#xff0c;并安装…