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

     

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/linyfeng/p/7352569.html
Copyright © 2011-2022 走看看