zoukankan      html  css  js  c++  java
  • shell之小括号、中括号、大括号

    1、Shell中变量的原形:${var}  一串命令的执行(代替变量

    #等价于
    $ var=test 
    $ echo $var 
    test 
    
    #例如,用在这个位置
    $ echo ${var}AA 
    testAA 

    2、命令替换$(cmd) 一串命令的执行(替换命令

    命令替换$(cmd)和符号`cmd`(注意这不是单引号,在美式键盘上,`是ESC下面的那个键)有相同之处

    $ ls 
    a b c 
    $ echo $(ls) 
    a b c 
    $ echo `ls` 
    a b c 

    我们来分析一下命令echo $(ls),以便理解所谓命令替换是什么意思:
    shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令echo $(ls)中的$(ls)位置,即替换了$(ls),再执行echo命令。

    ()和{}都是对一串的命令进行执行,但有所区别:
    A,()只是对一串命令重新开一个子shell进行执行
    B,{}对一串命令在当前shell执行

    3、POSIX标准的扩展计算:$((exp))  用于数学计算(整数的比较和运算

    这种计算是符合C语言的运算符,也就是说只要符合C的运算符都可用在$((exp)),甚至是三目运算符。
    注意:这种扩展计算是整数型的计算,不支持浮点型.若是逻辑判断,表达式exp为真则为1,假则为0。

    $ echo $((3+2)) 
    5 
    $ echo $((3>2)) 
    1 
    $ echo $((25<3 ? 2:3)) 
    3 
    $ echo $var 
    
    $ echo $((var=2+3)) 
    5 
    $ echo $var 
    5 
    $ echo $((var++)) 
    5 
    $ echo $var 
    6 

    4、单中括号 [] 对于转义字符要加 eg:[ ($INT)]

    bash 的内部命令, [ 和 test 是等同的。

    Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。

    因为[ 是Linux内部命令,所以 [ a+b ]之间要有空格。

    5、双中括号[[ ]]   不用加斜杠转义eg: [[ ($INT) ]] 较常用

    [[是 bash 程序语言的关键字。使用[[ ... ]]条件判断结构。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。

    4、5例如:

    if ($i<5)
    if [ $i -lt 5 ]
    if [ $a -ne 1 -a $a != 2 ]
    if [ $a -ne 1] && [ $a != 2 ]
    if [[ $a != 1 && $a != 2 ]]
     
    for i in $(seq 0 4);do echo $i;done
    for i in `seq 0 4`;do echo $i;done
    for ((i=0;i<5;i++));do echo $i;done
    for i in {0..4};do echo $i;done

     https://my.oschina.net/tridays/blog/807162

    最后,推荐使用 [[ 来进行各种判断,这能避免很多错误,比如 $a 为空的情况下,[ $a == 1 ] 就是语法错误,因为 [ 命令拿到的实际上只有 ==1] 三个参数。即:[[]]常用些。 

    $ [ 1 < 2 ]
    zsh: no such file or directory: 2
    #-------------------------------------
    $ [[ 1 < 2 ]] && echo True || echo False
    True

    首先,来看下shell中$与各种括号的结合:

    $( )运行shell命令返回输出

    如$(ls -a)

    $(( )) 算术运算

    如$(($a+$b))

    $[] 算术运算

    如$[$a+$b]

    ${ } 变量调用

    如${$var}

    再来看看单独使用的情况:

    ( ) 正则表达式中可以表示分组,并在后面通过1,2等调用

    [ ] 测试表达式

    [[ ]] 测试表达式

    { }可用于括起整个命令块

    实在是不好记,于是,小林君又反过来总结变量调用、命令调用、测试表达式和算术运算的方法:

    变量调用:

    方法一:${var}

    方法二:$var

    命令调用:

    方法一:`COMMAND`

    方法二:$(COMMAND)

    测试表达式:

    方法一:[ expression ]

    方法二:[[ expression ]]

    方法三:test expression

    算术运算

    方法一:let 算术运算表达式

    let C=$A+$B 这里变量A和B前面的$可以省略

    方法二:$[算术运算表达式]

    C=$[$A+$B]

    方法三:$((算术运算表达式))

    C=$(($A+$B))

    方法四:expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用,遇到乘法的*号还要转义

    C=`expr $A + $B`

    方法五:expr $[算术运算表达式],遇到乘法*号不用转义。

    dd

  • 相关阅读:
    SPU和SKU有什么区别
    Mave手动安装jar包
    maven国内镜像(国内oschina的maven服务器关了)
    用java代码将从数据库中取出的具有父子关系的数据转成json格式
    Oracle中的decode()函数
    Oracle中的instr()函数
    Oracle的nvl
    Oracle保留小数点后两位的几种方法
    【Python】djangorestframework 基于django框架的接口开发
    【MySQL】 GTID使用
  • 原文地址:https://www.cnblogs.com/hanggegege/p/5928870.html
Copyright © 2011-2022 走看看