Linux之shell中的大括号、中括号、小括号的使用详解

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

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

一、shell中的大括号 "{}"的用法:

1、常用方法

[root@cn21 ~]# var=login
[root@cn21 ~]# echo "aa$var"
aalogin
[root@cn21 ~]# echo "$varaa"[root@cn21 ~]# echo "$var aa"
login aa
[root@cn21 ~]# echo "${var}aa" #注意此时大括号作用
loginaa

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

2、{1,2,3}和{1…n}

[root@cn21 test]# touch {1..5}.txt
[root@cn21 test]# ll
总用量 52
-rw-r--r--  1 root    root   0 510 06:41 1.txt
-rw-r--r--  1 root    root   0 510 06:41 2.txt
-rw-r--r--  1 root    root   0 510 06:41 3.txt
-rw-r--r--  1 root    root   0 510 06:41 4.txt
-rw-r--r--  1 root    root   0 510 06:41 5.txt[root@cn21 test]# touch {4,5,6,7,8}.tx
[root@cn21 test]# ls |grep tx$
4.tx
5.tx
6.tx
7.tx
8.tx

二、shell中的中括号"[ ]"的用法:

1、单中括号 []

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

[root@cn21 test]# if test -d /test;then echo "hello"
> fi
hello
[root@cn21 test]# if [ -d /test ];then echo "hello"  fi
hello
#test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较
#整数比较只能使用-eq,-gt这种形式
#无论是字符串比较还是整数比较都不支持大于号小于号。
[root@cn21 test]# cat /etc/passwd|grep -E '^[rotgm]'
root:x:0:0:root:/root:/bin/bash
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
#字符范围。用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。[root@cn21 test]# array1=(zhangsan lisi wang5 maliu)
[root@cn21 test]# echo ${array1[2]}  #在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号
wang5

2、双中括号[[ ]]

双方括号里面的表达式使用了test命令中采用的标准字符串比较。但它提供了test命令未提供的另一个特性——模式匹配。

[root@cn21 test]# user=test
[root@cn21 test]# if [[ $user == t* ]];then echo "hello"; fi  
hello
[root@cn21 test]# # [[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。# 支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]], 结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。# 使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。# bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

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

1、() 数组赋值

[root@cn21 test]# array1=(zhangsan lisi wang5 maliu)
[root@cn21 test]# echo ${array1[2]}  #在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号
wang5

2、() 子shell赋值

[root@cn21 test]# var=12345
[root@cn21 test]# (var=local;echo $var)
local
[root@cn21 test]# echo $var
12345

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

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

[root@cn21 test]# (echo "a";echo "b")|awk '{print NR,$0}'
1 a
2 b

4、$()用法

[root@cn21 test]# echo $(cat /etc/hosts)      #引用命令
dd d d ddfafaffaf drrrrrtttt deeeeeeef ddddddddd dddddde

5、(())用法

[root@cn21 test]# echo $((2+3))
5
[root@cn21 test]# echo $((2*3))
6
[root@cn21 test]# echo $((2/3))
0
[root@cn21 test]# echo $((4/3))
1
[root@cn21 test]# echo $((4%3))
1[root@cn21 test]# echo $((25>4 ? 2:3))
2
[root@cn21 test]# echo $((25>4 ? 5:3))
5

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

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

相关文章

利用Visio 2007图形化项目进度和项目跟踪

课程类型 Microsoft Office Visio 2007 视频时长 120分钟 播放 课程资料 课程简介&#xff1a; 在进行项目管理时&#xff0c;项目经理将使用Microsoft Project对项目进行规划、资源分配、成本控制和项目状态跟踪。但是&#xff0c;项目中的数据如何能够通过更图形化的方式呈…

初学者看看PHP explode() 函数 第6篇

PHP explode() 函数 定义和用法 explode() 函数把字符串分割为数组。 语法 explode(separator,string,limit)参数 描述 separator 必需。规定在哪里分割字符串。 string 必需。要分割的字符串。 limit 可选。规定所返回的数组元素的最大数目。 说明 本函数返回由字符串组成的…

linux 备份文件滚动删除

linux 备份文件滚动删除 摘要&#xff1a;在实际的生产环境中&#xff0c;需要我们不断的备份文件&#xff0c;但是受到磁盘空间的影响&#xff0c;只能保留最新的备份文件。 1、只保存最近n天的文件 [rootcn01 test1]# ll 总用量 0 drwxr-xr-x 2 root root 6 2月 14 2020 …

jQuery常用方法总结(转)

jQuery 常见操作实现方式 $("标签名") //取html元素 document.getElementsByTagName("") $("#ID") //取单个控件document.getElementById("") $("div #ID") //取某个控件中 控件 $("#ID #ID") // 通过控件ID取其中…

K8s集群部署(最新版)

K8s集群部署&#xff08;最新版&#xff09; 1、部署k8s的两种方式&#xff1a; 本次实验采用kubeadm工具来部署Kubernetes集群。 Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 2、环境准备 服务器要求&a…

