zoukankan      html  css  js  c++  java
  • 【shell】各种括号()、(())、[]、[[]]、{}的使用

    圆括号

    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表示

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

    image

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

    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

    ⑤多命令执行

    image

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


  • 相关阅读:
    相机中白平衡的算法模拟实现
    双边滤波算法的简易实现bilateralFilter
    图像处理卷积算法实现
    最快的3x3中值模糊
    黑米手机抢购软件通杀破解补丁
    分享一款12306购票软件
    快速堆栈模糊算法
    大数据(1)---大数据及HDFS简述
    springboot自动装配(3)---条件注解@Conditional
    随机瓜分百万红包
  • 原文地址:https://www.cnblogs.com/OliverQin/p/10286256.html
Copyright © 2011-2022 走看看