隨筆-314  評論-209  文章-0  trackbacks-0
          一、構(gòu)造字符串
          直接構(gòu)造
          STR_ZERO=hello
          STR_FIRST="i am a string"
          STR_SECOND='success'

          重復(fù)多次
          #repeat the first parm($1) by $2 times
          strRepeat()
          {
          local x=$2
          if [ "$x" == "" ]; then
          x=0
          fi

          local STR_TEMP=""
          while [ $x -ge 1 ];
          do
          STR_TEMP=`printf "%s%s" "$STR_TEMP" "$1"`
          x=`expr $x - 1`
          done
          echo $STR_TEMP
          }

          舉例:
          STR_REPEAT=`strRepeat "$USER_NAME" 3`
          echo "repeat = $STR_REPEAT"

          二、賦值與拷貝
          直接賦值
          與構(gòu)造字符串一樣
          USER_NAME=terry

          從變量賦值
          ALIASE_NAME=$USER_NAME

          三、聯(lián)接
          直接聯(lián)接兩個字符串
          STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
          使用printf可以進(jìn)行更復(fù)雜的聯(lián)接

          四、求長
          獲取字符串變量的長度:${#string}

          求字符數(shù)(char)
          COUNT_CHAR=`echo "$STR_FIRST" | wc -m`
          echo $COUNT_CHAR

          求字節(jié)數(shù)(byte)
          COUNT_BYTE=`echo "$STR_FIRST" | wc -c`
          echo $COUNT_BYTE

          求字?jǐn)?shù)(word)
          COUNT_WORD=`echo "$STR_FIRST" | wc -w`
          echo $COUNT_WORD

          五、比較
          相等比較 str1 = str2
          不等比較 str1 != str2

          舉例:
          if [ "$USER_NAME" = "terry" ]; then
          echo "I am terry"
          fi

          小于比較
          #return 0 if the two string is equal, return 1 if $1 < $2, else 2strCompare() { local x=0 if [ "$1" != "$2" ]; then x=2 localTEMP=`printf "%s\n%s" "$1" "$2"` local TEMP2=`(echo "$1"; echo "$2") |sort` if [ "$TEMP" = "$TEMP2" ]; then x=1 fi fi echo $x }

          六、測試
          判空   -z str
          判非空  -n str

          是否為數(shù)字
          # return 0 if the string is num, otherwise 1
          strIsNum()
          {
          local RET=1
          if [ -n "$1" ]; then
          local STR_TEMP=`echo "$1" | sed 's/[0-9]//g'`
          if [ -z "$STR_TEMP" ]; then
          RET=0
          fi
          fi
          echo $RET
          }

          舉例:
          if [ -n "$USER_NAME" ]; then
          echo "my name is NOT empty"
          fi

          echo `strIsNum "9980"`

          七、分割
          以符號+為準(zhǔn),將字符分割為左右兩部分
          使用sed
          舉例:
          命令 date --rfc-3339 seconds 的輸出為
          2007-04-14 15:09:47+08:00
          取其+左邊的部分
          date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'
          輸出為
          2007-04-14 15:09:47
          取+右邊的部分
          date --rfc-3339 seconds | sed 's/.*+//g'
          輸出為
          08:00

          以空格為分割符的字符串分割
          使用awk
          舉例:
          STR_FRUIT="Banana 0.89 100"
          取第3字段
          echo $STR_FRUIT | awk '{ print $3; }'

          八、子字符串
          字符串1是否為字符串2的子字符串
          # return 0 is $1 is substring of $2, otherwise 1
          strIsSubstring()
          {
          local x=1
          case "$2" in
          *$1*) x=0;;
          esac
          echo $x
          }

          Shell字符串截取

          一、Linux shell 截取字符變量的前8位,有方法如下:

          1.expr substr “$a” 1 8
          2.echo $a|awk ‘{print substr(,1,8)}’
          3.echo $a|cut -c1-8
          4.echo $
          5.expr $a : ‘\(.\\).*’
          6.echo $a|dd bs=1 count=8 2>/dev/null

          二、按指定的字符串截取
          1、第一種方法:
          • ${varible##*string} 從左向右截取最后一個string后的字符串
          • ${varible#*string}從左向右截取第一個string后的字符串
          • ${varible%%string*}從右向左截取最后一個string后的字符串
          • ${varible%string*}從右向左截取第一個string后的字符串
          “*”只是一個通配符可以不要

          例子:
          $ MYVAR=foodforthought.jpg
          $ echo ${MYVAR##*fo}
          rthought.jpg
          $ echo ${MYVAR#*fo}
          odforthought.jpg

          2、第二種方法:${varible:n1:n2}:截取變量varible從n1開始的n2個字符,組成一個子字符串。可以根據(jù)特定字符偏移和長度,使用另一種形式的變量擴(kuò)展,來選擇特定子字符串。試著在 bash 中輸入以下行:
          $ EXCLAIM=cowabunga
          $ echo ${EXCLAIM:0:3}
          cow
          $ echo ${EXCLAIM:3:7}
          abunga
          這種形式的字符串截?cái)喾浅:啽悖恍栌妹疤柗珠_來指定起始字符和子字符串長度。

          三、按照指定要求分割:
          比如獲取后綴名
          ls -al | cut -d “.” -f2

          shell (bash) 比較運(yùn)算符

                                                                                                  
          運(yùn)算符 描述 示例
          文件比較運(yùn)算符
          -efilename 如果filename存在,則為真 [ -e /var/log/syslog ]
          -dfilename 如果filename為目錄,則為真 [ -d /tmp/mydir ]
          -ffilename 如果filename為常規(guī)文件,則為真 [ -f /usr/bin/grep ]
          -Lfilename 如果filename為符號鏈接,則為真 [ -L /usr/bin/grep ]
          -rfilename 如果filename可讀,則為真 [ -r /var/log/syslog ]
          -wfilename 如果filename可寫,則為真 [ -w /var/mytmp.txt ]
          -xfilename 如果filename可執(zhí)行,則為真 [ -L /usr/bin/grep ]
          filename1-ntfilename2 如果filename1filename2新,則為真 [ /tmp/install/etc/services -nt /etc/services ]
          filename1-otfilename2 如果filename1filename2舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
          字符串比較運(yùn)算符[size=-1](請注意引號的使用,這是防止空格擾亂代碼的好方法)
          -zstring 如果string長度為零,則為真 [ -z "$myvar" ]
          -nstring 如果string長度非零,則為真 [ -n "$myvar" ]
          string1=string2 如果string1string2相同,則為真 [ "$myvar" = "one two three" ]
          string1!=string2 如果string1string2不同,則為真 [ "$myvar" != "one two three" ]
          算術(shù)比較運(yùn)算符
          num1-eqnum2 等于 [ 3 -eq $mynum ]
          num1-nenum2 不等于 [ 3 -ne $mynum ]
          num1-ltnum2 小于 [ 3 -lt $mynum ]
          num1-lenum2 小于或等于 [ 3 -le $mynum ]
          num1-gtnum2 大于 [ 3 -gt $mynum ]
          num1-genum2 大于或等于 [ 3 -ge $mynum ]
          posted on 2011-03-04 18:13 xzc 閱讀(9094) 評論(2)  編輯  收藏 所屬分類: linux/unix

          評論:
          # re: Shell處理字符串常用方法 2011-04-22 15:57 | xzc
          for fname in /inffile/lan/jh_data_20110412.txt
          do
          badfname=`echo ${fname##*/}|cut -d "." -f1`.bad
          echo ${badfname}
          done
          --結(jié)果為:
          jh_data_20110412.bad  回復(fù)  更多評論
            
          # re: Shell處理字符串常用方法 2011-05-05 18:37 | xzc
          #去掉字符串中空格
          gvProvince=`echo ${gvProvince} | sed 's/ //g'`  回復(fù)  更多評論
            
          主站蜘蛛池模板: 若羌县| 邵武市| 安化县| 长泰县| 六安市| 青河县| 广丰县| 乌鲁木齐市| 镇雄县| 沭阳县| 新干县| 雷州市| 和硕县| 徐州市| 沂水县| 湘潭县| 卢氏县| 高青县| 桦南县| 九台市| 苏尼特右旗| 茂名市| 明溪县| 多伦县| 霸州市| 新竹县| 汶川县| 安庆市| 岐山县| 师宗县| 建昌县| 嘉黎县| 慈溪市| 勐海县| 泽州县| 六安市| 临清市| 神农架林区| 黑龙江省| 安吉县| 深圳市|