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

麻雀虽小,启发很大

posted @ 2014-07-01 09:47  tony7373  阅读(211)  评论(0编辑  收藏  举报