网络知识 娱乐 Shell脚本~字符串处理

Shell脚本~字符串处理


为什么用${}引用变量,${}还有一个重要的功能,就是文本处理,单行文本基本上可以满足你所有需求。


获取字符串长度

~]# danyu=123456abc

~]# echo $danyu

123456abc

~]# echo ${#danyu}

9

~]#


字符串切片

格式:

${parameter:offset}

${parameter:offset:length}

截取从 offset 个字符开始,向后 length 个字符。

~]# danyu=123456abc


截取第一个字符开始,向后截取4个字符

~]# echo ${danyu:0:4}

1234

~]# echo ${danyu:3:7}

456abc

~]#


从字符位置7开始,向后截取

~]# echo ${danyu:7}

bc

~]#


截取最后一个字符

~]# echo ${danyu:(-1)}

c

~]#


截取最后两个字符

~]# echo ${danyu:(-2)}

bc

~]#


截取最后五个字符中的前三个,也就是56abc中的56a

~]# echo ${danyu:(-5):3}

56a

~]#


字符截取,第一个位置的字符用0表示,后面的类推,举例如下:

字符: 12345abc

位置表示: 01234567


替换字符串

格式:${parameter/pattern/string}

~]# danyu=abc12345abc


将ABC替换为hello

~]# echo ${danyu/abc/hello}

hello12345abc


将所有的ABC替换为hello

~]# echo ${danyu//abc/hello}

hello12345hello


也可以使用正则匹配

~]# echo ${danyu/[0-9]/a}

abca2345abc

~]# echo ${danyu//[0-9]/a}

abcaaaaaabc


patterm 前面开头一个正斜杠为只匹配第一个字符串,两个正斜杠为匹配所有字符。

字符串截取

格式:

${parameter#word} # 删除匹配前缀

${parameter##word}

${parameter%word} # 删除匹配后缀

${parameter%%word}

# 去掉左边,最短匹配模式,##最长匹配模式。

% 去掉右边,最短匹配模式,%%最长匹配模式

~]# url="http://www.danyu.com/test/index.html"


以//为分隔符截取右边字符串

~]# echo ${url#*//}

www.danyu.com/test/index.html


以/为分隔符截取右边字符串

~]# echo ${url##*/}

index.html


以//为分隔符截取左边字符串

~]# echo ${url%//*}

http:


以/为分隔符截取左边字符串

~]# echo ${url%/*}

http://www.danyu.com/test


以.为分隔符截取左边

~]# echo ${url%.*}

http://www.danyu.com/test/index


以.为分隔符截取右边

~]# echo ${url##*.}

html


变量状态赋值

${VAR:-string} 如果 VAR 变量为空则返回 string

${VAR:+string} 如果 VAR 变量不为空则返回 string

${VAR:=string} 如果 VAR 变量为空则重新赋值 VAR 变量值为 string

${VAR:?string} 如果 VAR 变量为空则将 string 输出到 stderr

如果变量为空就返回 hello world!

~]# danyu=

~]# echo ${danyu:-'hello world!'}

hello world!


如果变量不为空就返回 hello world!:

~]# danyu="hello"

~]# echo ${danyu:+'hello world!'}

hello world!


如果变量为空就重新赋值

~]# danyu=

~]# echo ${danyu:=hello}

hello

~]# echo $danyu

hello


如果变量为空就将信息输出 stderr

~]# danyu=

~]# echo ${danyu:?value is null}

-bash: danyu: value is null


字符串颜色

格式:

033[1;31;40m # 1 是显示方式,可选。31 是字体颜色。40m 是字体背景颜色。

033[0m # 恢复终端默认颜色,即取消颜色设置。

输入更醒目

示例

~]# echo $[$RANDOM%50] ##生成 0 - 49 之间随机数

~]# echo -e "033[1;$[RANDOM%7+31]mhello033[0m"