VRP 的发展

随着网络技术和应用的飞速发展&#xff0c;VRP 平台在处理机制、业务能力、产品支持等方面也在持续演进。由于平时也接触到了这几个版本的平台&#xff0c;也常不知道所以然&#xff0c;特找了些资料整理了一下。主要列举了VRP 发展历程中的几个主要版本。 VRP 发展历程 各版本…

Harbor私有仓库部署(最新)

Harbor私有仓库部署&#xff08;最新&#xff09; [rootK8s-Master ~]#yum install wget -y [rootK8s-Master ~]#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo #docker-ce国内yum源 [rootK8s-Master ~]#yum -y…

K8S使用habor作为私有仓库

K8S使用habor作为私有仓库 1、修改每个node上的docker认证仓库 # 将每个node节点上的docker同样需要配置可信任仓库 vi /etc/docker/daemon.json #修改为 { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "insecure-registries&qu…

桌面虚拟化之用户行为审计

桌面虚拟化通过统一的远程访问协议&#xff08;如PCoIP、RDP&#xff09;来进行桌面的远程访问。这样的好处是显而易见的。因为只提供一种方式进行接入&#xff0c;所以IT人员只要做好一条防线的保护&#xff0c;用户的操作及行为都可以尽收眼底了。这就好比古城堡一样&#xf…

K8s集群离线部署

K8s集群离线部署&#xff08;最新版&#xff09; 1、部署k8s的两种方式&#xff1a; 本次实验采用的部署Kubernetes方式&#xff1a; kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 2、环境准备 …

渲染优化 lock unlock

昨天参加了公司组织的nvdia的培训&#xff0c;讲了一些关于D3D的优化和可能的瓶颈所在&#xff0c;具体的条目就不说了&#xff0c;这里说一些关于资源的Lock和Unlock&#xff0c;以及我在GL下的测试。 老师讲到向Draw*这类函数是将其指令放入指令队列&#xff0c;带填满后或者…

linux 共享盘cifs、nfs

linux 共享盘cifs、nfs 1、安装并启用nfs服务 #安装nfs并启用相关服务 yum install -y rpcbind nfs-utils systemctl start rpcbind systemctl start nfs-server#创建本地nfs文件夹 mkdir -p /data/nfs/d{1..4} [rootlocalhost ~]# vim /etc/exports /data/nfs/d1 *(rw,sync…

选出你最喜欢的Linux操作系统吧

做一份调查&#xff0c;你最喜欢的LINUX版本是什么&#xff1f;有何优点&#xff1f; 为什么使用它&#xff1f;说出一二个优点哈。Redhat/Fedora SUSE Debian Mandriva Ubuntu RedFlag Asianux CentOS Gentoo Others希望大家能发表自己的意见~~说出各自的优点。转载于:https:…

linux 运维最常用命令大全

linux 运维最常用命令大全 1、帮助命令 man&#xff1a;全拼manual&#xff0c;用来查看系统中自带的各种参考手册。 help&#xff1a;用于显示shell内部命令的帮助信息。 2、文件和目录操作命令 ls&#xff1a;全拼list&#xff0c;列出目录的内容及其内容属性信息。 cd…

PHP学习——定界符格式引起的错误

下面是一个错误的代码&#xff0c;能看出哪里出错了么&#xff1f;&#xff1f;对于我这个初学者什么都是蒙蒙懂的&#xff0c;真的无从下手&#xff0c;但是真的要自己尝试了才知道哪里错了&#xff0c;书和教程都不会告诉我哪里错了 错误代码&#xff1a;Parse error: syntax…

K8S初学命令

K8S初学命令 1、pod常用命令 作用命令查看pod节点kubectl get pod查看所有pod节点kubectl get pods -A查看pod节点详情kubectl get pod -o wide查看所有名称空间下的podkubectl get pod --all-namespaces根据yaml文件创建podkubectl apply -f <文件名称>根据yaml文件删…

SBO错误提示总帐科目缺失解决方法

检查&#xff1a; 管理-定义-财务-总帐科目确认的收入标签中的应收和收入科目是否设置&#xff1b; 库存标签中的总帐科目设置是否完全&#xff1b; 如果没问题再检查业务伙伴主数据的应收科目是否设置&#xff1b; 如果有舍入还要检查总帐科目确认中的舍入科目是否设置。 如果…

k8s常用命令总结

k8s常用命令 #查看所有namespace的pods运行情况 kubectl get pods --all-namespaces #查看具体pods&#xff0c;记得后边跟namespace名字哦 kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr -n kube-system # 查看pods具体信息 kubectl get pods -o wide kubernete…

iphone开发之私有库private frameworks

https://github.com/kennytm/iphone-private-frameworks Headers for private frameworks or undocumented interfaces of iPhoneOS 3.x or before (4.x is not supported yet). class dump出来的头文件&#xff0c;包含apple没有开放的json库&#xff0c;SpringBoard&#xf…