linux shell字符串定义,Bash shell 字符串操作符详解

本文详细介绍一下Bash shell字符串操作的有关内容。

首先需要明白的一点是我们通常所用的变量替代 $varname 其实是 ${varname}的一种简写形式。

其次,需要知道字符串操作的核心思想是:Bash shell字符串操作是通过在变量名'varname'和闭花括号'}'之间插入操作符来完成的。

在明确了以上2点以后,我们就可以开始学习Bash shell字符串操作的相关内容了。本文分为四部分进行介绍。

替换操作符

${varname:-word}

含义:如果变量varname存在且非空, 返回变量的值;否则返回值word。

目的:如果变量未定义,则返回默认值word。

举例:如果变量count未定义,则:${count:-0}的值为0.

root@/export/home/ftp/pub-->echo $count

root@/export/home/ftp/pub-->echo ${count:-0}

0

root@/export/home/ftp/pub-->echo $count

root@/export/home/ftp/pub-->

${varname:=word}

含义:如果变量varname存在且非空,返回变量的值;否则将变量的值设为值word后返回变量的值。

目的:如果变量varname未定义,则将其设置为默认值word.

举例:如果变量count未定义,则将其设为0

root@/export/home/ftp/pub-->echo $count

root@/export/home/ftp/pub-->echo ${count:=0}

0

root@/export/home/ftp/pub-->echo $count

0

${varname:+word}

含义:如果变量varname存在且非空,返回值word;否则返回null。

目的:测试变量varname是否存在。

举例:如果变量count存在,返回1(表示存在)

root@/export/home/ftp/pub-->echo $count

0

root@/export/home/ftp/pub-->echo ${count:+1}

1

root@/export/home/ftp/pub-->unset count

root@/export/home/ftp/pub-->echo $count

root@/export/home/ftp/pub-->echo ${count:+1}

root@/export/home/ftp/pub-->

${varname:?message}

含义:如果变量varname存在且非空,返回变量的值;否则打印信息"varname: message";如果message没有指定,则显示parameter null or not set。

目的:如果变量未定义,则打印错误信息。

举例:如果变量count未定义,打印消息"count: undefined!

root@/export/home/ftp/pub-->echo $count

root@/export/home/ftp/pub-->echo ${count:?"undefined"}

bash: count: undefined

${varname:offset:length}

含义:返回变量varname的子字符串,开始位置为offset,长度为length。注意索引开始位置为0。

目的:返回子字符串。

举例:如果变量count的值为 frogfootman,则:

root@/export/home/ftp/pub-->count=frogfootman

root@/export/home/ftp/pub-->echo ${count:4}

footman

root@/export/home/ftp/pub-->echo ${count:4:4}

foot

root@/export/home/ftp/pub-->

模式匹配操作符

