Shell脚本【4】Shell字符串详解

字符串

字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)。
字符串和变量一样也有三种方式

str1=hello
str2='Shell'
str3="Scirpt"

这个三种形式的区别
<1>由单引号’ '包围的字符串:
任何字符都会原样输出,在其中使用变量是无效的。
字符串中不能出现单引号,即使对单引号进行转义也不行。

<2> 由双引号" "包围的字符串:
如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
字符串中可以出现双引号,只要它被转义了就行。

<3> 不被引号包围的字符串
不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。
字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。

获取字符串长度

方法如下:

${#string_name}

示例:

#!/bin/bash
str="hello Shell Script"
echo $(#str)

运行结果:

[root@system ~]# ./test1.sh 
18

字符串拼接

在 Shell 中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接

#!/bin/bash
a="hello"
b="Shell script"	
str1=$a$b	#中间不能有空格
str2="$a $b"	#如果被双引号包围,那么中间可以有空格
str3=$a"-"$b	#中间可以出现别的字符串
str4="${a} haha ${b}++"	   #这个时候需要给变量名加上大括号 
 
echo $str1
echo $str2
echo $str3
echo $str4

运行结果

[root@system ~]# ./test1.sh 
helloShell script
hello Shell script
hello-Shell script
hello haha Shell script++

字符串截取

Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取。

格式说明
${string: start :length}从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start :length}从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string#*chars}从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string##*chars}从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string%*chars}从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
${string%%*chars}从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

示例:

[root@system ~]# str="abcdefghigklmn"
[root@system ~]# echo ${str:1:4}
bcde

查找字符串位置

echo “*** index ***” 字符索引值,返回字符在字符串中第一次出现的索引值,此索引值从1开始;如果未找到则返回0

[root@system ~l]# str="hello world"
[root@system ~]# echo `expr index "$str" a`
0		#字符串中未找到字符a
[root@system ~]# echo `expr index "$str" e`
2
[root@system ~]# echo `expr index "$str" d`
11

expr命令

上例中expr命令用于计算数值与处理字符串
expr命令还可以用于:

数字运算

echo "*** + - * / % ***" #数字运算,最终返回计算结果。不过仅支持整数运算,如果使用浮点数将会报错,例如:
echo `expr 8 + 2` #10,数字加法

字符匹配

echo "*** : match ***" #字符匹配,其中第2个参数是正则表达式,并且会从第1个参数所代表的字符串中从头开始匹配,最终返回正确匹配的字符数;如果匹配失败,则返回0
echo `expr "$str" : "ing"` #0,无法匹配字符串的开头,所以匹配失败
echo `expr "$str" : "st"` #2,成功匹配字符串的前2个字符

获取字符串长度

echo "*** length ***" #字符串长度,返回字符串中所有字符的个数
echo `expr length "$str"` #17,返回字符串的长度

提取字符串

echo "*** substr ***" #提取子字符串,第2个参数是开始提取的索引值,第3个参数是提取子字符串的长度,最终返回所提取的子字符串
echo `expr substr "$str" 13 5` #line.,成功提取了最后一个单词和句点
echo `expr substr "$str" 1 6` #string,成功提取了第一个单词
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值