Linux shell脚本中字符串替换

通过shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串替换操作。其实shell内置一系列特殊字符的表达式,可以实现字符串替换,本文主要介绍一下Linux shell脚本中字符串替换。

1、字符串替换

 shell 遇到包含一个或多个特殊字符的表达式时,就会执行替换。

例如,

#!/bin/bash
URL="www.cjavapy.com"
echo -e "cjavapy = $URL \n no pain no gain"

输出:

$ bash demo.sh 
cjavapy = www.cjavapy.com
 no pain no gain

不使用-e选项的结果:

cjavapy = www.cjavapy.com \n no pain no gain

\n代表是换行符,echo命令支持的转义字符如下:

\a 警示字符

\b 退格

\c 忽略输出中最后的换行符号。这个参数之后的任何字符,包括后面的参数都会被忽略掉。

\f 清除屏幕

\n 换行

\r 回车

\t 水平制表符号

\v 垂直制表符号

\\ 反斜杠字符

注意:

1)可以使用-E选项禁用转义字符(反斜杠转义),默认就是这个选项。

2)可以使用-n选项不插入换行符。

例如,

#!/bin/bash
echo -n "c"
echo -n "java"
echo "py"

输出:

$ bash demo.sh 
cjavapy

2、命令替换

命令替换是指将命令的输出结果赋值给某个变量。

用法:

variable=`commands`
variable=$(commands)

注意variable 是变量名,commands 是要执行的命令。commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号;分隔。

例如,

#!/bin/bash
DATE=`date`
echo "Date is $DATE"
USERS=`who | wc -l`
echo "Logged in user are $USERS"
UP=`date ; uptime`
echo "Uptime is $UP"

输出:

Date is 2021年 10月 04日 星期一 20:32:44 CST
Logged in user are 3
Uptime is 2021年 10月 04日 星期一 20:32:44 CST
 20:32:44 up 339 days,  3:02,  3 users,  load average: 0.01, 0.04, 0.08

3、变更替换

变量替换是能够根据变量的状态来操作变量的值。如下表,

表达式

含义

${var}

变量var的值, 与$var相同

${var-DEFAULT}

如果var没有被声明, 那么就以$DEFAULT作为其值

${var:-DEFAULT}

如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值

${var=DEFAULT}

如果var没有被声明, 那么就以$DEFAULT作为其值

${var:=DEFAULT}

如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值

${var+OTHER}

如果var声明了, 那么其值就是$OTHER, 否则就为null字符串

${var:+OTHER}

如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串

${var?ERR_MSG}

如果var没被声明, 那么就打印$ERR_MSG

${var:?ERR_MSG}

如果var没被设置, 那么就打印$ERR_MSG

${!varprefix*}

匹配之前所有以varprefix开头进行声明的变量

${!varprefix@}

匹配之前所有以varprefix开头进行声明的变量

例如,

#!/bin/bash
echo ${var:-"cjavapy"}
echo "1 - c java py is ${var}"
echo ${var:="cjavapy"}
echo "2 - c java py is ${var}"
unset var
echo ${var:+"cjavapy"}
echo "3 - c java py is $var"
var="Prefix"
echo ${var:+"cjavapy"}
echo "4 - cj ava py is $var"
echo ${var:?"cjavapy"}
echo "5 - c java py is ${var}"

输出:

cjavapy
1 - c java py is 
cjavapy
2 - c java py is cjavapy
3 - c java py is 
cjavapy
4 - cj ava py is Prefix
Prefix
5 - c java py is Prefix


推荐阅读
cjavapy编程之路首页