${varname#pattern}

含义:如果pattern匹配变量varname值的开始部分,删除最小

的匹配部分并且返回变量剩余部分内容。

举例:

root@/export/home/ftp/pub-->echo $path

/export/home/ftp/pub

root@/export/home/ftp/pub-->echo ${path#*/}

export/home/ftp/pub

${varname##pattern}

含义:如果pattern匹配变量varname值的开始部分,删除最大

的匹配部分并且返回变量剩余部分内容。

举例:

root@/export/home/ftp/pub-->echo $path

/export/home/ftp/pub

root@/export/home/ftp/pub-->echo ${path##*/}

pub

${varname%pattern}

含义:如果pattern匹配变量varname值的结尾部分,删除最小

的匹配部分并且返回变量剩余部分内容。

举例:

root@/export/home/ftp/pub-->echo $path

/export/home/ftp/pub

root@/export/home/ftp/pub-->echo ${path%/*}

/export/home/ftp

${varname%%pattern}

含义:如果pattern匹配变量varname值的结尾部分,删除最大

的匹配部分并且返回变量剩余部分内容。

举例:

root@/export/home/ftp/pub-->echo $file

alicece

root@/export/home/ftp/pub-->echo ${file?*}

alice

root@/export/home/ftp/pub-->echo ${file%?*}

ali

${varname/pattern/string}

含义:用值string替换varname中模式pattern可以匹配到的最大部分。仅替换第一次匹配。

举例:

root@/-->echo $PATH

/usr/sbin:/usr/bin:/export/home/ftp/pub/:/etc/vx/bin:/opt/VRTS/bin:/opt/VRTSvcs/bin:/opt/VRTSat/bin:/sbin:/usr/sbin:/usr/local/bin:/export/home/ftp/pub/

root@/-->echo -e ${PATH/:/'/n'}

/usr/sbin

/usr/bin:/export/home/ftp/pub/:/etc/vx/bin:/opt/VRTS/bin:/opt/VRTSvcs/bin:/opt/VRTSat/bin:/sbin:/usr/sbin:/usr/local/bin:/export/home/ftp/pub/

root@/-->

${varname//pattern/string}

含义:用值string替换varname中模式pattern可以匹配到的最大部分。全局匹配。

举例:

root@/-->echo $PATH

/usr/sbin:/usr/bin:/export/home/ftp/pub/:/etc/vx/bin:/opt/VRTS/bin:/opt/VRTSvcs/bin:/opt/VRTSat/bin:/sbin:/usr/sbin:/usr/local/bin:/export/home/ftp/pub/

root@/-->echo -e ${PATH//:/'/n'}

/usr/sbin

/usr/bin

/export/home/ftp/pub/

/etc/vx/bin

/opt/VRTS/bin

/opt/VRTSvcs/bin

/opt/VRTSat/bin

/sbin

/usr/sbin

/usr/local/bin

/export/home/ftp/pub/

变量长度

${#varname}

含义:获取变量varname值长度。

举例:

root@/-->echo $path

/export/home/ftp/pub

root@/-->echo ${#path}

20

扩展模式匹配操作府

注意:使用扩展模式匹配操作符时,shopt extglob必须为on

.

root@/tmp/ewang-->shopt extglob

extglob         on

*(patternlist)

含义:匹配patternlist中0个或多个pattern

举例:

root@/-->var=alicealicesophie

root@/-->echo ${var/*(alice|edward|stone)/ALICE}

ALICEsophie

+(patternlist)

含义:匹配patternlist中1个或多个pattern

举例:

root@/-->var=alicesophiealicestone

root@/-->echo ${var/+(alice|edward|stone)/ALICE}

ALICEsophiealicestone

root@/-->echo ${var//+(alice|edward|stone)/ALICE}

ALICEsophieALICE

(patternlist)

含义:匹配patternlist中0各或1个patter

@(patternlist)

含义:匹配patterlist中的1个pattern.

举例:

root@/-->count=123.5

root@/-->echo ${count/@(.)/#}

123#5

!(patternlist)

含义:匹配patterlist中所有pattern之外的pattern。

举例:

root@/tmp/ewang-->ls

abc  mn   tv1  vt0  vt1  vt2  vt3

root@/tmp/ewang-->rm -fr !(vt+([0-9]))

root@/tmp/ewang-->ls

vt0  vt1  vt2  vt3

root@/tmp/ewang-->

如对本文内容有任何问题,欢迎随时联系作者。

谢谢!

大小写转换以前写Bash Shell脚本,大小写转换通常这样做:

str="This is a Bash Shell script."

newstr=`tr '[A-Z]' '[a-z]' <<

今天看bash的man page,发现有更简单的方法

转小写,只需要将变量名字declare -l 后,再给变量赋值,变量的内容即为小写

转大写,只需要将变量名字declare -u后,再给变量赋值,变量的内容即为大写

例如:

m="abc"

echo $m # 输出为abc

declare -u m

echo $m # 输出为abc,

m="cde"

echo $m # 输出为CDE

declare -l m="HELL"

echo $m # 输出为hell

注意:

1,declare 不影响变量当前值,而是影响declare之后的赋值

2,通过declare -l/-u进行设置过的变量,可以通过declare +l/+u来取消设置。

3,Bash版本比较低的不行……

用tr

例如:UPPERCASE=$(echo $VARIABLE | tr '[a-z]' '[A-Z]')   (把VARIABLE的小写转换成大写)

LOWERCASE=$(echo $VARIABLE | tr '[A-Z]' '[a-z]')   (把VARIABLE的大写转换成小写)

用typeset

typeset -u VARIABLE  (把VARIABLE的小写转换成大写)

typeset -l  VARIABLE  (把VARIABLE的大写转换成小写)

例如:typeset -u VARIABLE

VARIABLE="True"

echo $VARIABLE

输出为TRUE

#!/bin/sh

#edit by www.jb51.net

# [:upper:] [ A - Z ]

# [:lower:] [ a - z ]

# [:digit:] [ 0 - 9 ]

# [:alnum:] [ 0 - 9 a - z A-Z]

# [:space:] 空格或t a b键

# [:alpha:] [ a - z A - Z ]

# tr

for f in *

do

echo $f | tr "[:upper:]" "[:lower:]"

done

#awk

#把当前目录下的所有小写文件名都改为大写文件名。

ls | awk '{printf("mv %s %s\n", $0, toupper($0))|"sh"}'

#把当前目录下的所有大写文件名都改为小写文件名。

ls | awk '{printf("mv %s %s\n", $0, tolower($0))|"sh"}'

#sed

file="test.txt"

cat $file | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值