• shell中各种括号的用法


    一、单小括号()
    1、将某个命令的返回值作为某个变量的值进行传递

    #!/bin/bash
    USER=$(whoami)
    echo $USER
    
    [root@jump ~]# for i in $(seq 0 4);do echo $i;done
    0
    1
    2
    3
    4

    2、用于初始化数组

    array=(1 2 3 4)

    二、双小括号(())
    1、整数运算(不支持浮点型)

    [root@jump ~]# echo $((1+1))
    2

    2、进制转换

    16进制转10进制
    [root@jump ~]# echo $((16#5f))
    95

    3、重新定义变量的值

    [root@jump ~]# for ((i=0;i<5;i++));do echo $i;done
    0
    1
    2
    3
    4

    4、算数比较

    [root@jump ~]# i=5;if (($i>1));then echo "yes";fi
    yes

    三、单中括号[...]

    算数比较
    [root@jump ~]# i=5;if [ $i -ge 1 ];then echo "yes";fi
    yes

    四、双中括号[[...]]

    支持字符串模式匹配,甚至支持正则表达式;使用[[...]]条件判断,能够防止脚本中的许多逻辑错误,比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错;
    [root@jump ~]# if [[ hello==hell? ]];then echo "yes";fi
    yes

    五、大括号{...}

    1、常规用法

    for i in {1..4};do echo $i;done   #打印1到4的数字;
    touch {1..4}.txt  #创建1.txt 2.txt 3.txt 4.txt文件
    touch {1,4}.txt   #创建1.txt 4.txt文件

    2、变量替换

    2.1、${var:-string}和${var:=string}
            如果变量var为空,则将string赋值给${var:-string}和${var:=string};

    [root@jump ~]# cat aaa.sh
    #!/bin/bash
    NUM=$1
    
    if [ ${NUM:="1"} -gt 10 ];then
        echo "比10大"
    else
        echo "比10小"
    fi
    
    echo "输入值为:"${NUM:-"1"}
    [root@jump ~]# bash aaa.sh
    比10小
    输入值为:1
    [root@jump ~]# bash aaa.sh 55
    比10大
    输入值为:55

    2.2、${var:+string}
      变量var不为空的时候,才将string赋值给${var:+string};
    2.3、${var:?string}
      变量为空的时候,则把string输出到标准错误中,并从脚本中退出;

    [root@jump ~]# cat str.sh
    #!/bin/bash
    NUM=$1
    if [ ${NUM:?"1"} -gt 10 ];then
        echo "比10大"
    else
        echo "比10小"
    fi
    [root@jump ~]# bash str.sh
    str.sh:行3: NUM: 1
    [root@jump ~]# bash str.sh 3
    比10小

    2.4、模式匹配

    # 是去掉左边
    % 是去掉右边
    #和%中的单一符号是最小匹配,两个相同符号是最大匹配。
    [root@jump ~]# var="hello word"
    [root@jump ~]# echo $var
    hello word
    [root@jump ~]# echo ${var%o*d}
    hello w
    [root@jump ~]# echo ${var%%o*d}
    hell
    [root@jump ~]# echo ${var#?e}
    llo word
    [root@jump ~]# echo ${var##?e}
    llo word
    [root@jump ~]# echo ${var##*e}
    llo word
    [root@jump ~]# echo ${var##*s}
    hello word
    [root@jump ~]# echo ${var##*d}
    
    [root@jump ~]# echo ${var##*r}
    d
    [root@jump ~]# echo ${var##hello}
    word

      以上操作都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示仅与一个任意字符匹配,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符。

    2.5、字符串的提取和替换

    [root@jump ~]# var=/data/nginx
    [root@jump ~]# echo $var
    /data/nginx
    [root@jump ~]# echo ${var:5}
    /nginx
    [root@jump ~]# echo ${var: -5}
    nginx
    [root@jump ~]# echo ${var: -6}
    /nginx
    [root@jump ~]# echo ${var:(-6)}
    /nginx
    [root@jump ~]# echo ${var:1:4}
    data
    [root@jump ~]# echo ${var/t/a}
    /daaa/nginx
    [root@jump ~]# echo ${var/a/o}
    /dota/nginx
    [root@jump ~]# echo ${var//a/o}
    /doto/nginx
  • 相关阅读:
    深入理解JavaScript系列(24):JavaScript与DOM(下)
    大叔手记(20):ASP.NET MVC中使用jQuery时的浏览器缓存问题
    深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP
    深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP
    深入理解JavaScript系列(23):JavaScript与DOM(上)——也适用于新手
    深入理解JavaScript系列(25):设计模式之单例模式
    深入理解JavaScript系列(26):设计模式之构造函数模式
    ASP.NET GridView中使用搜索框(SearchableGridView)
    WPF中的图表设计器 – 1
    使用URL Routing进行数据分页
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/15109048.html
Copyright © 2020-2023  润新知