• shell字符串相关操作


    获取字符串长度

    string=abc12342341          //等号二边不要有空格  
    echo ${#string}             //结果11  
    expr length $string         //结果11  
    expr "$string" : ".*"       //结果11 分号二边要有空格,
    

    字符串比较

    不等值比较

    在[[]]中支持,在[]中不支持
    只支持大于与小于
    不管是使用[[]]还是使用[],请注意在靠近括号的字符与括号之间要使用空格

    • 实例1 支持小于
    -> # cat -n test.sh
         1	#!/bin/sh
         2	if [[ 133 < 133SP01 ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:23:13] [~/vm8500_Uniview] 
    -> # sh test.sh
    yes
    
    • 实例2 不支持单个中括号
    -> # cat -n test01.sh
         1	#!/bin/sh
         2	if [ "133" < "133SP01" ];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:23:48] [~/vm8500_Uniview] 
    -> # sh test01.sh 
    test01.sh: line 2: 133SP01: No such file or directory
    no
    
    
    • 实例3: 不支持"小于等于"
    -> # cat -n test01.sh 
         1	#!/bin/sh
         2	if [[ "133" <= "133" ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:33:25] [~/vm8500_Uniview] 
    -> # sh test01.sh
    test01.sh: line 2: syntax error in conditional expression
    test01.sh: line 2: syntax error near `"133"'
    test01.sh: line 2: `if [[ "133" <= "133" ]];then'
    root@cenos62-64 [10:33:30] [~/vm8500_Uniview] 
    
    
    • 实例4 支持"大于"
    root@cenos62-64 [10:34:48] [~/vm8500_Uniview] 
    -> # cat -n test01.sh
         1	#!/bin/sh
         2	if [[ "134" > "133" ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:34:50] [~/vm8500_Uniview] 
    -> # sh test01.sh 
    yes
    
    
    • 实例5 不支持"大于等于"
    -> # cat -n test01.sh  
         1	#!/bin/sh
         2	if [[ "134" >= "133" ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:35:09] [~/vm8500_Uniview] 
    -> # sh test01.sh 
    test01.sh: line 2: syntax error in conditional expression
    test01.sh: line 2: syntax error near `"133"'
    test01.sh: line 2: `if [[ "134" >= "133" ]];then'
    
    • 实例6
    -> # cat -n test01.sh  
         1	#!/bin/sh
         2	if [[ "133a" > "133" ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:40:00] [~/vm8500_Uniview] 
    -> # sh test01.sh 
    yes
    root@cenos62-64 [10:40:02] [~/vm8500_Uniview] 
    

    等值比较

    • 相等比较: 可以使用== 也可以使用=,二者是等价的,注意=号与字符串之间要有空格
    • 不相等比较: 使用 !=

    实例如下

    • 实例1 使用=
    -> # cat -n test.sh
         1	#!/bin/sh
         2	if [[ "133" = "133" ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:41:00] [~/vm8500_Uniview] 
    -> # sh test.sh
    yes
    
    
    • 实例2 使用==
    -> # cat -n test.sh
         1	#!/bin/sh
         2	if [[ "133" == "133" ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:41:13] [~/vm8500_Uniview] 
    -> # sh test.sh
    yes
    
    
    • 实例3 使用!=
    -> # cat -n test.sh
         1	#!/bin/sh
         2	if [[ "132" != "133" ]];then
         3	echo yes
         4	else
         5	echo no
         6	fi
    root@cenos62-64 [10:41:34] [~/vm8500_Uniview] 
    -> # sh test.sh
    yes
    
    

    字符串截取

    假设有变量 var=http://www.linuxidc.com/123.htm

    1. #号截取,删除左边字符,保留右边字符。
    echo ${var#*//}
    

    结果:

    www.linuxidc.com/123.htm
    
    1. ## 号截取,删除左边字符,保留右边字符。
    echo ${var##*/}
    

    结果:

    123.htm
    
    1. %号截取,删除右边字符,保留左边字符
    echo ${var%/*}
    

    结果:

    http://www.linuxidc.com
    
    1. %%号截取,删除右边字符,保留左边字符
    echo ${var%%/*}
    

    结果:

    http:
    
    1. 从左边第几个字符开始,及字符的个数
    echo ${var:0:5}
    

    结果:

    http:
    
    1. 从左边第几个字符开始,一直到结束。
    echo ${var:7}
    

    结果:

    www.linuxidc.com/123.htm
    
    1. 从右边第几个字符开始,及字符的个数
    echo ${var:0-7:3}
    

    结果:

    123
    
    1. 从右边第几个字符开始,一直到结束。
    echo ${var:0-7}
    

    结果:

    123.htm
    

    字符串替换

    string=abc12342341
    echo ${string/23/bb}   //abc1bb42341  替换一次    
    echo ${string//23/bb}  //abc1bb4bb41  双斜杠替换所有匹配    
    echo ${string/#abc/bb} //bb12342341   #以什么开头来匹配
    echo ${string/%41/bb}  //abc123423bb  %以什么结尾来匹配
    
    test='c:/windows/boot.ini'  
    echo ${test///\}   结果 c:windows/boot.ini  
    echo ${test////\}  结果 c:windowsoot.ini  
      
    #${变量/查找/替换值} 一个“/”表示替换第一个,”//”表示替换所有,当查找中出现了:”/”请加转义符”/”表示。  
    

    字符串包含

    1. 利用grep查找
    strA="long string"
    strB="string"
    result=$(echo $strA | grep "${strB}")
    if [[ "$result" != "" ]]
    then
        echo "包含"
    else
        echo "不包含"
    fi
    
    1. 利用字符串运算符
    strA="helloworld"
    strB="low"
    if [[ $strA =~ $strB ]]
    then
        echo "包含"
    else
        echo "不包含"
    fi
    
    1. 利用通配符
    A="helloworld"
    B="low"
    if [[ $A == *$B* ]]
    then
        echo "包含"
    else
        echo "不包含"
    fi
    

    字符串遍历

    • 方式0
    for i in 'hello world'
    do
    echo $i
    done
    
    

    结果:

    root@centos7-132:[/root]sh test_str.sh 
    hello world
    
    • 方式1
    str='hello world'
    for i in  $str
    do
    echo $i
    done
    

    结果:

    hello
    world
    
    • 方式2
    str="hello world"
    for i in `seq ${#str}`
    do
    echo ${str:$i-1:1}
    done
    

    结果:

    h
    e
    l
    l
    o
    
    w
    o
    r
    l
    d
    
    • 方式3
    echo "hello world" | awk -F '' '{for (i=1;i<=NF;i++) {print $i}}'
    

    结果:

    h
    e
    l
    l
    o
    
    w
    o
    r
    l
    d
    
    
    • 方式4
    data='hello world'
    for i in `seq ${#data}`
    do
            echo ${data:$i-1:1}
    done
    
    

    结果:

    h
    e
    l
    l
    o
    
    w
    o
    r
    l
    d
    

    读取字符串值

    在这里插入图片描述

  • 相关阅读:
    touch创建文件
    excel如何冻结首行或首列及首行首列同时冻结
    cd mkdir mv cp rm 命令目录相关操作
    months_between()用法
    sysdate()简单用法
    round()和trunc()用法
    length() 用法
    replace 用法
    orcl 中upper()和lower()和initcap()的用法
    orcl 复杂查询
  • 原文地址:https://www.cnblogs.com/yldf/p/11900037.html
Copyright © 2020-2023  润新知