Shell处理字符串常用方法

 Shell处理字符串方法(备查)

  一、构造字符串

  直接构造

  STR_ZERO=hello

  STR_FIRST="i am a string"

  STR_SECOND='success'

  重复多次

  #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"

  二、赋值与拷贝

  直接赋值

  与构造字符串一样

  USER_NAME=terry

  从变量赋值

  ALIASE_NAME=$USER_NAME

  三、联接

  直接联接两个字符串

  STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`

  使用printf可以进行更复杂的联接

  四、求长

  获取字符串变量的长度:${#string}

  求字符数(char)

  COUNT_CHAR=`echo "$STR_FIRST" | wc -m`

  echo $COUNT_CHAR

  求字节数(byte)

  COUNT_BYTE=`echo "$STR_FIRST" | wc -c`

  echo $COUNT_BYTE

  求字数(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

  是否为数字

  # 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"`



  七、分割

  以符号+为准,将字符分割为左右两部分

  使用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个字符,组成一个子字符串。可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:

  $ EXCLAIM=cowabunga

  $ echo ${EXCLAIM:0:3}

  cow

  $ echo ${EXCLAIM:3:7}

  abunga

  这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。


 三、按照指定要求分割:

  比如获取后缀名

  ls -al | cut -d “.” -f2

  shell (bash) 比较运算符

运算符描述 示例 
文件比较运算符   
-efilename如果filename存在,则为真 [ -e /var/log/syslog ] 
-dfilename 如果filename为目录,则为真 [ -d /tmp/mydir ] 
-ffilename 如果filename为常规文件,则为真 [ -f /usr/bin/grep ] 
-Lfilename 如果filename为符号链接,则为真 [ -L /usr/bin/grep ] 
-rfilename 如果filename可读,则为真 [ -r /var/log/syslog ] 
-wfilename 如果filename可写,则为真 [ -w /var/mytmp.txt ] 
-xfilename 如果filename可执行,则为真 [ -L /usr/bin/grep ] 
filename1-ntfilename2 如果filename1比filename2新,则为真 [ /tmp/install/etc/
services -nt /etc/services ] 
filename1-otfilename2 如果filename1比filename2旧,则为真 [ /boot/bzImage
-otarch/i386/boot/
bzImage ] 

字符串比较运算符
[size=-1](请注
意引号的使用,这是
防止空格扰乱代码的
好方法) 

  
-zstring 如果string长度为零,则为真 [ -z "$myvar" ] 
-nstring 如果string长度非零,则为真 [ -n "$myvar" ] 
string1=string2 如果string1与string2相同,则为真 [ "$myvar" = "one
two three" ] 
string1!=string2 如果string1与string2不同,则为真 [ "$myvar" != "one
two three" ] 
算术比较运算符   
num1-eqnum2 等于 [ 3 -eq $mynum ] 
num1-nenum2 小于或等于 [ 3 -le $mynum ] 
num1-ltnum2 小于 [ 3 -lt $mynum ] 
num1-lenum2 小于或等于 [ 3 -le $mynum ] 
num1-gtnum2 大于 [ 3 -gt $mynum ] 
num1-genum2 大于或等于 [ 3 -ge $mynum ] 

版权声明:本文出自smile665的51Testing软件测试博客:http://www.51testing.com/?225738

原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值