转自:http://blog.csdn.net/linfeng999/article/details/6661233
1. 构造字符串

  • 直接构造
STR_ZERO=hello    #shell中等号左右的空格不能随便加,如果写作STR_ZERO = hello,linux会认为STR_ZERO是一个命令而执行出错
STR_FIRST="i am a string"
STR_SECOND='success'
USER_NAME='world'
  • 重复多次
#repeat the first parm($1) by $2 times
strRepeat(){
  local x=$2    #$2代码函数的第2个参数
  if [ "$x" == "" ]; then  #此处中括号靠里必有空格,否则报错。if后需有空格,否则报错。
    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"    #双引号可输出变量中的值,单引号仅输出变量名
2、赋值与拷贝

  • 直接赋值,与构造字符串一样
USER_NAME=terry
  • 从变量赋值
ALIASE_NAME=$USER_NAME
3、联接

  • 直接联接两个字符串
STR_TEMP="$STR_ZERO""$USER_NAME"
STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`  #printf可设置较为复杂的字符串组合格式
4、求长

  • 获取字符串变量的长度
${#STR_ZERO}  #5
  • 求字符数(char)
COUNT_CHAR=`echo "$STR_ZERO" | wc -m`
echo $COUNT_CHAR  #6
  • 求字节数(byte)
COUNT_BYTE=`echo "$STR_ZERO" | wc -c`
echo $COUNT_BYTE  #6
  • 求字数(word)
COUNT_WORD=`echo "$STR_FIRST" | wc -w`
echo $COUNT_WORD  #1
5、比较
字符串相等比较 str1 = str2 或 str1 == str2
字符串不等比较 str1 != str2 数字相等返回真: -eq
数字不相等返回真:-nq
数字大于返回真:-gt
数字小于返回真:-lt
数字大于等于返回真:-ge
数字小于等于返回真:-le 举例:
if [ "$USER_NAME" = "terry" ]; then
  echo "I am terry"
fi 小于比较
#return 0 if the two string is equal, return 1 if $1 < $2, else 2
strCompare() {
  local x=0
  if [ "$1" != "$2" ]; then
    x=2
    local TEMP=`printf "%s\n%s" "$1" "$2"`
    local TEMP2=`(echo "$1"; echo "$2") | sort`
      if [ "$TEMP" = "$TEMP2" ]; then
        x=1
      fi
  fi
  echo $x
}
6、测试
判断是否为空:   -z str
判断是否为非空 -n str
判断是否为正规文件 -f file
判断是否为目录:  -d file
判断是否可读/写/执行:  -r/w/x file 是否为数字
# 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"`

7、分割

  • 以符号+为准,将字符分割为左右两部分,使用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; }'
8、Shell字符串截取
  • Linux shell 截取字符变量的前8位
1.expr substr “$a” 1 8
2.echo $a|awk ‘{print substr($0,1,8)}’
3.echo $a|cut -c 1-8
4.echo $a|dd bs=1 count=8 2>/dev/null

9、按指定的字符串截取
第一种方法:

  • ${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 $ test='c:/windows/boot.ini'
$ echo ${test#/}
c:/windows/boot.ini
$ echo ${test#*/}
windows/boot.ini
$ echo ${test##*/}
boot.ini

第二种方法:

${varible:n1:n2}:截取变量varible从n1开始的n2个字符,组成一个子字符串。可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:

$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga

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

 
10、按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
 
11、shell (bash) 比较运算符
运算符 描述 示例
文件比较运算符
-e filename 如果filename存在,则为真 [ -e /var/log/syslog ]
-d filename 如果filename为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果filename为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果filename为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果filename可读,则为真 [ -r /var/log/syslog ]
-w filename 如果filename可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果filename可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果filename1filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果filename1filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符[size=-1](请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果string长度为零,则为真 [ -z "$myvar" ]
-n string 如果string长度非零,则为真 [ -n "$myvar" ]
string1==string2 如果string1string2相同,则为真 [ "$myvar" = "one two three" ]
string1!=string2 如果string1string2不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]

【转】shell脚本处理字符串的常用方法的更多相关文章

  1. Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】

    最近发现使用  -z   和  -n  来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ]    ...

  2. SHELL脚本编程-字符串处理

    SHELL脚本编程-字符串处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符串切片 [root@node101.yinzhengjie.org.cn ~]# echo { ...

  3. shell脚本中字符串的常见操作及"command not found"报错处理(附源码)

    简介 昨天在通过shell脚本实现一个功能的时候,由于对shell处理字符串的方法有些不熟悉导致花了不少时间也犯了很多错误,因此将昨日的一些错误记录下来,避免以后再犯. 字符串的定义与赋值 # 定义S ...

  4. shell脚本比较字符串相等

    昨天在定位一个bug的时候,需要些shell脚本,用到了字符串的比较,出了一个小问题,就搜索总结了一下. 第一种方法:-eq 对比字符串是否相等,我首先想到的就是 -eq,然而打印的结果不正确.各种e ...

  5. shell脚本返回字符串

    shell脚本的return只能返回数值类型,可是我们很多时候想返回字符串 #!/bin/sh function getStr () { String="very good" ec ...

  6. Linux上shell脚本,字符串转ASCII码

    在shell脚本里,将字符串转ASCII码的方法: [keysystem@localhost ~]$ printf "%d" "'A" [keysystem@l ...

  7. shell脚本之字符串测试表达式

    1.字符串测试操作符 字符串测试操作符的作用有:比较两个字符串是否相同.字符串的长度是否为零,字符串是否为NULL(注:bash区分零长度字符串和空字符串等) 下表为常用字符串操作符 也可以通过man ...

  8. Linux shell脚本的字符串截取

    http://blog.csdn.net/gumanren/article/details/5601544 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.ha ...

  9. Linux Shell脚本编程--字符串截取

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} ...

随机推荐

  1. LeetCode: pow

    Title: https://leetcode.com/problems/powx-n/ 思路:二分.使用递归或者非递归.非递归有点难理解.pow(0,0)=1 递归的方法是将n为负数的用除法解决.有 ...

  2. ffmpeg+rtsp+dss

    1. push stream to dss ffmpeg -f mpegts -re -i film.v -c:v libx264 -s 352x288 -aspect 4:3 -b:v 300k - ...

  3. AWK print学习

    Awk是一种处理结构数据并输出格式化结果的编程语言, Awk 是其作者 "Aho,Weinberger,Kernighan" 的简称. Awk通常被用来进行格式扫描和处理.通过扫描 ...

  4. IOS 支付宝 SDK 申请

    https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hash

  5. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (六) 自动化测试结构小节

    上一篇‘e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (五) 如何让窗体记录登录 ...

  6. Redrain仿酷狗音乐播放器开发完毕,发布测试程序

    转载请说明原出处,谢谢~~ 从暑假到现在中秋刚过,我用duilib开发仿酷狗播放器大概经历了50天.做仿酷狗的意图只是看原酷狗的界面比较漂亮,想做个完整一些的工程来练习一下duilib.今天把写好的程 ...

  7. 将string转化为char*的方法

    在构造文件流变量时候发现,fstream的第一个参数,即文件路径必须是const char * 如: string s = "/home/user/1.txt"; fstream ...

  8. JavaScript数值转换总结

    在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1  param是Boolean值,true和false分别转换为1和0: ...

  9. mybatis系列-11-一对多查询

    11.1     需求 查询订单及订单明细的信息. 11.2     sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT order ...

  10. linux 下的进程管理工具 supervisor

    在linux下监控进程: 1)yum install python-setuptools   linux下的python安装工具 2)easy_install supervisor     安装sup ...