zoukankan      html  css  js  c++  java
  • [ Shell入门教程 ] shell字符串基本操作

        shell脚本中一切变量皆字符串,所以必须掌握字符串的常用处理方法。比如获取字符串长度、获取字符串指定位置字符、替换字符串中的指定字符或者删除某些字符等操作。

    1、字符串操作列表

    (1)var=value,变量定义

    $ var="Shell"

    (2)${var},变量取值

    $ var="Shell"
    $ echo ${var}
    Shell

    (3)$#var},获取变量长度

    $ var="Shell"
    $ echo ${#var}
    5

    (4)${var:pos} ,获取变量var从指定pos位置开始到结束的字符串

    $ var="Hello World"
    $ echo ${var:6}
    World

    (5)${var:pos:length},获取变量var从指定pos位置开始提取长度为length的字符串

    $ var="Hello World"
    $ echo ${var:0:5}
    Hello

    (6)${var#substring},表示从变量var的起始位置删除最短匹配$substring的字符串 

    $ var="/home/oracle/script.sh"
    $ echo ${var#*/}
    home/oracle/script.sh

    (7)${var##substring},表示从变量var的起始位置 删除最长匹配$substring的字符串

    $ var="/home/oracle/script.sh"
    $ echo ${var##*/}
    script.sh

    (8)${var%substring},表示从变量var的结束位置开始删除最短匹配$substring的字符串

    $ var="/home/oracle/script.sh"
    $ echo ${var%/*}
    /home/oracle

    (9)${var%%substring},表示从变量var的结束位置开始删除最长匹配$substring的字符串

    $ var="root/home/oracle/script.sh"
    $ echo ${var%%/*}
    root

    (10)${var/substring/replace_str},表示使用$replace_str来代替从变量var开始位置第一个匹配到的$substring 

    $ var="/oracle/oracle/script.sh"
    $ echo ${var/oracle/opt}
    /opt/oracle/script.sh

    (11)${var//substring/replacement},表示使用$replacement代替所有匹配的$substring

    $ var="/oracle/oracle/script.sh"
    $ echo ${var//oracle/opt}
    /opt/opt/script.sh

    (12)${var/#substring/replace_str},表示如果变量var的前缀匹配$substring, 那么就用$replace_str来代替匹配到的$substring。必须是第一个字符开始就满足匹配条件。

    $ var="oracle/oracle/script.sh"
    $ echo ${var/#oracle/opt}
    opt/oracle/script.sh

    (13)${var/%substring/replace_str} ,表示如果$string的后缀匹配$substring, 那么就用$replace_str来代替匹配到的$substring。必须是结尾部分满足匹配条件。

    $ var="/oracle/oracle/script.sh"
    $ echo ${var/%sh/txt}
    /oracle/oracle/script.txt

         说明:(1)substring可以是正则表达式;(2)${string#substring}与${string%substring}是从开始还是结尾开始匹配总是容易混淆,可以这么理解,注释符#总是在前面,#号是从前面开始匹配的。

    典型操作实例

    (1)判断输入字符串是否全部为数字

    #!/bin/bash
    
    VAR1="AaBb1234"
    VAR2="123456"
    VAR3="123 456"
    [[ -z "${VAR1//[0-9]/}" ]] && printf "VAR1 all number
    " || printf "VAR1 not all number
    "  # VAR1 not all number
    [[ -z "${VAR2//[0-9]/}" ]] && printf "VAR2 all number
    " || printf "VAR2 not all number
    "  # VAR2 all number
    [[ -z "${VAR3//[0-9]/}" ]] && printf "VAR3 all number
    " || printf "VAR3 not all number
    "  # VAR3 not all number

    2、字符串判断和替换

      字符串的判断和替换表达式有很多,但是记住var=${str:-expr}这个最常用的表达式就够了。var=${str:-expr}表达式含义为假设str变量为设置或者为空,则将expr值赋值给var变量。实例如下

    $ var=${str:-"hello"} #str变量为设置
    $ echo $var
    hello
    $ str="" #str变量值为空
    $ var=${str:-"hello"}
    $ echo $var
    hello
    $ str="hi" #str变量值为hi
    $ var=${str:-"hello"}
    $ echo $var
    hi

    实例   

    (1)如果变量没有设置值,指定默认值No

    #!/bin/bash
    
    read -p "Please check the parameters and input Yes or No continue.[Deafult:Yes]:" YN
    
    YN=${YN:-"No"}
    
    [[ "X${YN}" == "XNo" ]] && printf "No
    " || printf "Yes
    " #No

     (2)判断字符串的长度,如果不为指定长度,提示错误信息

    #!/bin/bash
    
    telphone_num="13112341234"
    [[ ${#telphone_num} != 11 ]] && printf "Bad number
    " || printf "Good number
    " #output-> Good number
    
    

     (3)删除字符串中的大写字符

    $ VAR="ABC123"
    $ VAR=$(sed 's/^[A-Z]*//g' <<<${VAR})
    $ echo $VAR
    123

     

  • 相关阅读:
    Java的mybatis随笔
    通过字节输入输出流,对标识文件读写,并按规定输出
    Java中异常的处理以及自定义异常,抛出异常到方法调用栈底层
    Java接口实现传参
    类的高级概念
    Java面向对象特征之封装
    Java中的方法(形参及实参)return返回类型
    Java中的数组添加,数组相关代码
    并发思考-actor和thread那个好点?
    TensorFlow实现线性回归模型代码
  • 原文地址:https://www.cnblogs.com/linyfeng/p/7352569.html
Copyright © 2011-2022 走看看