`
zhangxiong0301
  • 浏览: 352148 次
社区版块
存档分类
最新评论

linux中的各种括号用法

阅读更多

一、小括号,园括号()

  1、单小括号 ()

    ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
    ②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。
    ③用于初始化数组。如:array=(a b c d)
 
 

  2、双小括号 ((  ))

    ①整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。
    ②只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)
    ③单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6
    ④双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。
[python] view plaincopy
 
  1. if ($i<5)  
  2. if [ $i -lt 5 ]  
  3. if [ $a -ne 1 -a $a != 2 ]  
  4. if [ $a -ne 1] && [ $a != 2 ]  
  5. if [[ $a != 1 && $a != 2 ]]  
  6.    
  7. for i in $(seq 0 4);do echo $i;done  
  8. for i in `seq 0 4`;do echo $i;done  
  9. for ((i=0;i<5;i++));do echo $i;done  
  10. for i in {0..4};do echo $i;done  

二)中括号,方括号[]

  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把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

三)大括号、花括号 {}

  1、常规用法。

    ①大括号拓展。(通配(globbing))将对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。第一种:对大括号中的以逗号分割的文件列表进行拓展。如 touch {a,b}.txt 结果为a.txt b.txt。第二种:对大括号中以点点(..)分割的顺序文件列表起拓展作用,如:touch {a..d}.txt 结果为a.txt b.txt c.txt d.txt
[python] view plaincopy
 
  1. bogon:/home/bash # ls {ex1,ex2}.sh  
  2. ex1.sh  ex2.sh  
  3. bogon:/home/bash # ls {ex{1..3},ex4}.sh  
  4. ex1.sh  ex2.sh  ex3.sh  ex4.sh  
  5. bogon:/home/bash # ls {ex[1-3],ex4}.sh  
  6. ex1.sh  ex2.sh  ex3.sh  ex4.sh  
    ②代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。
 
 

   2)几种特殊的替换结构:${var:-string},${var:+string},${var:=string},${var:?string}

      A,${var:-string}和${var:=string}:若变量var为空,则用在命令行中用string来替换${var:-string},否则变量var不为空时,则用变量var的值来替换${var:-string};对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}若var为空时,用string替换${var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。
      B. ${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。(因为变量var此时为空,所以这两种说法是等价的) 
      C,${var:?string}替换规则为:若变量var不为空,则用变量var的值来替换${var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。
      补充扩展:在上面这五种替换结构中string不一定是常值的,可用另外一个变量的值或是一种命令的输出。

  3)四种模式匹配替换结构${var%pattern},${var%%pattern},${var#pattern},${var##pattern}

     第一种模式:${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式
     第二种模式: ${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式
     第三种模式:${variable#pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式
     第四种模式: ${variable##pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式
     这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示零个或一个任意字符,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符
[python] view plaincopy
 
  1. bogon:/home/bash # var=testcase  
  2. bogon:/home/bash # echo $var  
  3. testcase  
  4. bogon:/home/bash # echo ${var%s*e}  
  5. testca  
  6. bogon:/home/bash # echo $var  
  7. testcase  
  8. bogon:/home/bash # echo ${var%%s*e}  
  9. te  
  10. bogon:/home/bash # echo ${var#?e}  
  11. stcase  
  12. bogon:/home/bash # echo ${var##?e}  
  13. stcase  
  14. bogon:/home/bash # echo ${var##*e}  
  15.   
  16. bogon:/home/bash # echo ${var##*s}  
  17. e  
  18. bogon:/home/bash # echo ${var##test}  
  19. case  
分享到:
评论

相关推荐

    简介Linux中cp和mv搭配{,}在shell当中的用法

    那么,在uinx / linux shell命令中是什么意思?起什么作用呢? { } 并没有什么实际的含义,但是却可以作为Brace expansion(大括号扩展或叫做花括号扩展)而经常用于产生各种组个。以下是翻译自 GNU/BASH man page ...

    Linux FTP服务配置

    vsftp的含义就是Very Security Ftp,下面就简要的说一下它的配置和使用方法,通过本文的介绍也希望您能了解在Linux下配置一个网络服务的基本过程  1.相关配置文件  /etc/vsftpd.conf,vsftpd.ftpuser,vsftpd.user_...

    linux应用与开发基础

    本书是将要学习嵌入式或者想要成为linux系统管理人员的基本入门书籍,非常不错 Linux应用与开发基础 目 录 第一章 了解LINUX操作系统.......................................................... 6 1.1 什么是LINUX...

    (二)就业模拟测试题-LINUX应用开发工程师职位

    ) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。...

    Linux服务器配置与管理:Linux字符界面shell使用.pptx

    其中命令名、选项、参数之间使用空格隔开,多余的空格将被忽略,而用方括号括起来的部分表明该项是可省略的,如直接在提示符后面输入命令date,显示当前的日期和时间。下面介绍命令各组成部分的含义和作用。 (1)命令名...

    Linux Shell Map的用法详解

    Map定义: ...与array类似,可以使用括号直接初始化,也可以通过添加的方式来初始化数据,与array不同的是,括号直接初始化时使用的为一个键值对,添加元素时,下标可以不是整数 myMap[my03]=03 myMap[my

    linux使用tcpdump命令监视指定网络数据包的方法

    打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析) 代码如下:tcpdump ‘gateway snup and (port ftp or ftp-data)’ 打印所有源地址或目标地址是本地主机的...

    cmd操作命令和linux命令大全收集

    它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。 4. explorer-------打开资源管理器 5. logoff---------注销命令 6. shutdown-------60秒倒计时关机命令 7. lusrmgr.msc----本机...

    Linux pstree命令用法详解

    Linux pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。 使用权限:所有使用者。 语法pstree...

    跟老男孩学Linux运维:Shell编程实战

    / 554.4 Shell特殊扩展变量的知识与实践 / 60第5章 变量的数值计算实践 / 655.1 算术运算符 / 655.2 双小括号“(())”数值运算命令 / 665.3 let运算命令的用法 / 735.4 expr命令的用法 / 755.5 bc命令的用法 ...

    linux设置服务开机自启动的三种方式

    这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例! 方法1:....终端命令下输入ntsysv 回车;如下图 ...简要说明一下chkconfig命令的使用方法 –list:

    emacs 配置文件

    emacs 配置文件(已经测试适合Windows和Linux),已经...检验设置成功的方法是在“运行”中输入%HOME%会打开设置的文件夹。 2. 把下载的文件放在%HOME%目录中 3. 直接可以绑定快捷键启动,比如:Alt-Ctrl-E 就这么简单。

    LINUX与UNIX SHELL编程指南

    002-使用find和xargs.PDF 003-后台执行命令.PDF 004-文件名置换.PDF 005-shell输入与输出.PDF 006-命令执行顺序.PDF 007-正则表达式.PDF 008-grep家族.PDF 009-AWK介绍.PDF 010-sed 用法介绍.PDF 011-合并与分割.PDF...

    Linux高级bash编程

    使用export命令传递一个变量到一个内嵌awk的脚本中 11-19. 使用getopts命令来读取传递给脚本的选项/参数. 11-20. "Including"一个数据文件 11-21. 一个没什么用的,source自身的脚本 11-22. exec的效果 11-23. 一个...

    最新最全的ChatGPT使用方法大全(充当各种职业人员问答咨询).zip

    当我需要用英语告诉你一些事情时,我会把文字放在大括号内{like this}。我的第一个命令是 pwd 充当英语翻译和改进者 我想让你充当英语翻译员、拼写纠正员和改进员。我会用任何语言与你交谈,你会检测语言,翻译它...

    run-love2d:扩展括号以从编辑器启动LÖVE项目

    经测试可与Windows / Linux一起使用。正在安装从Brackets Extension Manager安装。用法热键默认为“ Ctrl + Shift + L”。 LÖVE将使用当前项目文件夹运行。 确保项目的根文件夹中存在一个main.lua文件。故障排除...

    prove:[证明]

    [prove]是使用方括号括起来的证明验证系统。 目前正在进行中。 安装 在Linux终端中,执行以下步骤: 克隆存储库: $git clone git@github.com:g-regex/prove.git 更改目录: $cd prove 使用调试功能进行编译...

    awk完美参考手册

    详解linux操作系统awk命令的使用,工作原理,以及编程方法的实现

    CommandLine-Calculator:可以接受变量,二进制运算符和括号的计算器,只要它们都用空格分隔即可

    初始等式中可以使用字母字符(az,AZ)。 该程序将要求用户在解决之前进行定义。 计算器无法求解任何变量。 程序将要求用户定义最初键入的所有变量。 所有运算符,操作数和括号必须用空格分隔。 图表

Global site tag (gtag.js) - Google Analytics