圆括号

1.单圆括号()

①命令组,括号中的命令将会开启一个子shell独立运行;括号中以分号连接,最后一个命令不需要;各命令和括号无需空格

Linux:/qins # (var=1;echo $var)

1

②命令替换,等同于`cmd`,shell将会执行$(cmd)中的命令,将其输出放到原来的命令中

Linux:/qins # echo $(date +%Y-%m-%d)

2019-01-17

③定义数组

Linux:/qins # a=(1 2 3)

2.双圆括号(())

①整数扩展。这种运算支持整数型的,但不支持浮点型的

Linux:/qins # echo $((2.1+3))

-bash: 2.1+3: syntax error: invalid arithmetic operator (error token is ".1+3")

Linux:/qins # echo $((2+3))

5

②跨进制运算

进制转换例子:十六进制2AF5(10~15依次对应了A、B、C、D、E、F)

用竖式计算: 2AF5换算成10进制:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2 = 2560
第3位: 2 * 16^3 = 8192 +
-------------------------------------
10997
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997

Linux:/qins # echo $((16#2af5))

10997

说明:16#2af5表示16进制的2af5

③重定义变量值

Linux:/qins # a=5;((a--));echo $a

4

④用于算术用运算比较

Linux:/qins # for((i=1;i<=5;i++));

> do

> echo $i

> done

1

2

3

4

5

3.中括号[]

