• shell变量扩展技巧


    SHELL中有一些变量扩展的技巧,做下归纳总结

    1、取字符串slice
    规则一:${变量名:位置起点}
    含义:由指定的位置起点开始,截取子字符串到字符串结束
    例如:

    var="/etc/passwd"
    A=${var:5}
    echo $A
    passwd

    规则二:${变量名:位置起点:长度}
    含义:由指定的位置起点开始,截取指定长度的字符串
    例如:

    var="/etc/passwd"
    A=${var:1:3}
    echo $A
    
    etc

    注意:位置起点是从0开始起算的。

    例如:

    var="/etc/passwd"
    A=${var:0:4}
    echo $A
    
    /etc

    2、取部分位置参数
    命令行参数:$0表示命令本身,$1表示第一个参数,$2表示第二个参数,依此类推,$@表示所有的参数
    位置参数有:$0、$1、$2、$@
    规则一:${@:起点}
    含义:表示由起点开始,取得后面所有的位置参数
    例如:position.sh

    #!/bin/bash
    #显示命令本身
    echo $0
    echo ${@:1}
    
    #执行:
    
    chmod  +x  position.sh
    ./position.sh  1 2 3 4 5 
    
    #结果:
    
    ./position.sh
    1 2 3 4 5

    规则二:${@:起点:个数}

    含义:表示由起点开始,取得指定个数的位置参数
    例如:position2.sh

    #!/bin/bash
    echo ${@:3:2}
    chmod +x position2.sh ./position2.sh 1 2 3 4 5 34

    3、计算字符串长度
    规则:${#变量名称}
    含义:表示返回变量名称的字符串长度
    例如:

    string="/etc"
    echo ${#string}
    
    #执行结果:
    
    4


    4、对比样式
    规则一:${变量#样式}
    含义:表示由变量值的最左边开始与样式进行对比,删除"最短相符合的字符串"
    例一:

    string="/etc/sysconfig/syslog"
    echo ${string#/*/}
    
    #执行结果:
    
    sysconfig/syslog

    例二:

    string="//etc/sysconfig/syslog"
    echo ${string#/*/}
    
    #执行结果:
    
    etc/sysconfig/syslog

    说明:样式/*/,表示一对斜线之间有字符串(含空字符串),就对比符合

    规则二:${变量##样式}
    含义:表示由变量值的最左边开始与样式进行对比,删除"最长相符合的字符串"
    例:

    string="/etc/sysconfig/syslog"
    echo ${string##/*/}
    
    #执行结果:
    
    syslog

    规则三:${变量%样式}
    含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最短相符的字符串"
    例:

    string="/etc/sysconfig/syslog"
    echo ${string%/*}
    
    #执行结果:
    
    /etc/sysconfig

    规则四:${变量%%样式}
    含义:表示由变量值的最右边或最后边开始与样式进行对比,删除"最长相符的字符串"
    例一:

    string="www.baidu.com"
    echo ${string%%.*}
    
    #执行结果:
    
    www

    4、替换或删除部分字符串
    规则一:${变量/样式/替换字符串}
    含义:如果变量中有符合样式的字符串,则使用替换字符串替代,只替换第一个符合样式的字符串
    例:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string/:/,}
    
    #执行结果:
    
    ftp,x:14:50:FTPUser:/var/ftp:/sbin/nologin

    规则二:${变量//样式/替换字符串}
    含义:如果变量中有符合样式的字符串,则使用替换字符串替代,替换全部符合样式的字符串
    例如:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string//:/,}
    
    #执行结果:
    
    ftp,x,14,50,FTPUser,/var/ftp,/sbin/nologin

    5、把符合样式的字符串删除
    规则一:${变量/样式/}
    含义:删除符合样式的第一个字符串
    例:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string/:/}
    
    #执行结果:
    
    ftpx:14:50:FTPUser:/var/ftp:/sbin/nologin

    规则二:${变量//样式/}
    含义:删除符合样式的所有字符串
    例:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string//:/}
    
    #执行结果:
    
    ftpx1450FTPUser/var/ftp/sbin/nologin

    6、要求样式在字符串开始或结尾
    在对比样式时,在样式前加上"#"号,表示该样式要出现在变量值的开头才算符合
    在对比样式时,在样式前加上"%"号,表示该样式要出现在变量值的结尾才算符合
    例一:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string/#ftp/}
    
    #执行结果:
    
    :x:14:50:FTPUser:/var/ftp:/sbin/nologin

    例二:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string/#:/}

    执行结果:是个空值,没有在字符串开头找到":"冒号

    例三:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string/%nologin/bash}
    
    #执行结果:
    
    ftp:x:14:50:FTPUser:/var/ftp:/sbin/bash

    例四:

    string="ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin"
    echo ${string/%sbin/bin}

    执行结果:是个空值,没有在变量值结尾找到匹配的样式


    7、取变量名称列表
    规则:${!开头字符串@}${!开头字符串*}
    含义:把所有以指定字符串开头的变量名列出,各变量之间按空格分开
    例:

    syslog="syslog"
    dir="/etc/sysconfig/"
    dirfile="$dir/$syslog"
    echo ${!di@}
    
    #执行结果:
    
    dir  dirfile


    8、取数组索引列表
    规则:${!数组变量[@]}${!数组变量[*]}
    含义:把数组变量所有的索引列出,各索引值之间用空格符分开
    例一:

    filelist=(/etc/passwd  /etc/issue  /etc/sysconfig/syslog)
    echo ${!filelist[@]}
    
    #执行结果:
    
    01 2

    例二:

    filelist=(/etc/passwd  /etc/issue  /etc/sysconfig/syslog)
    for  index  in ${!filelist[@]}
    do 
           echo "index  $index:${filelist[$index]}"
    done
    
    #执行结果:
    
    index  0:/etc/passwd
    index  1:/etc/issue
    index  2:/etc/sysconfig/syslog
  • 相关阅读:
    Mysql根据字段汉字首字母排序
    Springboot学习—CommandLineRunner接口(转载)
    JavaWeb—Nginx介绍(转载)
    linux下后台启动springboot项目(转载)
    Springboot入门5-项目打包部署(转载)
    Linux学习—redis安装配置及远程连接
    Linux学习—maven安装
    Linux学习—mysql安装配置及远程连接
    Linux学习—yum命令(转载)
    Linux学习—rpm包管理
  • 原文地址:https://www.cnblogs.com/nigang/p/3613209.html
Copyright © 2020-2023  润新知