zoukankan      html  css  js  c++  java
  • shell 字符串操作小结

     

    shell 字符串操作小结

     

    #!/bin/bash

    ##########################################
    #
    #   演示bash中操作字符串的操作
    #
    #   后面是输出结果
    #
    ##########################################

    str="abc123abcABC"
    #    |-|
    #    |-------|

    #计算字符串的长度 
    echo ${#str}    #12

    #位置参数有关操作
    echo ${#*}      #位置参数的个数
    echo ${#@}      #位置参数的个数和上面的效果一样
    echo $*         #把所有的位置参数作为一个字符串输出
    echo $@         #效果同上
    #字串截取
    #
    #    ${string#substring}
    #         从$string的左边第一个字符截掉第一个匹配的$substring
    #    ${string##substring}
    #         从$string的左边第一个字符截掉最后一个个匹配的$substring
    #
    #从左边开始
    echo ${str#a*c} #a到c的最短匹配
    echo ${str##a*c} #a到c的最长匹配

    #从右边开始
    echo ${str%a*C}     #从右边的最后一个字符开始寻找a到B的最短匹配
    echo ${str%%a*B}    #从右边最后一个字符开始寻找a到B的最长匹配
                        #这里找不到模式

    #==取子串==
    #   ${string:position}
    #   ${string:positon:length}
    #
    echo ${str:2}       #从第2个位置开始提取字符串的值
    echo ${str:2:3}     #从第2个位置开始提取长度为3个字符的值
    #反向提取子串
    echo ${str:(-2)}        #从反向的第2个位置开始提取字符串
    echo ${str:(-2):6}      #从反向的第2个字符的位置开始提取长度为6个字符的串(:(不可能把)
                            #总共的字符长度只有2个怎么提取6个呢呵呵
    echo ${str:(-6):3}      #6个中提出3个总可以了把

    #位置参数的提取

    echo ${*:2}         #从第二个位置参数开始提取后面所有位置参数的值
    echo ${*:2:3}           #从第二个位置参数开始提取3个位置参数的值

    #=子串替换=
    # ${string/substring/replacement}
    #   使用$replacement来替换第一个匹配的$substring.
    # ${string//substring/replacement}
    #   使用$replacement来替换所有匹配的$substring.
    #
    # ${string/#substring/replacement}
    #   如果$substring匹配$string的开头部分,那么就用$replacement来替换$substring.
    # ${string/%substring/replacement}
    #   如果$substring匹配$string的结尾部分,那么就用$replacement来替换$substring.
    #
    str1="123abcABCab12"

    echo ${str1/12/hover}   #仅仅替换了第一个
    echo ${str1//12/hover}  #替换了所有的

    echo ${str1/#12/hover}  # 从头开始匹配12,如果找到做替换
    echo ${str1/%12/hover}  # 从尾开始匹配12,如果找到做替换

    ######################################################3

    字符串单个赋值到数组:

    root@yeah ~
    $ str=abcdefg

    root@yeah ~
    $ i=0;while((i<${#str}));do array[$i]=${str:i:1};((i++));done

    root@yeah ~
    $ set|grep array
    array=([0]="a" [1]="b" [2]="c" [3]="d" [4]="e" [5]="f" [6]="g" [7]="")

    root@yeah ~
    $ echo ${array[0]}
    a

    root@yeah ~
    $ echo ${array[1]}
    b

    root@yeah ~
    $ echo ${array[@]}
    a b c d e f g


    for index in `seq 0 $((${#str}-1))`
    do
    array[$index]=${str:$index:1}
    done

    shell 字符串数组处理


    这段代码用来处理系统中的某个程序(脚本)的调用,但是又不知道这个程序文件的具体位置,只是知道可能存在的位置。有点智能的味道哦。



      exp_cmds="$BASE_DIR/$old_version/bin/exp_my_db /
                $BASE_DIR/$old_version/bin/exp_db /
                $BASE_DIR/$VERSION/bin/exp_db /
                $BASE_DIR/$old_version/my/scripts/exp_my_db /
                $BASE_DIR/$old_version/my/scripts/exp_db /
                $BASE_DIR/$VERSION/my/scripts/exp_db"      #构造字符串数组,用符号 / 隔开的哦

      exp_cmd_found=0

      for cmd in $exp_cmds   #用for  来循环取哦
      do
          if [ -f $cmd ]  #存在exp_db 或则exp_my_db这个脚本文件
          then
          echo "Exporting database ... "
          run_as_oracle_nolog $cmd 100 $MY_BACKUP_DIR 2>&1 | $TEE -a $TMP_FILE  #核心程序
          exp_cmd_found=1
              break  #哈哈找到了一个,完成功能就立刻退出去哦
          fi
      done

    麻雀虽小,启发很大

  • 相关阅读:
    [nodejs] 静态资源服务器
    [nodejs]fs 读数据流和写数据流
    [nodejs]fs文件模块-练习
    [nodejs] fs文件模块
    利用SqlServer触发器自动更新表updatetime字段值
    python发送邮件至多人
    mybatis-plus获取Timestamp类型,无法获取变量null
    1.iOS第一个简单APP
    Mysql浅析
    Nginx编译安装Lua模块
  • 原文地址:https://www.cnblogs.com/hxu7373/p/3817686.html
Copyright © 2011-2022 走看看