①bash的内部命令,[和test是等同的。进行字符串比较,使用==与!=,整数比较使用-gt,-eq这种形式,[]中的逻辑与和逻辑或使用-a与-o表示

括号两边都有空格,字符与等号==之间需要空格

②引用数组中每个元素的编号

Linux:/qins # a=(1 2 3)

Linux:/qins # echo ${a[0]}

1

4.双中括号[[]]

if [ $a -ne 1] && [ $a != 2 ]

可以写成

if [[ $a != 1 && $a != 2 ]]

双括号比[]更通用

5.大括号

①表达变量的值

Linux:/qins # a=2

Linux:/qins # echo $ab

Linux:/qins # echo ${a}b

2b

当表达式的值存在歧义的时候需要加上{}以便区分;

②批量操作

Linux:/qinys/oliver # touch {a,b,c,d}.dat

Linux:/qinys/oliver # ls

a.dat  b.dat  c.dat  d.dat

批量创建了文件

③扩展顺序

Linux:/qinys/oliver # touch {1..5}file.dat
Linux:/qinys/oliver # ls -lrt
total 0
-rw-r--r-- 1 root root 0 Jan 17 21:01 5file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 4file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 3file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 2file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 1file.dat

按顺序批量创建了文件

④特殊替换:${var:-string},${var:+string},${var:=string},${var:?string}

说明:unset a表示将a被赋予的值清空

${var:-string},当var为空,则替换为空,var非空,则使用原值

Linux:/qinys/oliver # a=3

Linux:/qinys/oliver # echo ${a:-23}

3

Linux:/qinys/oliver # unset a

Linux:/qinys/oliver # echo ${a:-23}

23

${var:+string}与${var:-string}刚好相反

Linux:/qinys/oliver # a=3

Linux:/qinys/oliver # echo ${a:+23}

23

Linux:/qinys/oliver # unset a

Linux:/qinys/oliver # echo ${a:+23}

${var:=string}与${var:-string}功能类似,唯一不同的是,当var为空的时候,是将string赋予var

Linux:/qinys/oliver # a=3

Linux:/qinys/oliver # echo ${a:=23}

3

Linux:/qinys/oliver # unset a

Linux:/qinys/oliver # echo ${a:=23}

23

${var:?string}与${var:-string}功能类似,唯一不同的是,当var为空的时候,将错误输出并退出

Linux:/qinys/oliver # a=10

Linux:/qinys/oliver # echo ${a:?99}

10

Linux:/qinys/oliver # unset a

Linux:/qinys/oliver # echo ${a:?99}

-bash: a: 99

⑤多命令执行

前后必须有空格,并且每个命令结束都有分号

【shell】各种括号()、(())、[]、[[]]、{}的使用的更多相关文章

  1. [转帖]详解shell脚本括号区别--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

    详解shell脚本括号区别--$().$「 」.$「 」 .$(()) .「 」 .「[ 」] 原创 波波说运维 2019-07-31 00:01:00 https://www.toutiao.com ...

  2. linux shell “(())” 双括号运算符使用

    导读 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格 ...

  3. linux shell (()) 双括号运算符使用

    估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(( ...

  4. Shell—各种括号的用法

    括号的种类 小括号,圆括号 ( ) 中括号,方括号 [ ] 大括号.花括号 { } 一.单小括号 () 1.另开命令组——小括号中的命令将会新开启一个子shell独立顺序运行,所以括号中的变量不能够被 ...

  5. 详解shell脚本括号区别--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

    概述 很多时候我们在写shell脚本的时候总会碰到不同的括号,那么这些不同的括号有什么区别呢? $() 用于命令交换 说明:平时脚本用的``符号也是用于命令交换的哦,和$() 的操作是一样的 ${ } ...

  6. shell 中小括号,中括号,大括号的区别

    一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  7. Shell 双括号概述

    1. 比较两个数的大小 #!/bin/bash ## 定义变量 a= b= ## 方法1,一个方括号,需要转义 if [ $a \> $b ];then echo "方法1:yes&q ...

  8. Linux shell运算符

    双引号 --使用双引号可以引用除了字符$,`(单反号),\(反斜杠)外的任意字符或者字符串 --echo "参数的个数是$#" 单引号 --单引号与双引号类似,不同的是shell会 ...

  9. Shell编程基础教程2--变量和运算符

    2.变量和运算符 2.1.变量的类型 本地变量:环境变量:变量替换(显示变量):位置变量:标准变量:特殊变量: 2.2.本地变量 本地变量在用户现在的shell生命周期的脚本中使用 在命令行, LOC ...

  10. linux第4天 shell socket

    $[ ] 表示形式告诉shell对方括号中的表达式求值 echo $[3+9] 赋值运算符 =,+=,-=,*=,/=,%=,&=,^=.|=,<<=,>>= let ...

随机推荐

  1. Verilog 加法器和减法器(7)

    在计算机中浮点数 表示通常采用IEEE754规定的格式,具体参考以下文章. https://www.cnblogs.com/mikewolf2002/p/10095995.html 下面我们在Veri ...

  2. 样条之CatmullRom

    所谓样条曲线是指给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制,一般可分为插值样条和逼近样条两种,插值样条通常用于数字化绘图或动画的设计,逼近样条一般用来构造物体的表面.CatmullR ...

  3. QT TCP网络编程

    首先介绍一下TCP:(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.相比而言UDP,就是开放式.无连接.不可靠的传输层 ...

  4. Linux 动态链接库(.so)的使用

    1. 背景 库:就是已经编写好的,后续可以直接使用的代码. c++静态库:会合入到最终生成的程序,使得结果文件比较大.优点是不再有任何依赖. c++动态库:动态库,一个文件可以多个代码同时使用内存中只 ...

  5. PPPOE数据包转换及SharpPcap应用

    在最近写的一个程序中需要用到Sniffer功能,但由于通过.net自身的Socket做出来的Sniffer不能达到实际应用的要求(如不能监听WIFI数据包)所以找到了WinPCAP的.NET库Shar ...

  6. 推荐朋友 - LintCode

    拼多多笔试第三题 除了题目具体方法值得注意外,数据的输入格外注意 题目 描述 给n个人的朋友名单,告诉你user,请找出user最可能认识的人.(他和user有最多的共同好友且他不是user的朋友) ...

  7. android 微信听筒无声

    Dual talk项目sim卡插在卡2时.微信听筒无声: 第三方APP在听筒接听语音时会固定去设audio_mode为incall,而不会去管以下是sim1还是sim2在位. 而speechdrive ...

  8. Centos curl ssl 替换 NSS 为 OpenSSL

    参考:https://www.latoooo.com/xia_zhe_teng/368.htm 我的系统版本是 Centos 7 64位.为了方便,先安装常用的开发环境. yum groupinsta ...

  9. [Functional Programming] Introduction to State, thinking in State

    Recently, I am learning Working with ADT. Got some extra thought about State Monad. Basiclly how to ...

  10. Hadoop-2.4.1学习之edits和fsimage查看器

    在hadoop中edits和fsimage是两个至关关键的文件.当中edits负责保存自最新检查点后命名空间的变化.起着日志的作用,而fsimage则保存了最新的检查点信息.这个两个文件里的内容使用普 ...